mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-15 22:54:00 +00:00
Auto merge of #14311 - Veykril:lib-diags, r=Veykril
internal: Don't attempt to calculate diagnostics in library crates We already filtered these later on, but we might as well stop calculating them alltogether. This way we also show cargo diagnostics that occur outside of the workspace which can happen when something goes very wrong (and which usually then causes no check diagnostics to appear in the workspace at all)
This commit is contained in:
commit
552aea508d
1 changed files with 10 additions and 11 deletions
|
@ -323,17 +323,6 @@ impl GlobalState {
|
|||
|
||||
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 uri = file_id_to_url(&self.vfs.read().0, file_id);
|
||||
let mut diagnostics =
|
||||
self.diagnostics.diagnostics_for(file_id).cloned().collect::<Vec<_>>();
|
||||
|
@ -972,10 +961,20 @@ impl GlobalState {
|
|||
}
|
||||
|
||||
fn update_diagnostics(&mut self) {
|
||||
let db = self.analysis_host.raw_database();
|
||||
let subscriptions = self
|
||||
.mem_docs
|
||||
.iter()
|
||||
.map(|path| self.vfs.read().0.file_id(path).unwrap())
|
||||
.filter(|&file_id| {
|
||||
let source_root = db.file_source_root(file_id);
|
||||
// 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.
|
||||
!db.source_root(source_root).is_library
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
tracing::trace!("updating notifications for {:?}", subscriptions);
|
||||
|
|
Loading…
Reference in a new issue