diff options
| author | bors <bors@rust-lang.org> | 2024-07-03 09:01:48 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-07-03 09:01:48 +0000 |
| commit | 58bf5936c08252a8560ae536de52f912cc69fff9 (patch) | |
| tree | 88e302d1ae8ecbe1046b133008d9df983dd8ebdf /src/tools | |
| parent | ef54168778807387528268085bb1d6ba1e816b9e (diff) | |
| parent | 87da256395887eb77feb7df0498d2ad798bfae58 (diff) | |
Auto merge of #17536 - Veykril:syntax-diags, r=Veykril
fix: Don't emit semantic diagnostics in files with a lot of syntax errors These will only add to the noise when something very unexpected breaks or where parser recovery fails to kick in.
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-diagnostics/src/lib.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-diagnostics/src/lib.rs b/src/tools/rust-analyzer/crates/ide-diagnostics/src/lib.rs index 2bf3f5f0ceb..eb8e8e91d0e 100644 --- a/src/tools/rust-analyzer/crates/ide-diagnostics/src/lib.rs +++ b/src/tools/rust-analyzer/crates/ide-diagnostics/src/lib.rs @@ -311,9 +311,13 @@ pub fn diagnostics( FileRange { file_id, range: err.range() }, ) })); + let parse_errors = res.len(); let parse = sema.parse(file_id); + // FIXME: This iterates the entire file which is a rather expensive operation. + // We should implement these differently in some form? + // Salsa caching + incremental re-parse would be better here for node in parse.syntax().descendants() { handlers::useless_braces::useless_braces(&mut res, file_id, &node); handlers::field_shorthand::field_shorthand(&mut res, file_id, &node); @@ -326,7 +330,10 @@ pub fn diagnostics( let mut diags = Vec::new(); match module { - Some(m) => m.diagnostics(db, &mut diags, config.style_lints), + // A bunch of parse errors in a file indicate some bigger structural parse changes in the + // file, so we skip semantic diagnostics so we can show these faster. + Some(m) if parse_errors < 16 => m.diagnostics(db, &mut diags, config.style_lints), + Some(_) => (), None => handlers::unlinked_file::unlinked_file(&ctx, &mut res, file_id), } |
