diff options
author | Ryan Cumming <[email protected]> | 2019-06-30 01:49:07 +0100 |
---|---|---|
committer | Ryan Cumming <[email protected]> | 2019-06-30 02:12:56 +0100 |
commit | 8f726b7db65d3d9527cdb2fb682c195ad1446dbf (patch) | |
tree | 82e44d62f3742c625b47a1cfb30e22573604c9fd /editors/code/src/test/utils/diagnotics | |
parent | 27df89f47d5f0a6e8e62d517d98dda854efabc34 (diff) |
Include primary span label in VS Code diagnostics
In most cases the primary label span repeats information found elsewhere
in the diagnostic. For example, with E0061:
```
{
"message": "this function takes 2 parameters but 3 parameters were supplied",
"spans": [{"label": "expected 2 parameters"}]
}
```
However, with some mismatched type errors (E0308) the expected type only
appears in the primary span's label, e.g.:
```
{
"message": "mismatched types",
"spans": [{"label": "expected usize, found u32"}]
}
```
I initially added the primary span label to the message unconditionally.
However, for most error types the child diagnostics repeat the primary
span label with more detail. `rustc` also renders the duplicate text but
because the span label and child diagnostics appear in visually distinct
places it's not as confusing.
This takes a heuristic approach where it will only add the primary span
label if there are no child message lines.
Diffstat (limited to 'editors/code/src/test/utils/diagnotics')
-rw-r--r-- | editors/code/src/test/utils/diagnotics/rust.test.ts | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/editors/code/src/test/utils/diagnotics/rust.test.ts b/editors/code/src/test/utils/diagnotics/rust.test.ts index b555a4819..7fb003fe2 100644 --- a/editors/code/src/test/utils/diagnotics/rust.test.ts +++ b/editors/code/src/test/utils/diagnotics/rust.test.ts | |||
@@ -108,7 +108,10 @@ describe('mapRustDiagnosticToVsCode', () => { | |||
108 | ); | 108 | ); |
109 | assert.strictEqual( | 109 | assert.strictEqual( |
110 | diagnostic.message, | 110 | diagnostic.message, |
111 | 'this function takes 2 parameters but 3 parameters were supplied' | 111 | [ |
112 | 'this function takes 2 parameters but 3 parameters were supplied', | ||
113 | 'expected 2 parameters' | ||
114 | ].join('\n') | ||
112 | ); | 115 | ); |
113 | assert.strictEqual(diagnostic.code, 'E0061'); | 116 | assert.strictEqual(diagnostic.code, 'E0061'); |
114 | assert.strictEqual(diagnostic.source, 'rustc'); | 117 | assert.strictEqual(diagnostic.source, 'rustc'); |
@@ -170,4 +173,28 @@ describe('mapRustDiagnosticToVsCode', () => { | |||
170 | SuggestionApplicability.Unspecified | 173 | SuggestionApplicability.Unspecified |
171 | ); | 174 | ); |
172 | }); | 175 | }); |
176 | |||
177 | it('should map a mismatched type error', () => { | ||
178 | const { diagnostic, suggestedFixes } = mapFixtureToVsCode( | ||
179 | 'error/E0308' | ||
180 | ); | ||
181 | |||
182 | assert.strictEqual( | ||
183 | diagnostic.severity, | ||
184 | vscode.DiagnosticSeverity.Error | ||
185 | ); | ||
186 | assert.strictEqual( | ||
187 | diagnostic.message, | ||
188 | ['mismatched types', 'expected usize, found u32'].join('\n') | ||
189 | ); | ||
190 | assert.strictEqual(diagnostic.code, 'E0308'); | ||
191 | assert.strictEqual(diagnostic.source, 'rustc'); | ||
192 | assert.strictEqual(diagnostic.tags, undefined); | ||
193 | |||
194 | // No related information | ||
195 | assert.deepStrictEqual(diagnostic.relatedInformation, []); | ||
196 | |||
197 | // There are no suggested fixes | ||
198 | assert.strictEqual(suggestedFixes.length, 0); | ||
199 | }); | ||
173 | }); | 200 | }); |