From 6cc55e4c5ce994be284fc4337eed21844c0eef24 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 30 Dec 2019 20:16:07 +0100 Subject: status is not a command --- editors/code/src/commands/watch_status.ts | 105 ------------------------------ editors/code/src/main.ts | 12 ++-- editors/code/src/status_display.ts | 105 ++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 111 deletions(-) delete mode 100644 editors/code/src/commands/watch_status.ts create mode 100644 editors/code/src/status_display.ts (limited to 'editors') diff --git a/editors/code/src/commands/watch_status.ts b/editors/code/src/commands/watch_status.ts deleted file mode 100644 index 10787b510..000000000 --- a/editors/code/src/commands/watch_status.ts +++ /dev/null @@ -1,105 +0,0 @@ -import * as vscode from 'vscode'; - -const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']; - -export class StatusDisplay implements vscode.Disposable { - public packageName?: string; - - private i = 0; - private statusBarItem: vscode.StatusBarItem; - private command: string; - private timer?: NodeJS.Timeout; - - constructor(command: string) { - this.statusBarItem = vscode.window.createStatusBarItem( - vscode.StatusBarAlignment.Left, - 10, - ); - this.command = command; - this.statusBarItem.hide(); - } - - public show() { - this.packageName = undefined; - - this.timer = - this.timer || - setInterval(() => { - if (this.packageName) { - this.statusBarItem!.text = `cargo ${this.command} [${ - this.packageName - }] ${this.frame()}`; - } else { - this.statusBarItem!.text = `cargo ${ - this.command - } ${this.frame()}`; - } - }, 300); - - this.statusBarItem.show(); - } - - public hide() { - if (this.timer) { - clearInterval(this.timer); - this.timer = undefined; - } - - this.statusBarItem.hide(); - } - - public dispose() { - if (this.timer) { - clearInterval(this.timer); - this.timer = undefined; - } - - this.statusBarItem.dispose(); - } - - public handleProgressNotification(params: ProgressParams) { - const { token, value } = params; - if (token !== 'rustAnalyzer/cargoWatcher') { - return; - } - - 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; -} diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index cf0ddfa16..d6c210579 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts @@ -3,7 +3,7 @@ import * as lc from 'vscode-languageclient'; import * as commands from './commands'; import { HintsUpdater } from './inlay_hints'; -import { StatusDisplay } from './commands/watch_status'; +import { StatusDisplay } from './status_display'; import * as events from './events'; import * as notifications from './notifications'; import { Server } from './server'; @@ -28,10 +28,6 @@ export async function activate(context: vscode.ExtensionContext) { ctx.registerCommand('runSingle', commands.runSingle); ctx.registerCommand('showReferences', commands.showReferences); - function disposeOnDeactivation(disposable: vscode.Disposable) { - context.subscriptions.push(disposable); - } - if (Server.config.enableEnhancedTyping) { ctx.overrideCommand('type', commands.onEnter); } @@ -39,7 +35,11 @@ export async function activate(context: vscode.ExtensionContext) { const watchStatus = new StatusDisplay( Server.config.cargoWatchOptions.command, ); - disposeOnDeactivation(watchStatus); + ctx.pushCleanup(watchStatus); + + function disposeOnDeactivation(disposable: vscode.Disposable) { + context.subscriptions.push(disposable); + } // Notifications are events triggered by the language server const allNotifications: [string, lc.GenericNotificationHandler][] = [ diff --git a/editors/code/src/status_display.ts b/editors/code/src/status_display.ts new file mode 100644 index 000000000..48cf0655b --- /dev/null +++ b/editors/code/src/status_display.ts @@ -0,0 +1,105 @@ +import * as vscode from 'vscode'; + +const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']; + +export class StatusDisplay implements vscode.Disposable { + packageName?: string; + + private i = 0; + private statusBarItem: vscode.StatusBarItem; + private command: string; + private timer?: NodeJS.Timeout; + + constructor(command: string) { + this.statusBarItem = vscode.window.createStatusBarItem( + vscode.StatusBarAlignment.Left, + 10, + ); + this.command = command; + this.statusBarItem.hide(); + } + + show() { + this.packageName = undefined; + + this.timer = + this.timer || + setInterval(() => { + if (this.packageName) { + this.statusBarItem!.text = `cargo ${this.command} [${ + this.packageName + }] ${this.frame()}`; + } else { + this.statusBarItem!.text = `cargo ${ + this.command + } ${this.frame()}`; + } + }, 300); + + this.statusBarItem.show(); + } + + hide() { + if (this.timer) { + clearInterval(this.timer); + this.timer = undefined; + } + + this.statusBarItem.hide(); + } + + dispose() { + if (this.timer) { + clearInterval(this.timer); + this.timer = undefined; + } + + this.statusBarItem.dispose(); + } + + handleProgressNotification(params: ProgressParams) { + const { token, value } = params; + if (token !== 'rustAnalyzer/cargoWatcher') { + return; + } + + 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; +} -- cgit v1.2.3