aboutsummaryrefslogtreecommitdiff
path: root/editors/code
diff options
context:
space:
mode:
authorveetaha <[email protected]>2020-05-10 16:35:33 +0100
committerVeetaha <[email protected]>2020-06-18 12:50:56 +0100
commit76c1160ffa626fc5f07b309420e6666eb79a3311 (patch)
treefaa1e1bab885988042fb735f89c7bc5c59127a12 /editors/code
parent2f8126fcace3c5e7db01c755b91eb45a9c632cfd (diff)
Migrate flycheck to fully-lsp-compatible progress reports (introduce ra_progress crate)
Diffstat (limited to 'editors/code')
-rw-r--r--editors/code/src/main.ts3
-rw-r--r--editors/code/src/status_display.ts100
2 files changed, 0 insertions, 103 deletions
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index a92c676fa..16a94fceb 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -5,7 +5,6 @@ import { promises as fs, PathLike } from "fs";
5 5
6import * as commands from './commands'; 6import * as commands from './commands';
7import { activateInlayHints } from './inlay_hints'; 7import { activateInlayHints } from './inlay_hints';
8import { activateStatusDisplay } from './status_display';
9import { Ctx } from './ctx'; 8import { Ctx } from './ctx';
10import { Config, NIGHTLY_TAG } from './config'; 9import { Config, NIGHTLY_TAG } from './config';
11import { log, assert, isValidExecutable } from './util'; 10import { log, assert, isValidExecutable } from './util';
@@ -103,8 +102,6 @@ export async function activate(context: vscode.ExtensionContext) {
103 102
104 ctx.pushCleanup(activateTaskProvider(workspaceFolder)); 103 ctx.pushCleanup(activateTaskProvider(workspaceFolder));
105 104
106 activateStatusDisplay(ctx);
107
108 activateInlayHints(ctx); 105 activateInlayHints(ctx);
109 106
110 vscode.workspace.onDidChangeConfiguration( 107 vscode.workspace.onDidChangeConfiguration(
diff --git a/editors/code/src/status_display.ts b/editors/code/src/status_display.ts
deleted file mode 100644
index f9cadc8a2..000000000
--- a/editors/code/src/status_display.ts
+++ /dev/null
@@ -1,100 +0,0 @@
1import * as vscode from 'vscode';
2
3import { WorkDoneProgress, WorkDoneProgressBegin, WorkDoneProgressReport, WorkDoneProgressEnd, Disposable } from 'vscode-languageclient';
4
5import { Ctx } from './ctx';
6
7const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
8
9export function activateStatusDisplay(ctx: Ctx) {
10 const statusDisplay = new StatusDisplay(ctx.config.checkOnSave.command);
11 ctx.pushCleanup(statusDisplay);
12 const client = ctx.client;
13 if (client != null) {
14 ctx.pushCleanup(client.onProgress(
15 WorkDoneProgress.type,
16 'rustAnalyzer/cargoWatcher',
17 params => statusDisplay.handleProgressNotification(params)
18 ));
19 }
20}
21
22class StatusDisplay implements Disposable {
23 packageName?: string;
24
25 private i: number = 0;
26 private statusBarItem: vscode.StatusBarItem;
27 private command: string;
28 private timer?: NodeJS.Timeout;
29
30 constructor(command: string) {
31 this.statusBarItem = vscode.window.createStatusBarItem(
32 vscode.StatusBarAlignment.Left,
33 10,
34 );
35 this.command = command;
36 this.statusBarItem.hide();
37 }
38
39 show() {
40 this.packageName = undefined;
41
42 this.timer =
43 this.timer ||
44 setInterval(() => {
45 this.tick();
46 this.refreshLabel();
47 }, 300);
48
49 this.statusBarItem.show();
50 }
51
52 hide() {
53 if (this.timer) {
54 clearInterval(this.timer);
55 this.timer = undefined;
56 }
57
58 this.statusBarItem.hide();
59 }
60
61 dispose() {
62 if (this.timer) {
63 clearInterval(this.timer);
64 this.timer = undefined;
65 }
66
67 this.statusBarItem.dispose();
68 }
69
70 refreshLabel() {
71 if (this.packageName) {
72 this.statusBarItem.text = `${spinnerFrames[this.i]} cargo ${this.command} [${this.packageName}]`;
73 } else {
74 this.statusBarItem.text = `${spinnerFrames[this.i]} cargo ${this.command}`;
75 }
76 }
77
78 handleProgressNotification(params: WorkDoneProgressBegin | WorkDoneProgressReport | WorkDoneProgressEnd) {
79 switch (params.kind) {
80 case 'begin':
81 this.show();
82 break;
83
84 case 'report':
85 if (params.message) {
86 this.packageName = params.message;
87 this.refreshLabel();
88 }
89 break;
90
91 case 'end':
92 this.hide();
93 break;
94 }
95 }
96
97 private tick() {
98 this.i = (this.i + 1) % spinnerFrames.length;
99 }
100}