diff options
Diffstat (limited to 'crates/ra_cargo_watch')
11 files changed, 554 insertions, 527 deletions
diff --git a/crates/ra_cargo_watch/src/conv.rs b/crates/ra_cargo_watch/src/conv.rs index a3f05bede..c6f8ca329 100644 --- a/crates/ra_cargo_watch/src/conv.rs +++ b/crates/ra_cargo_watch/src/conv.rs | |||
@@ -180,13 +180,13 @@ pub(crate) struct MappedRustDiagnostic { | |||
180 | pub(crate) fn map_rust_diagnostic_to_lsp( | 180 | pub(crate) fn map_rust_diagnostic_to_lsp( |
181 | rd: &RustDiagnostic, | 181 | rd: &RustDiagnostic, |
182 | workspace_root: &PathBuf, | 182 | workspace_root: &PathBuf, |
183 | ) -> Option<MappedRustDiagnostic> { | 183 | ) -> Vec<MappedRustDiagnostic> { |
184 | let primary_span = rd.spans.iter().find(|s| s.is_primary)?; | 184 | let primary_spans: Vec<&DiagnosticSpan> = rd.spans.iter().filter(|s| s.is_primary).collect(); |
185 | 185 | if primary_spans.is_empty() { | |
186 | let location = map_span_to_location(&primary_span, workspace_root); | 186 | return vec![]; |
187 | } | ||
187 | 188 | ||
188 | let severity = map_level_to_severity(rd.level); | 189 | let severity = map_level_to_severity(rd.level); |
189 | let mut primary_span_label = primary_span.label.as_ref(); | ||
190 | 190 | ||
191 | let mut source = String::from("rustc"); | 191 | let mut source = String::from("rustc"); |
192 | let mut code = rd.code.as_ref().map(|c| c.code.clone()); | 192 | let mut code = rd.code.as_ref().map(|c| c.code.clone()); |
@@ -199,19 +199,10 @@ pub(crate) fn map_rust_diagnostic_to_lsp( | |||
199 | } | 199 | } |
200 | } | 200 | } |
201 | 201 | ||
202 | let mut needs_primary_span_label = true; | ||
202 | let mut related_information = vec![]; | 203 | let mut related_information = vec![]; |
203 | let mut tags = vec![]; | 204 | let mut tags = vec![]; |
204 | 205 | ||
205 | // If error occurs from macro expansion, add related info pointing to | ||
206 | // where the error originated | ||
207 | if !is_from_macro(&primary_span.file_name) && primary_span.expansion.is_some() { | ||
208 | let def_loc = map_span_to_location_naive(&primary_span, workspace_root); | ||
209 | related_information.push(DiagnosticRelatedInformation { | ||
210 | location: def_loc, | ||
211 | message: "Error originated from macro here".to_string(), | ||
212 | }); | ||
213 | } | ||
214 | |||
215 | for secondary_span in rd.spans.iter().filter(|s| !s.is_primary) { | 206 | for secondary_span in rd.spans.iter().filter(|s| !s.is_primary) { |
216 | let related = map_secondary_span_to_related(secondary_span, workspace_root); | 207 | let related = map_secondary_span_to_related(secondary_span, workspace_root); |
217 | if let Some(related) = related { | 208 | if let Some(related) = related { |
@@ -231,15 +222,11 @@ pub(crate) fn map_rust_diagnostic_to_lsp( | |||
231 | 222 | ||
232 | // These secondary messages usually duplicate the content of the | 223 | // These secondary messages usually duplicate the content of the |
233 | // primary span label. | 224 | // primary span label. |
234 | primary_span_label = None; | 225 | needs_primary_span_label = false; |
235 | } | 226 | } |
236 | } | 227 | } |
237 | } | 228 | } |
238 | 229 | ||
239 | if let Some(primary_span_label) = primary_span_label { | ||
240 | write!(&mut message, "\n{}", primary_span_label).unwrap(); | ||
241 | } | ||
242 | |||
243 | if is_unused_or_unnecessary(rd) { | 230 | if is_unused_or_unnecessary(rd) { |
244 | tags.push(DiagnosticTag::Unnecessary); | 231 | tags.push(DiagnosticTag::Unnecessary); |
245 | } | 232 | } |
@@ -248,21 +235,45 @@ pub(crate) fn map_rust_diagnostic_to_lsp( | |||
248 | tags.push(DiagnosticTag::Deprecated); | 235 | tags.push(DiagnosticTag::Deprecated); |
249 | } | 236 | } |
250 | 237 | ||
251 | let diagnostic = Diagnostic { | 238 | primary_spans |
252 | range: location.range, | 239 | .iter() |
253 | severity, | 240 | .map(|primary_span| { |
254 | code: code.map(NumberOrString::String), | 241 | let location = map_span_to_location(&primary_span, workspace_root); |
255 | source: Some(source), | 242 | |
256 | message, | 243 | let mut message = message.clone(); |
257 | related_information: if !related_information.is_empty() { | 244 | if needs_primary_span_label { |
258 | Some(related_information) | 245 | if let Some(primary_span_label) = &primary_span.label { |
259 | } else { | 246 | write!(&mut message, "\n{}", primary_span_label).unwrap(); |
260 | None | 247 | } |
261 | }, | 248 | } |
262 | tags: if !tags.is_empty() { Some(tags) } else { None }, | 249 | |
263 | }; | 250 | // If error occurs from macro expansion, add related info pointing to |
264 | 251 | // where the error originated | |
265 | Some(MappedRustDiagnostic { location, diagnostic, fixes }) | 252 | if !is_from_macro(&primary_span.file_name) && primary_span.expansion.is_some() { |
253 | let def_loc = map_span_to_location_naive(&primary_span, workspace_root); | ||
254 | related_information.push(DiagnosticRelatedInformation { | ||
255 | location: def_loc, | ||
256 | message: "Error originated from macro here".to_string(), | ||
257 | }); | ||
258 | } | ||
259 | |||
260 | let diagnostic = Diagnostic { | ||
261 | range: location.range, | ||
262 | severity, | ||
263 | code: code.clone().map(NumberOrString::String), | ||
264 | source: Some(source.clone()), | ||
265 | message, | ||
266 | related_information: if !related_information.is_empty() { | ||
267 | Some(related_information.clone()) | ||
268 | } else { | ||
269 | None | ||
270 | }, | ||
271 | tags: if !tags.is_empty() { Some(tags.clone()) } else { None }, | ||
272 | }; | ||
273 | |||
274 | MappedRustDiagnostic { location, diagnostic, fixes: fixes.clone() } | ||
275 | }) | ||
276 | .collect() | ||
266 | } | 277 | } |
267 | 278 | ||
268 | /// Returns a `Url` object from a given path, will lowercase drive letters if present. | 279 | /// Returns a `Url` object from a given path, will lowercase drive letters if present. |
diff --git a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_clippy_pass_by_ref.snap b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_clippy_pass_by_ref.snap index 47801ae79..9e8f4eff4 100644 --- a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_clippy_pass_by_ref.snap +++ b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_clippy_pass_by_ref.snap | |||
@@ -2,98 +2,100 @@ | |||
2 | source: crates/ra_cargo_watch/src/conv/test.rs | 2 | source: crates/ra_cargo_watch/src/conv/test.rs |
3 | expression: diag | 3 | expression: diag |
4 | --- | 4 | --- |
5 | MappedRustDiagnostic { | 5 | [ |
6 | location: Location { | 6 | MappedRustDiagnostic { |
7 | uri: "file:///test/compiler/mir/tagset.rs", | 7 | location: Location { |
8 | range: Range { | 8 | uri: "file:///test/compiler/mir/tagset.rs", |
9 | start: Position { | 9 | range: Range { |
10 | line: 41, | 10 | start: Position { |
11 | character: 23, | 11 | line: 41, |
12 | }, | 12 | character: 23, |
13 | end: Position { | 13 | }, |
14 | line: 41, | 14 | end: Position { |
15 | character: 28, | 15 | line: 41, |
16 | character: 28, | ||
17 | }, | ||
16 | }, | 18 | }, |
17 | }, | 19 | }, |
18 | }, | 20 | diagnostic: Diagnostic { |
19 | diagnostic: Diagnostic { | 21 | range: Range { |
20 | range: Range { | 22 | start: Position { |
21 | start: Position { | 23 | line: 41, |
22 | line: 41, | 24 | character: 23, |
23 | character: 23, | 25 | }, |
24 | }, | 26 | end: Position { |
25 | end: Position { | 27 | line: 41, |
26 | line: 41, | 28 | character: 28, |
27 | character: 28, | 29 | }, |
28 | }, | 30 | }, |
29 | }, | 31 | severity: Some( |
30 | severity: Some( | 32 | Warning, |
31 | Warning, | ||
32 | ), | ||
33 | code: Some( | ||
34 | String( | ||
35 | "trivially_copy_pass_by_ref", | ||
36 | ), | 33 | ), |
37 | ), | 34 | code: Some( |
38 | source: Some( | 35 | String( |
39 | "clippy", | 36 | "trivially_copy_pass_by_ref", |
40 | ), | 37 | ), |
41 | message: "this argument is passed by reference, but would be more efficient if passed by value\n#[warn(clippy::trivially_copy_pass_by_ref)] implied by #[warn(clippy::all)]\nfor further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref", | 38 | ), |
42 | related_information: Some( | 39 | source: Some( |
43 | [ | 40 | "clippy", |
44 | DiagnosticRelatedInformation { | 41 | ), |
45 | location: Location { | 42 | message: "this argument is passed by reference, but would be more efficient if passed by value\n#[warn(clippy::trivially_copy_pass_by_ref)] implied by #[warn(clippy::all)]\nfor further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref", |
46 | uri: "file:///test/compiler/lib.rs", | 43 | related_information: Some( |
47 | range: Range { | 44 | [ |
48 | start: Position { | 45 | DiagnosticRelatedInformation { |
49 | line: 0, | 46 | location: Location { |
50 | character: 8, | 47 | uri: "file:///test/compiler/lib.rs", |
51 | }, | 48 | range: Range { |
52 | end: Position { | 49 | start: Position { |
53 | line: 0, | 50 | line: 0, |
54 | character: 19, | 51 | character: 8, |
52 | }, | ||
53 | end: Position { | ||
54 | line: 0, | ||
55 | character: 19, | ||
56 | }, | ||
55 | }, | 57 | }, |
56 | }, | 58 | }, |
59 | message: "lint level defined here", | ||
57 | }, | 60 | }, |
58 | message: "lint level defined here", | 61 | ], |
59 | }, | ||
60 | ], | ||
61 | ), | ||
62 | tags: None, | ||
63 | }, | ||
64 | fixes: [ | ||
65 | CodeAction { | ||
66 | title: "consider passing by value instead", | ||
67 | kind: Some( | ||
68 | "quickfix", | ||
69 | ), | 62 | ), |
70 | diagnostics: None, | 63 | tags: None, |
71 | edit: Some( | 64 | }, |
72 | WorkspaceEdit { | 65 | fixes: [ |
73 | changes: Some( | 66 | CodeAction { |
74 | { | 67 | title: "consider passing by value instead", |
75 | "file:///test/compiler/mir/tagset.rs": [ | 68 | kind: Some( |
76 | TextEdit { | 69 | "quickfix", |
77 | range: Range { | 70 | ), |
78 | start: Position { | 71 | diagnostics: None, |
79 | line: 41, | 72 | edit: Some( |
80 | character: 23, | 73 | WorkspaceEdit { |
81 | }, | 74 | changes: Some( |
82 | end: Position { | 75 | { |
83 | line: 41, | 76 | "file:///test/compiler/mir/tagset.rs": [ |
84 | character: 28, | 77 | TextEdit { |
78 | range: Range { | ||
79 | start: Position { | ||
80 | line: 41, | ||
81 | character: 23, | ||
82 | }, | ||
83 | end: Position { | ||
84 | line: 41, | ||
85 | character: 28, | ||
86 | }, | ||
85 | }, | 87 | }, |
88 | new_text: "self", | ||
86 | }, | 89 | }, |
87 | new_text: "self", | 90 | ], |
88 | }, | 91 | }, |
89 | ], | 92 | ), |
90 | }, | 93 | document_changes: None, |
91 | ), | 94 | }, |
92 | document_changes: None, | 95 | ), |
93 | }, | 96 | command: None, |
94 | ), | 97 | is_preferred: None, |
95 | command: None, | 98 | }, |
96 | is_preferred: None, | 99 | ], |
97 | }, | 100 | }, |
98 | ], | 101 | ] |
99 | } | ||
diff --git a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_handles_macro_location.snap b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_handles_macro_location.snap index 12eb32df4..61ae0c9ae 100644 --- a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_handles_macro_location.snap +++ b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_handles_macro_location.snap | |||
@@ -2,45 +2,47 @@ | |||
2 | source: crates/ra_cargo_watch/src/conv/test.rs | 2 | source: crates/ra_cargo_watch/src/conv/test.rs |
3 | expression: diag | 3 | expression: diag |
4 | --- | 4 | --- |
5 | MappedRustDiagnostic { | 5 | [ |
6 | location: Location { | 6 | MappedRustDiagnostic { |
7 | uri: "file:///test/src/main.rs", | 7 | location: Location { |
8 | range: Range { | 8 | uri: "file:///test/src/main.rs", |
9 | start: Position { | 9 | range: Range { |
10 | line: 1, | 10 | start: Position { |
11 | character: 4, | 11 | line: 1, |
12 | }, | 12 | character: 4, |
13 | end: Position { | 13 | }, |
14 | line: 1, | 14 | end: Position { |
15 | character: 26, | 15 | line: 1, |
16 | character: 26, | ||
17 | }, | ||
16 | }, | 18 | }, |
17 | }, | 19 | }, |
18 | }, | 20 | diagnostic: Diagnostic { |
19 | diagnostic: Diagnostic { | 21 | range: Range { |
20 | range: Range { | 22 | start: Position { |
21 | start: Position { | 23 | line: 1, |
22 | line: 1, | 24 | character: 4, |
23 | character: 4, | 25 | }, |
26 | end: Position { | ||
27 | line: 1, | ||
28 | character: 26, | ||
29 | }, | ||
24 | }, | 30 | }, |
25 | end: Position { | 31 | severity: Some( |
26 | line: 1, | 32 | Error, |
27 | character: 26, | ||
28 | }, | ||
29 | }, | ||
30 | severity: Some( | ||
31 | Error, | ||
32 | ), | ||
33 | code: Some( | ||
34 | String( | ||
35 | "E0277", | ||
36 | ), | 33 | ), |
37 | ), | 34 | code: Some( |
38 | source: Some( | 35 | String( |
39 | "rustc", | 36 | "E0277", |
40 | ), | 37 | ), |
41 | message: "can\'t compare `{integer}` with `&str`\nthe trait `std::cmp::PartialEq<&str>` is not implemented for `{integer}`", | 38 | ), |
42 | related_information: None, | 39 | source: Some( |
43 | tags: None, | 40 | "rustc", |
41 | ), | ||
42 | message: "can\'t compare `{integer}` with `&str`\nthe trait `std::cmp::PartialEq<&str>` is not implemented for `{integer}`", | ||
43 | related_information: None, | ||
44 | tags: None, | ||
45 | }, | ||
46 | fixes: [], | ||
44 | }, | 47 | }, |
45 | fixes: [], | 48 | ] |
46 | } | ||
diff --git a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_macro_compiler_error.snap b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_macro_compiler_error.snap index 7b83a7cd0..641da1a58 100644 --- a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_macro_compiler_error.snap +++ b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_macro_compiler_error.snap | |||
@@ -2,60 +2,62 @@ | |||
2 | source: crates/ra_cargo_watch/src/conv/test.rs | 2 | source: crates/ra_cargo_watch/src/conv/test.rs |
3 | expression: diag | 3 | expression: diag |
4 | --- | 4 | --- |
5 | MappedRustDiagnostic { | 5 | [ |
6 | location: Location { | 6 | MappedRustDiagnostic { |
7 | uri: "file:///test/crates/ra_hir_def/src/data.rs", | 7 | location: Location { |
8 | range: Range { | 8 | uri: "file:///test/crates/ra_hir_def/src/data.rs", |
9 | start: Position { | 9 | range: Range { |
10 | line: 79, | 10 | start: Position { |
11 | character: 15, | 11 | line: 79, |
12 | }, | 12 | character: 15, |
13 | end: Position { | 13 | }, |
14 | line: 79, | 14 | end: Position { |
15 | character: 41, | 15 | line: 79, |
16 | character: 41, | ||
17 | }, | ||
16 | }, | 18 | }, |
17 | }, | 19 | }, |
18 | }, | 20 | diagnostic: Diagnostic { |
19 | diagnostic: Diagnostic { | 21 | range: Range { |
20 | range: Range { | 22 | start: Position { |
21 | start: Position { | 23 | line: 79, |
22 | line: 79, | 24 | character: 15, |
23 | character: 15, | 25 | }, |
24 | }, | 26 | end: Position { |
25 | end: Position { | 27 | line: 79, |
26 | line: 79, | 28 | character: 41, |
27 | character: 41, | 29 | }, |
28 | }, | 30 | }, |
29 | }, | 31 | severity: Some( |
30 | severity: Some( | 32 | Error, |
31 | Error, | 33 | ), |
32 | ), | 34 | code: None, |
33 | code: None, | 35 | source: Some( |
34 | source: Some( | 36 | "rustc", |
35 | "rustc", | 37 | ), |
36 | ), | 38 | message: "Please register your known path in the path module", |
37 | message: "Please register your known path in the path module", | 39 | related_information: Some( |
38 | related_information: Some( | 40 | [ |
39 | [ | 41 | DiagnosticRelatedInformation { |
40 | DiagnosticRelatedInformation { | 42 | location: Location { |
41 | location: Location { | 43 | uri: "file:///test/crates/ra_hir_def/src/path.rs", |
42 | uri: "file:///test/crates/ra_hir_def/src/path.rs", | 44 | range: Range { |
43 | range: Range { | 45 | start: Position { |
44 | start: Position { | 46 | line: 264, |
45 | line: 264, | 47 | character: 8, |
46 | character: 8, | 48 | }, |
47 | }, | 49 | end: Position { |
48 | end: Position { | 50 | line: 264, |
49 | line: 264, | 51 | character: 76, |
50 | character: 76, | 52 | }, |
51 | }, | 53 | }, |
52 | }, | 54 | }, |
55 | message: "Error originated from macro here", | ||
53 | }, | 56 | }, |
54 | message: "Error originated from macro here", | 57 | ], |
55 | }, | 58 | ), |
56 | ], | 59 | tags: None, |
57 | ), | 60 | }, |
58 | tags: None, | 61 | fixes: [], |
59 | }, | 62 | }, |
60 | fixes: [], | 63 | ] |
61 | } | ||
diff --git a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_multi_line_fix.snap b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_multi_line_fix.snap index 23c4f5a2c..0557a2e79 100644 --- a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_multi_line_fix.snap +++ b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_multi_line_fix.snap | |||
@@ -2,111 +2,113 @@ | |||
2 | source: crates/ra_cargo_watch/src/conv/test.rs | 2 | source: crates/ra_cargo_watch/src/conv/test.rs |
3 | expression: diag | 3 | expression: diag |
4 | --- | 4 | --- |
5 | MappedRustDiagnostic { | 5 | [ |
6 | location: Location { | 6 | MappedRustDiagnostic { |
7 | uri: "file:///test/src/main.rs", | 7 | location: Location { |
8 | range: Range { | 8 | uri: "file:///test/src/main.rs", |
9 | start: Position { | 9 | range: Range { |
10 | line: 3, | 10 | start: Position { |
11 | character: 4, | 11 | line: 3, |
12 | }, | 12 | character: 4, |
13 | end: Position { | 13 | }, |
14 | line: 3, | 14 | end: Position { |
15 | character: 5, | 15 | line: 3, |
16 | character: 5, | ||
17 | }, | ||
16 | }, | 18 | }, |
17 | }, | 19 | }, |
18 | }, | 20 | diagnostic: Diagnostic { |
19 | diagnostic: Diagnostic { | 21 | range: Range { |
20 | range: Range { | 22 | start: Position { |
21 | start: Position { | 23 | line: 3, |
22 | line: 3, | 24 | character: 4, |
23 | character: 4, | 25 | }, |
24 | }, | 26 | end: Position { |
25 | end: Position { | 27 | line: 3, |
26 | line: 3, | 28 | character: 5, |
27 | character: 5, | 29 | }, |
28 | }, | 30 | }, |
29 | }, | 31 | severity: Some( |
30 | severity: Some( | 32 | Warning, |
31 | Warning, | ||
32 | ), | ||
33 | code: Some( | ||
34 | String( | ||
35 | "let_and_return", | ||
36 | ), | 33 | ), |
37 | ), | 34 | code: Some( |
38 | source: Some( | 35 | String( |
39 | "clippy", | 36 | "let_and_return", |
40 | ), | 37 | ), |
41 | message: "returning the result of a let binding from a block\n`#[warn(clippy::let_and_return)]` on by default\nfor further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return", | 38 | ), |
42 | related_information: Some( | 39 | source: Some( |
43 | [ | 40 | "clippy", |
44 | DiagnosticRelatedInformation { | 41 | ), |
45 | location: Location { | 42 | message: "returning the result of a let binding from a block\n`#[warn(clippy::let_and_return)]` on by default\nfor further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return", |
46 | uri: "file:///test/src/main.rs", | 43 | related_information: Some( |
47 | range: Range { | 44 | [ |
48 | start: Position { | 45 | DiagnosticRelatedInformation { |
49 | line: 2, | 46 | location: Location { |
50 | character: 4, | 47 | uri: "file:///test/src/main.rs", |
51 | }, | 48 | range: Range { |
52 | end: Position { | 49 | start: Position { |
53 | line: 2, | 50 | line: 2, |
54 | character: 30, | 51 | character: 4, |
52 | }, | ||
53 | end: Position { | ||
54 | line: 2, | ||
55 | character: 30, | ||
56 | }, | ||
55 | }, | 57 | }, |
56 | }, | 58 | }, |
59 | message: "unnecessary let binding", | ||
57 | }, | 60 | }, |
58 | message: "unnecessary let binding", | 61 | ], |
59 | }, | ||
60 | ], | ||
61 | ), | ||
62 | tags: None, | ||
63 | }, | ||
64 | fixes: [ | ||
65 | CodeAction { | ||
66 | title: "return the expression directly", | ||
67 | kind: Some( | ||
68 | "quickfix", | ||
69 | ), | 62 | ), |
70 | diagnostics: None, | 63 | tags: None, |
71 | edit: Some( | 64 | }, |
72 | WorkspaceEdit { | 65 | fixes: [ |
73 | changes: Some( | 66 | CodeAction { |
74 | { | 67 | title: "return the expression directly", |
75 | "file:///test/src/main.rs": [ | 68 | kind: Some( |
76 | TextEdit { | 69 | "quickfix", |
77 | range: Range { | 70 | ), |
78 | start: Position { | 71 | diagnostics: None, |
79 | line: 2, | 72 | edit: Some( |
80 | character: 4, | 73 | WorkspaceEdit { |
81 | }, | 74 | changes: Some( |
82 | end: Position { | 75 | { |
83 | line: 2, | 76 | "file:///test/src/main.rs": [ |
84 | character: 30, | 77 | TextEdit { |
78 | range: Range { | ||
79 | start: Position { | ||
80 | line: 2, | ||
81 | character: 4, | ||
82 | }, | ||
83 | end: Position { | ||
84 | line: 2, | ||
85 | character: 30, | ||
86 | }, | ||
85 | }, | 87 | }, |
88 | new_text: "", | ||
86 | }, | 89 | }, |
87 | new_text: "", | 90 | TextEdit { |
88 | }, | 91 | range: Range { |
89 | TextEdit { | 92 | start: Position { |
90 | range: Range { | 93 | line: 3, |
91 | start: Position { | 94 | character: 4, |
92 | line: 3, | 95 | }, |
93 | character: 4, | 96 | end: Position { |
94 | }, | 97 | line: 3, |
95 | end: Position { | 98 | character: 5, |
96 | line: 3, | 99 | }, |
97 | character: 5, | ||
98 | }, | 100 | }, |
101 | new_text: "(0..10).collect()", | ||
99 | }, | 102 | }, |
100 | new_text: "(0..10).collect()", | 103 | ], |
101 | }, | 104 | }, |
102 | ], | 105 | ), |
103 | }, | 106 | document_changes: None, |
104 | ), | 107 | }, |
105 | document_changes: None, | 108 | ), |
106 | }, | 109 | command: None, |
107 | ), | 110 | is_preferred: None, |
108 | command: None, | 111 | }, |
109 | is_preferred: None, | 112 | ], |
110 | }, | 113 | }, |
111 | ], | 114 | ] |
112 | } | ||
diff --git a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_incompatible_type_for_trait.snap b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_incompatible_type_for_trait.snap index 54679c5db..754bc33a4 100644 --- a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_incompatible_type_for_trait.snap +++ b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_incompatible_type_for_trait.snap | |||
@@ -2,45 +2,47 @@ | |||
2 | source: crates/ra_cargo_watch/src/conv/test.rs | 2 | source: crates/ra_cargo_watch/src/conv/test.rs |
3 | expression: diag | 3 | expression: diag |
4 | --- | 4 | --- |
5 | MappedRustDiagnostic { | 5 | [ |
6 | location: Location { | 6 | MappedRustDiagnostic { |
7 | uri: "file:///test/compiler/ty/list_iter.rs", | 7 | location: Location { |
8 | range: Range { | 8 | uri: "file:///test/compiler/ty/list_iter.rs", |
9 | start: Position { | 9 | range: Range { |
10 | line: 51, | 10 | start: Position { |
11 | character: 4, | 11 | line: 51, |
12 | }, | 12 | character: 4, |
13 | end: Position { | 13 | }, |
14 | line: 51, | 14 | end: Position { |
15 | character: 47, | 15 | line: 51, |
16 | character: 47, | ||
17 | }, | ||
16 | }, | 18 | }, |
17 | }, | 19 | }, |
18 | }, | 20 | diagnostic: Diagnostic { |
19 | diagnostic: Diagnostic { | 21 | range: Range { |
20 | range: Range { | 22 | start: Position { |
21 | start: Position { | 23 | line: 51, |
22 | line: 51, | 24 | character: 4, |
23 | character: 4, | 25 | }, |
26 | end: Position { | ||
27 | line: 51, | ||
28 | character: 47, | ||
29 | }, | ||
24 | }, | 30 | }, |
25 | end: Position { | 31 | severity: Some( |
26 | line: 51, | 32 | Error, |
27 | character: 47, | ||
28 | }, | ||
29 | }, | ||
30 | severity: Some( | ||
31 | Error, | ||
32 | ), | ||
33 | code: Some( | ||
34 | String( | ||
35 | "E0053", | ||
36 | ), | 33 | ), |
37 | ), | 34 | code: Some( |
38 | source: Some( | 35 | String( |
39 | "rustc", | 36 | "E0053", |
40 | ), | 37 | ), |
41 | message: "method `next` has an incompatible type for trait\nexpected type `fn(&mut ty::list_iter::ListIterator<\'list, M>) -> std::option::Option<&ty::Ref<M>>`\n found type `fn(&ty::list_iter::ListIterator<\'list, M>) -> std::option::Option<&\'list ty::Ref<M>>`", | 38 | ), |
42 | related_information: None, | 39 | source: Some( |
43 | tags: None, | 40 | "rustc", |
41 | ), | ||
42 | message: "method `next` has an incompatible type for trait\nexpected type `fn(&mut ty::list_iter::ListIterator<\'list, M>) -> std::option::Option<&ty::Ref<M>>`\n found type `fn(&ty::list_iter::ListIterator<\'list, M>) -> std::option::Option<&\'list ty::Ref<M>>`", | ||
43 | related_information: None, | ||
44 | tags: None, | ||
45 | }, | ||
46 | fixes: [], | ||
44 | }, | 47 | }, |
45 | fixes: [], | 48 | ] |
46 | } | ||
diff --git a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_mismatched_type.snap b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_mismatched_type.snap index 57df4ceaf..78b7f7cc8 100644 --- a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_mismatched_type.snap +++ b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_mismatched_type.snap | |||
@@ -2,45 +2,47 @@ | |||
2 | source: crates/ra_cargo_watch/src/conv/test.rs | 2 | source: crates/ra_cargo_watch/src/conv/test.rs |
3 | expression: diag | 3 | expression: diag |
4 | --- | 4 | --- |
5 | MappedRustDiagnostic { | 5 | [ |
6 | location: Location { | 6 | MappedRustDiagnostic { |
7 | uri: "file:///test/runtime/compiler_support.rs", | 7 | location: Location { |
8 | range: Range { | 8 | uri: "file:///test/runtime/compiler_support.rs", |
9 | start: Position { | 9 | range: Range { |
10 | line: 47, | 10 | start: Position { |
11 | character: 64, | 11 | line: 47, |
12 | }, | 12 | character: 64, |
13 | end: Position { | 13 | }, |
14 | line: 47, | 14 | end: Position { |
15 | character: 69, | 15 | line: 47, |
16 | character: 69, | ||
17 | }, | ||
16 | }, | 18 | }, |
17 | }, | 19 | }, |
18 | }, | 20 | diagnostic: Diagnostic { |
19 | diagnostic: Diagnostic { | 21 | range: Range { |
20 | range: Range { | 22 | start: Position { |
21 | start: Position { | 23 | line: 47, |
22 | line: 47, | 24 | character: 64, |
23 | character: 64, | 25 | }, |
26 | end: Position { | ||
27 | line: 47, | ||
28 | character: 69, | ||
29 | }, | ||
24 | }, | 30 | }, |
25 | end: Position { | 31 | severity: Some( |
26 | line: 47, | 32 | Error, |
27 | character: 69, | ||
28 | }, | ||
29 | }, | ||
30 | severity: Some( | ||
31 | Error, | ||
32 | ), | ||
33 | code: Some( | ||
34 | String( | ||
35 | "E0308", | ||
36 | ), | 33 | ), |
37 | ), | 34 | code: Some( |
38 | source: Some( | 35 | String( |
39 | "rustc", | 36 | "E0308", |
40 | ), | 37 | ), |
41 | message: "mismatched types\nexpected usize, found u32", | 38 | ), |
42 | related_information: None, | 39 | source: Some( |
43 | tags: None, | 40 | "rustc", |
41 | ), | ||
42 | message: "mismatched types\nexpected usize, found u32", | ||
43 | related_information: None, | ||
44 | tags: None, | ||
45 | }, | ||
46 | fixes: [], | ||
44 | }, | 47 | }, |
45 | fixes: [], | 48 | ] |
46 | } | ||
diff --git a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_unused_variable.snap b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_unused_variable.snap index 8bab09540..5989ed202 100644 --- a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_unused_variable.snap +++ b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_unused_variable.snap | |||
@@ -2,83 +2,85 @@ | |||
2 | source: crates/ra_cargo_watch/src/conv/test.rs | 2 | source: crates/ra_cargo_watch/src/conv/test.rs |
3 | expression: diag | 3 | expression: diag |
4 | --- | 4 | --- |
5 | MappedRustDiagnostic { | 5 | [ |
6 | location: Location { | 6 | MappedRustDiagnostic { |
7 | uri: "file:///test/driver/subcommand/repl.rs", | 7 | location: Location { |
8 | range: Range { | 8 | uri: "file:///test/driver/subcommand/repl.rs", |
9 | start: Position { | 9 | range: Range { |
10 | line: 290, | 10 | start: Position { |
11 | character: 8, | 11 | line: 290, |
12 | }, | 12 | character: 8, |
13 | end: Position { | 13 | }, |
14 | line: 290, | 14 | end: Position { |
15 | character: 11, | 15 | line: 290, |
16 | character: 11, | ||
17 | }, | ||
16 | }, | 18 | }, |
17 | }, | 19 | }, |
18 | }, | 20 | diagnostic: Diagnostic { |
19 | diagnostic: Diagnostic { | 21 | range: Range { |
20 | range: Range { | 22 | start: Position { |
21 | start: Position { | 23 | line: 290, |
22 | line: 290, | 24 | character: 8, |
23 | character: 8, | 25 | }, |
24 | }, | 26 | end: Position { |
25 | end: Position { | 27 | line: 290, |
26 | line: 290, | 28 | character: 11, |
27 | character: 11, | 29 | }, |
28 | }, | 30 | }, |
29 | }, | 31 | severity: Some( |
30 | severity: Some( | 32 | Warning, |
31 | Warning, | ||
32 | ), | ||
33 | code: Some( | ||
34 | String( | ||
35 | "unused_variables", | ||
36 | ), | 33 | ), |
37 | ), | 34 | code: Some( |
38 | source: Some( | 35 | String( |
39 | "rustc", | 36 | "unused_variables", |
40 | ), | 37 | ), |
41 | message: "unused variable: `foo`\n#[warn(unused_variables)] on by default", | ||
42 | related_information: None, | ||
43 | tags: Some( | ||
44 | [ | ||
45 | Unnecessary, | ||
46 | ], | ||
47 | ), | ||
48 | }, | ||
49 | fixes: [ | ||
50 | CodeAction { | ||
51 | title: "consider prefixing with an underscore", | ||
52 | kind: Some( | ||
53 | "quickfix", | ||
54 | ), | 38 | ), |
55 | diagnostics: None, | 39 | source: Some( |
56 | edit: Some( | 40 | "rustc", |
57 | WorkspaceEdit { | 41 | ), |
58 | changes: Some( | 42 | message: "unused variable: `foo`\n#[warn(unused_variables)] on by default", |
59 | { | 43 | related_information: None, |
60 | "file:///test/driver/subcommand/repl.rs": [ | 44 | tags: Some( |
61 | TextEdit { | 45 | [ |
62 | range: Range { | 46 | Unnecessary, |
63 | start: Position { | 47 | ], |
64 | line: 290, | ||
65 | character: 8, | ||
66 | }, | ||
67 | end: Position { | ||
68 | line: 290, | ||
69 | character: 11, | ||
70 | }, | ||
71 | }, | ||
72 | new_text: "_foo", | ||
73 | }, | ||
74 | ], | ||
75 | }, | ||
76 | ), | ||
77 | document_changes: None, | ||
78 | }, | ||
79 | ), | 48 | ), |
80 | command: None, | ||
81 | is_preferred: None, | ||
82 | }, | 49 | }, |
83 | ], | 50 | fixes: [ |
84 | } | 51 | CodeAction { |
52 | title: "consider prefixing with an underscore", | ||
53 | kind: Some( | ||
54 | "quickfix", | ||
55 | ), | ||
56 | diagnostics: None, | ||
57 | edit: Some( | ||
58 | WorkspaceEdit { | ||
59 | changes: Some( | ||
60 | { | ||
61 | "file:///test/driver/subcommand/repl.rs": [ | ||
62 | TextEdit { | ||
63 | range: Range { | ||
64 | start: Position { | ||
65 | line: 290, | ||
66 | character: 8, | ||
67 | }, | ||
68 | end: Position { | ||
69 | line: 290, | ||
70 | character: 11, | ||
71 | }, | ||
72 | }, | ||
73 | new_text: "_foo", | ||
74 | }, | ||
75 | ], | ||
76 | }, | ||
77 | ), | ||
78 | document_changes: None, | ||
79 | }, | ||
80 | ), | ||
81 | command: None, | ||
82 | is_preferred: None, | ||
83 | }, | ||
84 | ], | ||
85 | }, | ||
86 | ] | ||
diff --git a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_wrong_number_of_parameters.snap b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_wrong_number_of_parameters.snap index 69301078d..e34b546dc 100644 --- a/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_wrong_number_of_parameters.snap +++ b/crates/ra_cargo_watch/src/conv/snapshots/ra_cargo_watch__conv__test__snap_rustc_wrong_number_of_parameters.snap | |||
@@ -2,64 +2,66 @@ | |||
2 | source: crates/ra_cargo_watch/src/conv/test.rs | 2 | source: crates/ra_cargo_watch/src/conv/test.rs |
3 | expression: diag | 3 | expression: diag |
4 | --- | 4 | --- |
5 | MappedRustDiagnostic { | 5 | [ |
6 | location: Location { | 6 | MappedRustDiagnostic { |
7 | uri: "file:///test/compiler/ty/select.rs", | 7 | location: Location { |
8 | range: Range { | 8 | uri: "file:///test/compiler/ty/select.rs", |
9 | start: Position { | 9 | range: Range { |
10 | line: 103, | 10 | start: Position { |
11 | character: 17, | 11 | line: 103, |
12 | }, | 12 | character: 17, |
13 | end: Position { | 13 | }, |
14 | line: 103, | 14 | end: Position { |
15 | character: 29, | 15 | line: 103, |
16 | character: 29, | ||
17 | }, | ||
16 | }, | 18 | }, |
17 | }, | 19 | }, |
18 | }, | 20 | diagnostic: Diagnostic { |
19 | diagnostic: Diagnostic { | 21 | range: Range { |
20 | range: Range { | 22 | start: Position { |
21 | start: Position { | 23 | line: 103, |
22 | line: 103, | 24 | character: 17, |
23 | character: 17, | 25 | }, |
24 | }, | 26 | end: Position { |
25 | end: Position { | 27 | line: 103, |
26 | line: 103, | 28 | character: 29, |
27 | character: 29, | 29 | }, |
28 | }, | 30 | }, |
29 | }, | 31 | severity: Some( |
30 | severity: Some( | 32 | Error, |
31 | Error, | ||
32 | ), | ||
33 | code: Some( | ||
34 | String( | ||
35 | "E0061", | ||
36 | ), | 33 | ), |
37 | ), | 34 | code: Some( |
38 | source: Some( | 35 | String( |
39 | "rustc", | 36 | "E0061", |
40 | ), | 37 | ), |
41 | message: "this function takes 2 parameters but 3 parameters were supplied\nexpected 2 parameters", | 38 | ), |
42 | related_information: Some( | 39 | source: Some( |
43 | [ | 40 | "rustc", |
44 | DiagnosticRelatedInformation { | 41 | ), |
45 | location: Location { | 42 | message: "this function takes 2 parameters but 3 parameters were supplied\nexpected 2 parameters", |
46 | uri: "file:///test/compiler/ty/select.rs", | 43 | related_information: Some( |
47 | range: Range { | 44 | [ |
48 | start: Position { | 45 | DiagnosticRelatedInformation { |
49 | line: 218, | 46 | location: Location { |
50 | character: 4, | 47 | uri: "file:///test/compiler/ty/select.rs", |
51 | }, | 48 | range: Range { |
52 | end: Position { | 49 | start: Position { |
53 | line: 230, | 50 | line: 218, |
54 | character: 5, | 51 | character: 4, |
52 | }, | ||
53 | end: Position { | ||
54 | line: 230, | ||
55 | character: 5, | ||
56 | }, | ||
55 | }, | 57 | }, |
56 | }, | 58 | }, |
59 | message: "defined here", | ||
57 | }, | 60 | }, |
58 | message: "defined here", | 61 | ], |
59 | }, | 62 | ), |
60 | ], | 63 | tags: None, |
61 | ), | 64 | }, |
62 | tags: None, | 65 | fixes: [], |
63 | }, | 66 | }, |
64 | fixes: [], | 67 | ] |
65 | } | ||
diff --git a/crates/ra_cargo_watch/src/conv/test.rs b/crates/ra_cargo_watch/src/conv/test.rs index c880dcdc3..4e81455ca 100644 --- a/crates/ra_cargo_watch/src/conv/test.rs +++ b/crates/ra_cargo_watch/src/conv/test.rs | |||
@@ -58,7 +58,7 @@ fn snap_rustc_incompatible_type_for_trait() { | |||
58 | ); | 58 | ); |
59 | 59 | ||
60 | let workspace_root = PathBuf::from("/test/"); | 60 | let workspace_root = PathBuf::from("/test/"); |
61 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root).expect("couldn't map diagnostic"); | 61 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root); |
62 | insta::assert_debug_snapshot!(diag); | 62 | insta::assert_debug_snapshot!(diag); |
63 | } | 63 | } |
64 | 64 | ||
@@ -141,7 +141,7 @@ fn snap_rustc_unused_variable() { | |||
141 | ); | 141 | ); |
142 | 142 | ||
143 | let workspace_root = PathBuf::from("/test/"); | 143 | let workspace_root = PathBuf::from("/test/"); |
144 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root).expect("couldn't map diagnostic"); | 144 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root); |
145 | insta::assert_debug_snapshot!(diag); | 145 | insta::assert_debug_snapshot!(diag); |
146 | } | 146 | } |
147 | 147 | ||
@@ -266,7 +266,7 @@ fn snap_rustc_wrong_number_of_parameters() { | |||
266 | ); | 266 | ); |
267 | 267 | ||
268 | let workspace_root = PathBuf::from("/test/"); | 268 | let workspace_root = PathBuf::from("/test/"); |
269 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root).expect("couldn't map diagnostic"); | 269 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root); |
270 | insta::assert_debug_snapshot!(diag); | 270 | insta::assert_debug_snapshot!(diag); |
271 | } | 271 | } |
272 | 272 | ||
@@ -387,7 +387,7 @@ fn snap_clippy_pass_by_ref() { | |||
387 | ); | 387 | ); |
388 | 388 | ||
389 | let workspace_root = PathBuf::from("/test/"); | 389 | let workspace_root = PathBuf::from("/test/"); |
390 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root).expect("couldn't map diagnostic"); | 390 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root); |
391 | insta::assert_debug_snapshot!(diag); | 391 | insta::assert_debug_snapshot!(diag); |
392 | } | 392 | } |
393 | 393 | ||
@@ -431,7 +431,7 @@ fn snap_rustc_mismatched_type() { | |||
431 | ); | 431 | ); |
432 | 432 | ||
433 | let workspace_root = PathBuf::from("/test/"); | 433 | let workspace_root = PathBuf::from("/test/"); |
434 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root).expect("couldn't map diagnostic"); | 434 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root); |
435 | insta::assert_debug_snapshot!(diag); | 435 | insta::assert_debug_snapshot!(diag); |
436 | } | 436 | } |
437 | 437 | ||
@@ -703,7 +703,7 @@ fn snap_handles_macro_location() { | |||
703 | ); | 703 | ); |
704 | 704 | ||
705 | let workspace_root = PathBuf::from("/test/"); | 705 | let workspace_root = PathBuf::from("/test/"); |
706 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root).expect("couldn't map diagnostic"); | 706 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root); |
707 | insta::assert_debug_snapshot!(diag); | 707 | insta::assert_debug_snapshot!(diag); |
708 | } | 708 | } |
709 | 709 | ||
@@ -933,7 +933,7 @@ fn snap_macro_compiler_error() { | |||
933 | ); | 933 | ); |
934 | 934 | ||
935 | let workspace_root = PathBuf::from("/test/"); | 935 | let workspace_root = PathBuf::from("/test/"); |
936 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root).expect("couldn't map diagnostic"); | 936 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root); |
937 | insta::assert_debug_snapshot!(diag); | 937 | insta::assert_debug_snapshot!(diag); |
938 | } | 938 | } |
939 | 939 | ||
@@ -1067,6 +1067,6 @@ fn snap_multi_line_fix() { | |||
1067 | ); | 1067 | ); |
1068 | 1068 | ||
1069 | let workspace_root = PathBuf::from("/test/"); | 1069 | let workspace_root = PathBuf::from("/test/"); |
1070 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root).expect("couldn't map diagnostic"); | 1070 | let diag = map_rust_diagnostic_to_lsp(&diag, &workspace_root); |
1071 | insta::assert_debug_snapshot!(diag); | 1071 | insta::assert_debug_snapshot!(diag); |
1072 | } | 1072 | } |
diff --git a/crates/ra_cargo_watch/src/lib.rs b/crates/ra_cargo_watch/src/lib.rs index f07c34549..94b9c03d0 100644 --- a/crates/ra_cargo_watch/src/lib.rs +++ b/crates/ra_cargo_watch/src/lib.rs | |||
@@ -197,23 +197,23 @@ impl CheckWatcherThread { | |||
197 | } | 197 | } |
198 | 198 | ||
199 | CheckEvent::Msg(Message::CompilerMessage(msg)) => { | 199 | CheckEvent::Msg(Message::CompilerMessage(msg)) => { |
200 | let map_result = | 200 | let map_result = map_rust_diagnostic_to_lsp(&msg.message, &self.workspace_root); |
201 | match map_rust_diagnostic_to_lsp(&msg.message, &self.workspace_root) { | 201 | if map_result.is_empty() { |
202 | Some(map_result) => map_result, | 202 | return; |
203 | None => return, | 203 | } |
204 | }; | ||
205 | |||
206 | let MappedRustDiagnostic { location, diagnostic, fixes } = map_result; | ||
207 | let fixes = fixes | ||
208 | .into_iter() | ||
209 | .map(|fix| { | ||
210 | CodeAction { diagnostics: Some(vec![diagnostic.clone()]), ..fix }.into() | ||
211 | }) | ||
212 | .collect(); | ||
213 | 204 | ||
214 | task_send | 205 | for MappedRustDiagnostic { location, diagnostic, fixes } in map_result { |
215 | .send(CheckTask::AddDiagnostic { url: location.uri, diagnostic, fixes }) | 206 | let fixes = fixes |
216 | .unwrap(); | 207 | .into_iter() |
208 | .map(|fix| { | ||
209 | CodeAction { diagnostics: Some(vec![diagnostic.clone()]), ..fix }.into() | ||
210 | }) | ||
211 | .collect(); | ||
212 | |||
213 | task_send | ||
214 | .send(CheckTask::AddDiagnostic { url: location.uri, diagnostic, fixes }) | ||
215 | .unwrap(); | ||
216 | } | ||
217 | } | 217 | } |
218 | 218 | ||
219 | CheckEvent::Msg(Message::BuildScriptExecuted(_msg)) => {} | 219 | CheckEvent::Msg(Message::BuildScriptExecuted(_msg)) => {} |