mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-24 05:25:17 +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.
|
||||
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 file_resolver_settings = query.settings().file_resolver();
|
||||
let linter_settings = query.settings().linter();
|
||||
|
@ -156,10 +160,18 @@ pub(crate) fn check(query: &DocumentQuery, encoding: PositionEncoding) -> Diagno
|
|||
.zip(noqa_edits)
|
||||
.map(|(diagnostic, noqa_edit)| {
|
||||
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() {
|
||||
for (index, diagnostic) in lsp_diagnostics {
|
||||
|
@ -173,12 +185,10 @@ pub(crate) fn check(query: &DocumentQuery, encoding: PositionEncoding) -> Diagno
|
|||
.push(diagnostic);
|
||||
}
|
||||
} else {
|
||||
for (_, diagnostic) in lsp_diagnostics {
|
||||
diagnostics_map
|
||||
.entry(query.make_key().into_url())
|
||||
.or_default()
|
||||
.push(diagnostic);
|
||||
}
|
||||
diagnostics_map
|
||||
.entry(query.make_key().into_url())
|
||||
.or_default()
|
||||
.extend(lsp_diagnostics.map(|(_, diagnostic)| diagnostic));
|
||||
}
|
||||
|
||||
diagnostics_map
|
||||
|
|
|
@ -9,7 +9,11 @@ use super::LSPResult;
|
|||
pub(super) fn generate_diagnostics(snapshot: &DocumentSnapshot) -> DiagnosticsMap {
|
||||
if snapshot.client_settings().lint() {
|
||||
let document = snapshot.query();
|
||||
crate::lint::check(document, snapshot.encoding())
|
||||
crate::lint::check(
|
||||
document,
|
||||
snapshot.encoding(),
|
||||
snapshot.client_settings().show_syntax_errors(),
|
||||
)
|
||||
} else {
|
||||
DiagnosticsMap::default()
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ pub(crate) struct ResolvedClientSettings {
|
|||
lint_enable: bool,
|
||||
disable_rule_comment_enable: bool,
|
||||
fix_violation_enable: bool,
|
||||
show_syntax_errors: bool,
|
||||
editor_settings: ResolvedEditorSettings,
|
||||
}
|
||||
|
||||
|
@ -70,6 +71,13 @@ pub struct ClientSettings {
|
|||
exclude: Option<Vec<String>>,
|
||||
line_length: Option<LineLength>,
|
||||
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 will not be in the resolved settings.
|
||||
#[serde(flatten)]
|
||||
|
@ -244,6 +252,11 @@ impl ResolvedClientSettings {
|
|||
},
|
||||
true,
|
||||
),
|
||||
show_syntax_errors: Self::resolve_or(
|
||||
all_settings,
|
||||
|settings| settings.show_syntax_errors,
|
||||
true,
|
||||
),
|
||||
editor_settings: ResolvedEditorSettings {
|
||||
configuration: Self::resolve_optional(all_settings, |settings| {
|
||||
settings
|
||||
|
@ -345,6 +358,10 @@ impl ResolvedClientSettings {
|
|||
self.fix_violation_enable
|
||||
}
|
||||
|
||||
pub(crate) fn show_syntax_errors(&self) -> bool {
|
||||
self.show_syntax_errors
|
||||
}
|
||||
|
||||
pub(crate) fn editor_settings(&self) -> &ResolvedEditorSettings {
|
||||
&self.editor_settings
|
||||
}
|
||||
|
@ -439,6 +456,7 @@ mod tests {
|
|||
exclude: None,
|
||||
line_length: None,
|
||||
configuration_preference: None,
|
||||
show_syntax_errors: None,
|
||||
tracing: TracingSettings {
|
||||
log_level: None,
|
||||
log_file: None,
|
||||
|
@ -491,6 +509,7 @@ mod tests {
|
|||
exclude: None,
|
||||
line_length: None,
|
||||
configuration_preference: None,
|
||||
show_syntax_errors: None,
|
||||
tracing: TracingSettings {
|
||||
log_level: None,
|
||||
log_file: None,
|
||||
|
@ -556,6 +575,7 @@ mod tests {
|
|||
exclude: None,
|
||||
line_length: None,
|
||||
configuration_preference: None,
|
||||
show_syntax_errors: None,
|
||||
tracing: TracingSettings {
|
||||
log_level: None,
|
||||
log_file: None,
|
||||
|
@ -602,6 +622,7 @@ mod tests {
|
|||
lint_enable: true,
|
||||
disable_rule_comment_enable: false,
|
||||
fix_violation_enable: false,
|
||||
show_syntax_errors: true,
|
||||
editor_settings: ResolvedEditorSettings {
|
||||
configuration: None,
|
||||
lint_preview: Some(true),
|
||||
|
@ -633,6 +654,7 @@ mod tests {
|
|||
lint_enable: true,
|
||||
disable_rule_comment_enable: true,
|
||||
fix_violation_enable: false,
|
||||
show_syntax_errors: true,
|
||||
editor_settings: ResolvedEditorSettings {
|
||||
configuration: None,
|
||||
lint_preview: Some(false),
|
||||
|
@ -700,6 +722,7 @@ mod tests {
|
|||
),
|
||||
),
|
||||
configuration_preference: None,
|
||||
show_syntax_errors: None,
|
||||
tracing: TracingSettings {
|
||||
log_level: Some(
|
||||
Warn,
|
||||
|
@ -726,6 +749,7 @@ mod tests {
|
|||
lint_enable: true,
|
||||
disable_rule_comment_enable: false,
|
||||
fix_violation_enable: true,
|
||||
show_syntax_errors: true,
|
||||
editor_settings: ResolvedEditorSettings {
|
||||
configuration: None,
|
||||
lint_preview: None,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue