Re-implement status display using LSP 3.15 progress event

This commit is contained in:
Emil Lauridsen 2019-12-25 19:08:44 +01:00
parent 500fe46e6c
commit 178c23f505
4 changed files with 103 additions and 9 deletions

View file

@ -57,7 +57,50 @@ export class StatusDisplay implements vscode.Disposable {
this.statusBarItem.dispose();
}
public handleProgressNotification(params: ProgressParams) {
const { token, value } = params;
if (token !== "rustAnalyzer/cargoWatcher") {
return;
}
console.log("Got progress notification", token, value)
switch (value.kind) {
case "begin":
this.show();
break;
case "report":
if (value.message) {
this.packageName = value.message;
}
break;
case "end":
this.hide();
break;
}
}
private frame() {
return spinnerFrames[(this.i = ++this.i % spinnerFrames.length)];
}
}
// FIXME: Replace this once vscode-languageclient is updated to LSP 3.15
interface ProgressParams {
token: string
value: WorkDoneProgress
}
enum WorkDoneProgressKind {
Begin = "begin",
Report = "report",
End = "end"
}
interface WorkDoneProgress {
kind: WorkDoneProgressKind,
message?: string
cancelable?: boolean
percentage?: string
}

View file

@ -8,6 +8,7 @@ import { SyntaxTreeContentProvider } from './commands/syntaxTree';
import * as events from './events';
import * as notifications from './notifications';
import { Server } from './server';
import { StatusDisplay } from './commands/watch_status';
export async function activate(context: vscode.ExtensionContext) {
function disposeOnDeactivation(disposable: vscode.Disposable) {
@ -83,6 +84,9 @@ export async function activate(context: vscode.ExtensionContext) {
overrideCommand('type', commands.onEnter.handle);
}
const watchStatus = new StatusDisplay(Server.config.cargoCheckOptions.command || 'check');
disposeOnDeactivation(watchStatus);
// Notifications are events triggered by the language server
const allNotifications: Iterable<[
string,
@ -92,6 +96,10 @@ export async function activate(context: vscode.ExtensionContext) {
'rust-analyzer/publishDecorations',
notifications.publishDecorations.handle,
],
[
'$/progress',
(params) => watchStatus.handleProgressNotification(params),
]
];
const syntaxTreeContentProvider = new SyntaxTreeContentProvider();
const expandMacroContentProvider = new ExpandMacroContentProvider();