Unnamed repository; edit this file 'description' to name the repository.
Don't compute diagnostics for non local files
Lukas Wirth 2024-10-25
parent 8b59541 · commit eac7840
-rw-r--r--crates/rust-analyzer/src/handlers/dispatch.rs4
-rw-r--r--crates/rust-analyzer/src/handlers/request.rs20
-rw-r--r--crates/rust-analyzer/src/main_loop.rs2
3 files changed, 16 insertions, 10 deletions
diff --git a/crates/rust-analyzer/src/handlers/dispatch.rs b/crates/rust-analyzer/src/handlers/dispatch.rs
index 21f95a945d..c2cf417572 100644
--- a/crates/rust-analyzer/src/handlers/dispatch.rs
+++ b/crates/rust-analyzer/src/handlers/dispatch.rs
@@ -121,8 +121,8 @@ impl RequestDispatcher<'_> {
}
/// Dispatches a non-latency-sensitive request onto the thread pool. When the VFS is marked not
- /// ready this will return a default constructed [`R::Result`].
- pub(crate) fn on_or<const ALLOW_RETRYING: bool, R>(
+ /// ready this will return a `default` constructed [`R::Result`].
+ pub(crate) fn on_with<const ALLOW_RETRYING: bool, R>(
&mut self,
f: fn(GlobalStateSnapshot, R::Params) -> anyhow::Result<R::Result>,
default: impl FnOnce() -> R::Result,
diff --git a/crates/rust-analyzer/src/handlers/request.rs b/crates/rust-analyzer/src/handlers/request.rs
index 35c61a336e..fa584ab4d2 100644
--- a/crates/rust-analyzer/src/handlers/request.rs
+++ b/crates/rust-analyzer/src/handlers/request.rs
@@ -479,12 +479,8 @@ pub(crate) fn handle_document_diagnostics(
snap: GlobalStateSnapshot,
params: lsp_types::DocumentDiagnosticParams,
) -> anyhow::Result<lsp_types::DocumentDiagnosticReportResult> {
- let file_id = from_proto::file_id(&snap, &params.text_document.uri)?;
- let source_root = snap.analysis.source_root_id(file_id)?;
- let line_index = snap.file_line_index(file_id)?;
- let config = snap.config.diagnostics(Some(source_root));
- if !config.enabled {
- return Ok(lsp_types::DocumentDiagnosticReportResult::Report(
+ const EMPTY: lsp_types::DocumentDiagnosticReportResult =
+ lsp_types::DocumentDiagnosticReportResult::Report(
lsp_types::DocumentDiagnosticReport::Full(
lsp_types::RelatedFullDocumentDiagnosticReport {
related_documents: None,
@@ -494,8 +490,18 @@ pub(crate) fn handle_document_diagnostics(
},
},
),
- ));
+ );
+
+ let file_id = from_proto::file_id(&snap, &params.text_document.uri)?;
+ let source_root = snap.analysis.source_root_id(file_id)?;
+ if !snap.analysis.is_local_source_root(source_root)? {
+ return Ok(EMPTY);
+ }
+ let config = snap.config.diagnostics(Some(source_root));
+ if !config.enabled {
+ return Ok(EMPTY);
}
+ let line_index = snap.file_line_index(file_id)?;
let supports_related = snap.config.text_document_diagnostic_related_document_support();
let mut related_documents = FxHashMap::default();
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index c531cd8d11..9ade3be5d6 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -1092,7 +1092,7 @@ impl GlobalState {
.on_latency_sensitive::<NO_RETRY, lsp_request::SemanticTokensRangeRequest>(handlers::handle_semantic_tokens_range)
// FIXME: Some of these NO_RETRY could be retries if the file they are interested didn't change.
// All other request handlers
- .on_or::<NO_RETRY, lsp_request::DocumentDiagnosticRequest>(handlers::handle_document_diagnostics, || lsp_types::DocumentDiagnosticReportResult::Report(
+ .on_with::<NO_RETRY, lsp_request::DocumentDiagnosticRequest>(handlers::handle_document_diagnostics, || lsp_types::DocumentDiagnosticReportResult::Report(
lsp_types::DocumentDiagnosticReport::Full(
lsp_types::RelatedFullDocumentDiagnosticReport {
related_documents: None,