]> git.lizzy.rs Git - rust.git/commitdiff
Merge #9801
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>
Fri, 6 Aug 2021 14:16:24 +0000 (14:16 +0000)
committerGitHub <noreply@github.com>
Fri, 6 Aug 2021 14:16:24 +0000 (14:16 +0000)
9801: fix: Don't publish diagnostics in crates.io or sysroot files r=jonas-schievink a=jonas-schievink

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/9766

bors r+

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
crates/rust-analyzer/src/main_loop.rs

index 62ff922e1ffe1221ef123a2dcdecf1f55b97a85d..1330370472349dbe34a0999255f3a6353a88b04b 100644 (file)
@@ -9,7 +9,7 @@
 use always_assert::always;
 use crossbeam_channel::{select, Receiver};
 use ide::{FileId, PrimeCachesProgress};
-use ide_db::base_db::VfsPath;
+use ide_db::base_db::{SourceDatabaseExt, VfsPath};
 use lsp_server::{Connection, Notification, Request};
 use lsp_types::notification::Notification as _;
 use vfs::ChangeKind;
@@ -454,6 +454,17 @@ fn handle_event(&mut self, event: Event) -> Result<()> {
 
         if let Some(diagnostic_changes) = self.diagnostics.take_changes() {
             for file_id in diagnostic_changes {
+                let db = self.analysis_host.raw_database();
+                let source_root = db.file_source_root(file_id);
+                if db.source_root(source_root).is_library {
+                    // Only publish diagnostics for files in the workspace, not from crates.io deps
+                    // or the sysroot.
+                    // While theoretically these should never have errors, we have quite a few false
+                    // positives particularly in the stdlib, and those diagnostics would stay around
+                    // forever if we emitted them here.
+                    continue;
+                }
+
                 let url = file_id_to_url(&self.vfs.read().0, file_id);
                 let diagnostics = self.diagnostics.diagnostics_for(file_id).cloned().collect();
                 let version = from_proto::vfs_path(&url)