mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-02 18:02:23 +00:00
Add server config to filter out syntax error diagnostics (#12059)
## Summary Follow-up from #11901 This PR adds a new server setting to show / hide syntax errors. ## Test Plan ### VS Code Using https://github.com/astral-sh/ruff-vscode/pull/504 with the following config: ```json { "ruff.nativeServer": true, "ruff.path": ["/Users/dhruv/work/astral/ruff/target/debug/ruff"], "ruff.showSyntaxErrors": true } ``` First, set `ruff.showSyntaxErrors` to `true`: <img width="1177" alt="Screenshot 2024-06-27 at 08 34 58" src="5d77547a
-a908-4a00-8714-7c00784e8679"> And then set it to `false`: <img width="1185" alt="Screenshot 2024-06-27 at 08 35 19" src="9720f089
-f10c-420b-a2c1-2bbb2245be35"> ### Neovim Using the following Ruff server config: ```lua require('lspconfig').ruff.setup { init_options = { settings = { showSyntaxErrors = false, }, }, } ``` First, set `showSyntaxErrors` to `true`: <img width="1279" alt="Screenshot 2024-06-27 at 08 28 03" src="e694e231
-91ba-47f8-8e8a-ad2e82b85a45"> And then set it to `false`: <img width="1284" alt="Screenshot 2024-06-27 at 08 28 20" src="25b86a57
-02b1-44f7-9f65-cf5fdde93b0c">
This commit is contained in:
parent
72b6c26101
commit
22cebdf29b
3 changed files with 50 additions and 12 deletions
|
@ -60,7 +60,11 @@ pub(crate) struct DiagnosticFix {
|
||||||
/// A series of diagnostics across a single text document or an arbitrary number of notebook cells.
|
/// A series of diagnostics across a single text document or an arbitrary number of notebook cells.
|
||||||
pub(crate) type DiagnosticsMap = FxHashMap<lsp_types::Url, Vec<lsp_types::Diagnostic>>;
|
pub(crate) type DiagnosticsMap = FxHashMap<lsp_types::Url, Vec<lsp_types::Diagnostic>>;
|
||||||
|
|
||||||
pub(crate) fn check(query: &DocumentQuery, encoding: PositionEncoding) -> DiagnosticsMap {
|
pub(crate) fn check(
|
||||||
|
query: &DocumentQuery,
|
||||||
|
encoding: PositionEncoding,
|
||||||
|
show_syntax_errors: bool,
|
||||||
|
) -> DiagnosticsMap {
|
||||||
let source_kind = query.make_source_kind();
|
let source_kind = query.make_source_kind();
|
||||||
let file_resolver_settings = query.settings().file_resolver();
|
let file_resolver_settings = query.settings().file_resolver();
|
||||||
let linter_settings = query.settings().linter();
|
let linter_settings = query.settings().linter();
|
||||||
|
@ -156,10 +160,18 @@ pub(crate) fn check(query: &DocumentQuery, encoding: PositionEncoding) -> Diagno
|
||||||
.zip(noqa_edits)
|
.zip(noqa_edits)
|
||||||
.map(|(diagnostic, noqa_edit)| {
|
.map(|(diagnostic, noqa_edit)| {
|
||||||
to_lsp_diagnostic(diagnostic, &noqa_edit, &source_kind, &index, encoding)
|
to_lsp_diagnostic(diagnostic, &noqa_edit, &source_kind, &index, encoding)
|
||||||
})
|
});
|
||||||
.chain(parsed.errors().iter().map(|parse_error| {
|
|
||||||
parse_error_to_lsp_diagnostic(parse_error, &source_kind, &index, encoding)
|
let lsp_diagnostics = lsp_diagnostics.chain(
|
||||||
}));
|
show_syntax_errors
|
||||||
|
.then(|| {
|
||||||
|
parsed.errors().iter().map(|parse_error| {
|
||||||
|
parse_error_to_lsp_diagnostic(parse_error, &source_kind, &index, encoding)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.into_iter()
|
||||||
|
.flatten(),
|
||||||
|
);
|
||||||
|
|
||||||
if let Some(notebook) = query.as_notebook() {
|
if let Some(notebook) = query.as_notebook() {
|
||||||
for (index, diagnostic) in lsp_diagnostics {
|
for (index, diagnostic) in lsp_diagnostics {
|
||||||
|
@ -173,12 +185,10 @@ pub(crate) fn check(query: &DocumentQuery, encoding: PositionEncoding) -> Diagno
|
||||||
.push(diagnostic);
|
.push(diagnostic);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (_, diagnostic) in lsp_diagnostics {
|
diagnostics_map
|
||||||
diagnostics_map
|
.entry(query.make_key().into_url())
|
||||||
.entry(query.make_key().into_url())
|
.or_default()
|
||||||
.or_default()
|
.extend(lsp_diagnostics.map(|(_, diagnostic)| diagnostic));
|
||||||
.push(diagnostic);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
diagnostics_map
|
diagnostics_map
|
||||||
|
|
|
@ -9,7 +9,11 @@ use super::LSPResult;
|
||||||
pub(super) fn generate_diagnostics(snapshot: &DocumentSnapshot) -> DiagnosticsMap {
|
pub(super) fn generate_diagnostics(snapshot: &DocumentSnapshot) -> DiagnosticsMap {
|
||||||
if snapshot.client_settings().lint() {
|
if snapshot.client_settings().lint() {
|
||||||
let document = snapshot.query();
|
let document = snapshot.query();
|
||||||
crate::lint::check(document, snapshot.encoding())
|
crate::lint::check(
|
||||||
|
document,
|
||||||
|
snapshot.encoding(),
|
||||||
|
snapshot.client_settings().show_syntax_errors(),
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
DiagnosticsMap::default()
|
DiagnosticsMap::default()
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ pub(crate) struct ResolvedClientSettings {
|
||||||
lint_enable: bool,
|
lint_enable: bool,
|
||||||
disable_rule_comment_enable: bool,
|
disable_rule_comment_enable: bool,
|
||||||
fix_violation_enable: bool,
|
fix_violation_enable: bool,
|
||||||
|
show_syntax_errors: bool,
|
||||||
editor_settings: ResolvedEditorSettings,
|
editor_settings: ResolvedEditorSettings,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +71,13 @@ pub struct ClientSettings {
|
||||||
exclude: Option<Vec<String>>,
|
exclude: Option<Vec<String>>,
|
||||||
line_length: Option<LineLength>,
|
line_length: Option<LineLength>,
|
||||||
configuration_preference: Option<ConfigurationPreference>,
|
configuration_preference: Option<ConfigurationPreference>,
|
||||||
|
|
||||||
|
/// If `true` or [`None`], show syntax errors as diagnostics.
|
||||||
|
///
|
||||||
|
/// This is useful when using Ruff with other language servers, allowing the user to refer
|
||||||
|
/// to syntax errors from only one source.
|
||||||
|
show_syntax_errors: Option<bool>,
|
||||||
|
|
||||||
// These settings are only needed for tracing, and are only read from the global configuration.
|
// These settings are only needed for tracing, and are only read from the global configuration.
|
||||||
// These will not be in the resolved settings.
|
// These will not be in the resolved settings.
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
|
@ -244,6 +252,11 @@ impl ResolvedClientSettings {
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
),
|
),
|
||||||
|
show_syntax_errors: Self::resolve_or(
|
||||||
|
all_settings,
|
||||||
|
|settings| settings.show_syntax_errors,
|
||||||
|
true,
|
||||||
|
),
|
||||||
editor_settings: ResolvedEditorSettings {
|
editor_settings: ResolvedEditorSettings {
|
||||||
configuration: Self::resolve_optional(all_settings, |settings| {
|
configuration: Self::resolve_optional(all_settings, |settings| {
|
||||||
settings
|
settings
|
||||||
|
@ -345,6 +358,10 @@ impl ResolvedClientSettings {
|
||||||
self.fix_violation_enable
|
self.fix_violation_enable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn show_syntax_errors(&self) -> bool {
|
||||||
|
self.show_syntax_errors
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn editor_settings(&self) -> &ResolvedEditorSettings {
|
pub(crate) fn editor_settings(&self) -> &ResolvedEditorSettings {
|
||||||
&self.editor_settings
|
&self.editor_settings
|
||||||
}
|
}
|
||||||
|
@ -439,6 +456,7 @@ mod tests {
|
||||||
exclude: None,
|
exclude: None,
|
||||||
line_length: None,
|
line_length: None,
|
||||||
configuration_preference: None,
|
configuration_preference: None,
|
||||||
|
show_syntax_errors: None,
|
||||||
tracing: TracingSettings {
|
tracing: TracingSettings {
|
||||||
log_level: None,
|
log_level: None,
|
||||||
log_file: None,
|
log_file: None,
|
||||||
|
@ -491,6 +509,7 @@ mod tests {
|
||||||
exclude: None,
|
exclude: None,
|
||||||
line_length: None,
|
line_length: None,
|
||||||
configuration_preference: None,
|
configuration_preference: None,
|
||||||
|
show_syntax_errors: None,
|
||||||
tracing: TracingSettings {
|
tracing: TracingSettings {
|
||||||
log_level: None,
|
log_level: None,
|
||||||
log_file: None,
|
log_file: None,
|
||||||
|
@ -556,6 +575,7 @@ mod tests {
|
||||||
exclude: None,
|
exclude: None,
|
||||||
line_length: None,
|
line_length: None,
|
||||||
configuration_preference: None,
|
configuration_preference: None,
|
||||||
|
show_syntax_errors: None,
|
||||||
tracing: TracingSettings {
|
tracing: TracingSettings {
|
||||||
log_level: None,
|
log_level: None,
|
||||||
log_file: None,
|
log_file: None,
|
||||||
|
@ -602,6 +622,7 @@ mod tests {
|
||||||
lint_enable: true,
|
lint_enable: true,
|
||||||
disable_rule_comment_enable: false,
|
disable_rule_comment_enable: false,
|
||||||
fix_violation_enable: false,
|
fix_violation_enable: false,
|
||||||
|
show_syntax_errors: true,
|
||||||
editor_settings: ResolvedEditorSettings {
|
editor_settings: ResolvedEditorSettings {
|
||||||
configuration: None,
|
configuration: None,
|
||||||
lint_preview: Some(true),
|
lint_preview: Some(true),
|
||||||
|
@ -633,6 +654,7 @@ mod tests {
|
||||||
lint_enable: true,
|
lint_enable: true,
|
||||||
disable_rule_comment_enable: true,
|
disable_rule_comment_enable: true,
|
||||||
fix_violation_enable: false,
|
fix_violation_enable: false,
|
||||||
|
show_syntax_errors: true,
|
||||||
editor_settings: ResolvedEditorSettings {
|
editor_settings: ResolvedEditorSettings {
|
||||||
configuration: None,
|
configuration: None,
|
||||||
lint_preview: Some(false),
|
lint_preview: Some(false),
|
||||||
|
@ -700,6 +722,7 @@ mod tests {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
configuration_preference: None,
|
configuration_preference: None,
|
||||||
|
show_syntax_errors: None,
|
||||||
tracing: TracingSettings {
|
tracing: TracingSettings {
|
||||||
log_level: Some(
|
log_level: Some(
|
||||||
Warn,
|
Warn,
|
||||||
|
@ -726,6 +749,7 @@ mod tests {
|
||||||
lint_enable: true,
|
lint_enable: true,
|
||||||
disable_rule_comment_enable: false,
|
disable_rule_comment_enable: false,
|
||||||
fix_violation_enable: true,
|
fix_violation_enable: true,
|
||||||
|
show_syntax_errors: true,
|
||||||
editor_settings: ResolvedEditorSettings {
|
editor_settings: ResolvedEditorSettings {
|
||||||
configuration: None,
|
configuration: None,
|
||||||
lint_preview: None,
|
lint_preview: None,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue