diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-06-13 20:17:57 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2021-06-13 20:17:57 +0100 |
commit | f0618a8f06a464840079f30b3e25bcdcca3922a3 (patch) | |
tree | 5b57ca5243009f6a63cb6f3d37acb524b8cd2c80 /crates/ide/src/diagnostics.rs | |
parent | 8c5c0ef7b910ffafc9c684cb7076149ab79f4bdd (diff) | |
parent | 500c909c76a5165e3e3c6ff2eacc009c90f08bbe (diff) |
Merge #9257
9257: internal: diagnostic code is mandatory r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ide/src/diagnostics.rs')
-rw-r--r-- | crates/ide/src/diagnostics.rs | 84 |
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)] |
53 | pub struct Diagnostic { | 53 | pub 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 | ||
64 | impl Diagnostic { | 63 | impl 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 | ||