+++ /dev/null
-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;
-}
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';
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);
}
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][] = [
--- /dev/null
+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;
+}