diff options
| author | bors <bors@rust-lang.org> | 2023-01-03 09:40:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-01-03 09:40:20 +0000 |
| commit | 50801b7d6a5c18d24ae47e5a8963431899da20cd (patch) | |
| tree | fd27f1f3f95d85eeaef45d004f644791cc39e9dd /editors/code/src | |
| parent | e75e2f83689d1591749b032b79c682c6d15c2424 (diff) | |
| parent | ddc0147d536b26a980c0446f86cda0e40378ea32 (diff) | |
| download | rust-50801b7d6a5c18d24ae47e5a8963431899da20cd.tar.gz rust-50801b7d6a5c18d24ae47e5a8963431899da20cd.zip | |
Auto merge of #13853 - veber-alex:diag_fix, r=Veykril
Use diagnostic code as link to full message fixes #13823 by adding a vscode setting that will keeping the existing diagnostic code and use it as a link to the full compiler error message. While I was there I also fixed `index` to fallback to `rendered.length` to make the previewRustcOutput feature work.
Diffstat (limited to 'editors/code/src')
| -rw-r--r-- | editors/code/src/client.ts | 14 | ||||
| -rw-r--r-- | editors/code/src/config.ts | 4 |
2 files changed, 16 insertions, 2 deletions
diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts index 23e039722ee..1470c1f581d 100644 --- a/editors/code/src/client.ts +++ b/editors/code/src/client.ts @@ -106,6 +106,7 @@ export async function createClient( next: lc.HandleDiagnosticsSignature ) { const preview = config.previewRustcOutput; + const errorCode = config.useRustcErrorCode; diagnostics.forEach((diag, idx) => { // Abuse the fact that VSCode leaks the LSP diagnostics data field through the // Diagnostic class, if they ever break this we are out of luck and have to go @@ -119,11 +120,20 @@ export async function createClient( ?.rendered; if (rendered) { if (preview) { - const index = rendered.match(/^(note|help):/m)?.index || 0; + const index = + rendered.match(/^(note|help):/m)?.index || rendered.length; diag.message = rendered .substring(0, index) .replace(/^ -->[^\n]+\n/m, ""); } + let value; + if (errorCode) { + if (typeof diag.code === "string" || typeof diag.code === "number") { + value = diag.code; + } else { + value = diag.code?.value; + } + } diag.code = { target: vscode.Uri.from({ scheme: "rust-analyzer-diagnostics-view", @@ -131,7 +141,7 @@ export async function createClient( fragment: uri.toString(), query: idx.toString(), }), - value: "Click for full compiler diagnostic", + value: value ?? "Click for full compiler diagnostic", }; } }); diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index d8dbd1df16d..eb4f965291f 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts @@ -241,6 +241,10 @@ export class Config { get previewRustcOutput() { return this.get<boolean>("diagnostics.previewRustcOutput"); } + + get useRustcErrorCode() { + return this.get<boolean>("diagnostics.useRustcErrorCode"); + } } const VarRegex = new RegExp(/\$\{(.+?)\}/g); |
