1
0
mirror of https://github.com/golang/go synced 2024-11-18 08:54:45 -07:00

cmd/gopls/integration/vscode: log diagnostics as they are received

This change will allow us to investigate golang/go#30786 more easily.
Diagnostics are getting stuck even though they appear to be being sent
in the correct order, so it will be helpeful to see what's happening on
the VSCode side.

Change-Id: I623fcd9979c05decb0a6f60da2f75af7d0ff3853
Reviewed-on: https://go-review.googlesource.com/c/tools/+/170895
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
This commit is contained in:
Rebecca Stambler 2019-04-05 17:30:30 -04:00
parent ccd3732616
commit 719e078ade

View File

@ -10,6 +10,11 @@ import vscode = require('vscode');
import path = require('path');
export function activate(ctx: vscode.ExtensionContext): void {
// The handleDiagnostics middleware writes to the diagnostics log, in order
// to confirm the order in which the extension received diagnostics.
let r = Math.floor(Math.random() * 100000000);
let diagnosticsLog = fs.openSync('/tmp/diagnostics' + r + '.log', 'w');
let document = vscode.window.activeTextEditor.document;
let config = vscode.workspace.getConfiguration('gopls', document.uri);
let goplsCommand: string = config['command'];
@ -24,6 +29,20 @@ export function activate(ctx: vscode.ExtensionContext): void {
(uri.scheme ? uri : uri.with({scheme: 'file'})).toString(),
protocol2Code: (uri: string) => vscode.Uri.parse(uri),
},
middleware: {
handleDiagnostics: (uri: vscode.Uri, diagnostics: vscode.Diagnostic[], next: lsp.HandleDiagnosticsSignature) => {
let diagString = "-------------------------------------------\n";
diagString += uri.toString(); + ": " + diagnostics.length + "\n";
if (diagnostics.length > 0) {
diagString += "\n";
for (const diag of diagnostics) {
diagString += diag.message + "\n";
}
}
fs.writeSync(diagnosticsLog, diagString);
return next(uri, diagnostics);
}
},
revealOutputChannelOn: lsp.RevealOutputChannelOn.Never,
};
const c = new lsp.LanguageClient('gopls', serverOptions, clientOptions);