From ddc0147d536b26a980c0446f86cda0e40378ea32 Mon Sep 17 00:00:00 2001 From: Alex Veber Date: Tue, 27 Dec 2022 08:13:38 +0200 Subject: [PATCH] Fix diagnostic code --- editors/code/package.json | 5 +++++ editors/code/src/client.ts | 14 ++++++++++++-- editors/code/src/config.ts | 4 ++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/editors/code/package.json b/editors/code/package.json index fad67ce8031..91532b3e96a 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -411,6 +411,11 @@ "default": false, "type": "boolean" }, + "rust-analyzer.diagnostics.useRustcErrorCode": { + "markdownDescription": "Whether to use the rustc error code.", + "default": false, + "type": "boolean" + }, "$generated-start": {}, "rust-analyzer.assist.emitMustUse": { "markdownDescription": "Whether to insert #[must_use] when generating `as_` methods\nfor enum variants.", 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("diagnostics.previewRustcOutput"); } + + get useRustcErrorCode() { + return this.get("diagnostics.useRustcErrorCode"); + } } const VarRegex = new RegExp(/\$\{(.+?)\}/g);