From a54e481646edb151075d12ca6903091abe7cfc4e Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Tue, 20 Oct 2020 17:48:43 +0200 Subject: Simplify diagnostic construction, add unused field --- crates/ide/src/diagnostics.rs | 73 +++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 38 deletions(-) (limited to 'crates/ide/src/diagnostics.rs') diff --git a/crates/ide/src/diagnostics.rs b/crates/ide/src/diagnostics.rs index 1e5ea4617..c92c1c066 100644 --- a/crates/ide/src/diagnostics.rs +++ b/crates/ide/src/diagnostics.rs @@ -31,6 +31,21 @@ pub struct Diagnostic { pub range: TextRange, pub severity: Severity, pub fix: Option, + pub unused: bool, +} + +impl Diagnostic { + fn error(range: TextRange, message: String) -> Self { + Self { message, range, severity: Severity::Error, fix: None, unused: false } + } + + fn hint(range: TextRange, message: String) -> Self { + Self { message, range, severity: Severity::WeakWarning, fix: None, unused: false } + } + + fn with_fix(self, fix: Option) -> Self { + Self { fix, ..self } + } } #[derive(Debug)] @@ -71,13 +86,13 @@ pub(crate) fn diagnostics( let mut res = Vec::new(); // [#34344] Only take first 128 errors to prevent slowing down editor/ide, the number 128 is chosen arbitrarily. - res.extend(parse.errors().iter().take(128).map(|err| Diagnostic { - // name: None, - range: err.range(), - message: format!("Syntax Error: {}", err), - severity: Severity::Error, - fix: None, - })); + res.extend( + parse + .errors() + .iter() + .take(128) + .map(|err| Diagnostic::error(err.range(), format!("Syntax Error: {}", err))), + ); for node in parse.tree().syntax().descendants() { check_unnecessary_braces_in_use_statement(&mut res, file_id, &node); @@ -108,13 +123,8 @@ pub(crate) fn diagnostics( let mut sink = sink_builder // Diagnostics not handled above get no fix and default treatment. .build(|d| { - res.borrow_mut().push(Diagnostic { - // name: Some(d.name().into()), - message: d.message(), - range: sema.diagnostics_display_range(d).range, - severity: Severity::Error, - fix: None, - }) + res.borrow_mut() + .push(Diagnostic::error(sema.diagnostics_display_range(d).range, d.message())); }); if let Some(m) = sema.to_module_def(file_id) { @@ -125,22 +135,11 @@ pub(crate) fn diagnostics( } fn diagnostic_with_fix(d: &D, sema: &Semantics) -> Diagnostic { - Diagnostic { - // name: Some(d.name().into()), - range: sema.diagnostics_display_range(d).range, - message: d.message(), - severity: Severity::Error, - fix: d.fix(&sema), - } + Diagnostic::error(sema.diagnostics_display_range(d).range, d.message()).with_fix(d.fix(&sema)) } fn warning_with_fix(d: &D, sema: &Semantics) -> Diagnostic { - Diagnostic { - range: sema.diagnostics_display_range(d).range, - message: d.message(), - severity: Severity::WeakWarning, - fix: d.fix(&sema), - } + Diagnostic::hint(sema.diagnostics_display_range(d).range, d.message()).with_fix(d.fix(&sema)) } fn check_unnecessary_braces_in_use_statement( @@ -161,17 +160,14 @@ fn check_unnecessary_braces_in_use_statement( edit_builder.finish() }); - acc.push(Diagnostic { - // name: None, - range: use_range, - message: "Unnecessary braces in use statement".to_string(), - severity: Severity::WeakWarning, - fix: Some(Fix::new( - "Remove unnecessary braces", - SourceFileEdit { file_id, edit }.into(), - use_range, - )), - }); + acc.push( + Diagnostic::hint(use_range, "Unnecessary braces in use statement".to_string()) + .with_fix(Some(Fix::new( + "Remove unnecessary braces", + SourceFileEdit { file_id, edit }.into(), + use_range, + ))), + ); } Some(()) @@ -578,6 +574,7 @@ fn test_fn() { fix_trigger_range: 0..8, }, ), + unused: false, }, ] "#]], -- cgit v1.2.3 From 80d27414016903fa591548cff22939d3c43cdd8d Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Tue, 20 Oct 2020 17:49:21 +0200 Subject: Add a (hint) diagnostic for unconfigured items --- crates/ide/src/diagnostics.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'crates/ide/src/diagnostics.rs') diff --git a/crates/ide/src/diagnostics.rs b/crates/ide/src/diagnostics.rs index c92c1c066..394365bc8 100644 --- a/crates/ide/src/diagnostics.rs +++ b/crates/ide/src/diagnostics.rs @@ -10,7 +10,10 @@ mod field_shorthand; use std::cell::RefCell; use base_db::SourceDatabase; -use hir::{diagnostics::DiagnosticSinkBuilder, Semantics}; +use hir::{ + diagnostics::{Diagnostic as _, DiagnosticSinkBuilder}, + Semantics, +}; use ide_db::RootDatabase; use itertools::Itertools; use rustc_hash::FxHashSet; @@ -46,6 +49,10 @@ impl Diagnostic { fn with_fix(self, fix: Option) -> Self { Self { fix, ..self } } + + fn with_unused(self, unused: bool) -> Self { + Self { unused, ..self } + } } #[derive(Debug)] @@ -115,6 +122,13 @@ pub(crate) fn diagnostics( .on::(|d| { res.borrow_mut().push(warning_with_fix(d, &sema)); }) + .on::(|d| { + // Override severity and mark as unused. + res.borrow_mut().push( + Diagnostic::hint(sema.diagnostics_display_range(d).range, d.message()) + .with_unused(true), + ); + }) // Only collect experimental diagnostics when they're enabled. .filter(|diag| !(diag.is_experimental() && config.disable_experimental)) .filter(|diag| !config.disabled.contains(diag.code().as_str())); -- cgit v1.2.3 From 74ac83a5acc9f53db69577fc32a4a6e3985d2ef9 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Tue, 20 Oct 2020 18:29:47 +0200 Subject: Fixup botched rename --- crates/ide/src/diagnostics.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crates/ide/src/diagnostics.rs') diff --git a/crates/ide/src/diagnostics.rs b/crates/ide/src/diagnostics.rs index 394365bc8..90574cb35 100644 --- a/crates/ide/src/diagnostics.rs +++ b/crates/ide/src/diagnostics.rs @@ -122,7 +122,7 @@ pub(crate) fn diagnostics( .on::(|d| { res.borrow_mut().push(warning_with_fix(d, &sema)); }) - .on::(|d| { + .on::(|d| { // Override severity and mark as unused. res.borrow_mut().push( Diagnostic::hint(sema.diagnostics_display_range(d).range, d.message()) -- cgit v1.2.3