Skip to content

Commit

Permalink
Add server config to filter out syntax error diagnostics
Browse files Browse the repository at this point in the history
  • Loading branch information
dhruvmanila committed Jun 27, 2024
1 parent 5449d82 commit 79cfe90
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 12 deletions.
32 changes: 21 additions & 11 deletions crates/ruff_server/src/lint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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 {
Expand All @@ -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
Expand Down
6 changes: 5 additions & 1 deletion crates/ruff_server/src/server/api/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Expand Down
20 changes: 20 additions & 0 deletions crates/ruff_server/src/session/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}

Expand Down Expand Up @@ -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)]
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -602,6 +619,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),
Expand Down Expand Up @@ -633,6 +651,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),
Expand Down Expand Up @@ -726,6 +745,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,
Expand Down

0 comments on commit 79cfe90

Please sign in to comment.