aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/diagnostics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide/src/diagnostics.rs')
-rw-r--r--crates/ide/src/diagnostics.rs84
1 files changed, 28 insertions, 56 deletions
diff --git a/crates/ide/src/diagnostics.rs b/crates/ide/src/diagnostics.rs
index c024e3e1e..815a633e5 100644
--- a/crates/ide/src/diagnostics.rs
+++ b/crates/ide/src/diagnostics.rs
@@ -51,28 +51,26 @@ impl DiagnosticCode {
51 51
52#[derive(Debug)] 52#[derive(Debug)]
53pub struct Diagnostic { 53pub struct Diagnostic {
54 // pub name: Option<String>, 54 pub code: DiagnosticCode,
55 pub message: String, 55 pub message: String,
56 pub range: TextRange, 56 pub range: TextRange,
57 pub severity: Severity, 57 pub severity: Severity,
58 pub fixes: Option<Vec<Assist>>,
59 pub unused: bool, 58 pub unused: bool,
60 pub code: Option<DiagnosticCode>,
61 pub experimental: bool, 59 pub experimental: bool,
60 pub fixes: Option<Vec<Assist>>,
62} 61}
63 62
64impl Diagnostic { 63impl Diagnostic {
65 fn new(code: &'static str, message: impl Into<String>, range: TextRange) -> Diagnostic { 64 fn new(code: &'static str, message: impl Into<String>, range: TextRange) -> Diagnostic {
66 let message = message.into(); 65 let message = message.into();
67 let code = Some(DiagnosticCode(code)); 66 Diagnostic {
68 Self { 67 code: DiagnosticCode(code),
69 message, 68 message,
70 range, 69 range,
71 severity: Severity::Error, 70 severity: Severity::Error,
72 fixes: None,
73 unused: false, 71 unused: false,
74 code,
75 experimental: false, 72 experimental: false,
73 fixes: None,
76 } 74 }
77 } 75 }
78 76
@@ -86,36 +84,14 @@ impl Diagnostic {
86 self 84 self
87 } 85 }
88 86
89 fn error(range: TextRange, message: String) -> Self { 87 fn with_fixes(mut self, fixes: Option<Vec<Assist>>) -> Diagnostic {
90 Self { 88 self.fixes = fixes;
91 message, 89 self
92 range,
93 severity: Severity::Error,
94 fixes: None,
95 unused: false,
96 code: None,
97 experimental: false,
98 }
99 }
100
101 fn hint(range: TextRange, message: String) -> Self {
102 Self {
103 message,
104 range,
105 severity: Severity::WeakWarning,
106 fixes: None,
107 unused: false,
108 code: None,
109 experimental: false,
110 }
111 }
112
113 fn with_fixes(self, fixes: Option<Vec<Assist>>) -> Self {
114 Self { fixes, ..self }
115 } 90 }
116 91
117 fn with_unused(self, unused: bool) -> Self { 92 fn with_unused(mut self, unused: bool) -> Diagnostic {
118 Self { unused, ..self } 93 self.unused = unused;
94 self
119 } 95 }
120} 96}
121 97
@@ -150,11 +126,9 @@ pub(crate) fn diagnostics(
150 126
151 // [#34344] Only take first 128 errors to prevent slowing down editor/ide, the number 128 is chosen arbitrarily. 127 // [#34344] Only take first 128 errors to prevent slowing down editor/ide, the number 128 is chosen arbitrarily.
152 res.extend( 128 res.extend(
153 parse 129 parse.errors().iter().take(128).map(|err| {
154 .errors() 130 Diagnostic::new("syntax-error", format!("Syntax Error: {}", err), err.range())
155 .iter() 131 }),
156 .take(128)
157 .map(|err| Diagnostic::error(err.range(), format!("Syntax Error: {}", err))),
158 ); 132 );
159 133
160 for node in parse.tree().syntax().descendants() { 134 for node in parse.tree().syntax().descendants() {
@@ -205,15 +179,8 @@ pub(crate) fn diagnostics(
205 } 179 }
206 180
207 res.retain(|d| { 181 res.retain(|d| {
208 if let Some(code) = d.code { 182 !ctx.config.disabled.contains(d.code.as_str())
209 if ctx.config.disabled.contains(code.as_str()) { 183 && !(ctx.config.disable_experimental && d.experimental)
210 return false;
211 }
212 }
213 if ctx.config.disable_experimental && d.experimental {
214 return false;
215 }
216 true
217 }); 184 });
218 185
219 res 186 res
@@ -244,13 +211,18 @@ fn check_unnecessary_braces_in_use_statement(
244 }); 211 });
245 212
246 acc.push( 213 acc.push(
247 Diagnostic::hint(use_range, "Unnecessary braces in use statement".to_string()) 214 Diagnostic::new(
248 .with_fixes(Some(vec![fix( 215 "unnecessary-braces",
249 "remove_braces", 216 "Unnecessary braces in use statement".to_string(),
250 "Remove unnecessary braces", 217 use_range,
251 SourceChange::from_text_edit(file_id, edit), 218 )
252 use_range, 219 .severity(Severity::WeakWarning)
253 )])), 220 .with_fixes(Some(vec![fix(
221 "remove_braces",
222 "Remove unnecessary braces",
223 SourceChange::from_text_edit(file_id, edit),
224 use_range,
225 )])),
254 ); 226 );
255 } 227 }
256 228