Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-diagnostics/src/lib.rs')
-rw-r--r--crates/ide-diagnostics/src/lib.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/crates/ide-diagnostics/src/lib.rs b/crates/ide-diagnostics/src/lib.rs
index a419f04bfa..6d1226d65c 100644
--- a/crates/ide-diagnostics/src/lib.rs
+++ b/crates/ide-diagnostics/src/lib.rs
@@ -23,8 +23,6 @@
//! There are also a couple of ad-hoc diagnostics implemented directly here, we
//! don't yet have a great pattern for how to do them properly.
-#![warn(rust_2018_idioms, unused_lifetimes)]
-
mod handlers {
pub(crate) mod break_outside_of_loop;
pub(crate) mod expected_function;
@@ -233,7 +231,9 @@ pub struct DiagnosticsConfig {
pub insert_use: InsertUseConfig,
pub prefer_no_std: bool,
pub prefer_prelude: bool,
+ pub prefer_absolute: bool,
pub term_search_fuel: u64,
+ pub term_search_borrowck: bool,
}
impl DiagnosticsConfig {
@@ -259,7 +259,9 @@ impl DiagnosticsConfig {
},
prefer_no_std: false,
prefer_prelude: true,
+ prefer_absolute: false,
term_search_fuel: 400,
+ term_search_borrowck: true,
}
}
}
@@ -311,9 +313,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 +332,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),
}