diff options
author | Aleksey Kladov <[email protected]> | 2021-04-06 12:16:35 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2021-04-06 13:45:31 +0100 |
commit | 8fe20b19d4702fc6d6933c31abddc8539d2581f0 (patch) | |
tree | 8aca2a3aa2b059bb47cc235b1b557d4b4de93a24 /editors | |
parent | 9143e3925cd95d30af72745f25e185f65a686d32 (diff) |
More robust status notifications
Diffstat (limited to 'editors')
-rw-r--r-- | editors/code/src/client.ts | 2 | ||||
-rw-r--r-- | editors/code/src/ctx.ts | 47 | ||||
-rw-r--r-- | editors/code/src/lsp_ext.ts | 9 |
3 files changed, 24 insertions, 34 deletions
diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts index 0771ca3b6..116f41df6 100644 --- a/editors/code/src/client.ts +++ b/editors/code/src/client.ts | |||
@@ -159,7 +159,7 @@ class ExperimentalFeatures implements lc.StaticFeature { | |||
159 | caps.snippetTextEdit = true; | 159 | caps.snippetTextEdit = true; |
160 | caps.codeActionGroup = true; | 160 | caps.codeActionGroup = true; |
161 | caps.hoverActions = true; | 161 | caps.hoverActions = true; |
162 | caps.statusNotification = true; | 162 | caps.serverStatusNotification = true; |
163 | capabilities.experimental = caps; | 163 | capabilities.experimental = caps; |
164 | } | 164 | } |
165 | initialize(_capabilities: lc.ServerCapabilities<any>, _documentSelector: lc.DocumentSelector | undefined): void { | 165 | initialize(_capabilities: lc.ServerCapabilities<any>, _documentSelector: lc.DocumentSelector | undefined): void { |
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts index c07583cfa..c05e757f8 100644 --- a/editors/code/src/ctx.ts +++ b/editors/code/src/ctx.ts | |||
@@ -5,7 +5,7 @@ import * as ra from './lsp_ext'; | |||
5 | import { Config } from './config'; | 5 | import { Config } from './config'; |
6 | import { createClient } from './client'; | 6 | import { createClient } from './client'; |
7 | import { isRustEditor, RustEditor } from './util'; | 7 | import { isRustEditor, RustEditor } from './util'; |
8 | import { Status } from './lsp_ext'; | 8 | import { ServerStatusParams } from './lsp_ext'; |
9 | 9 | ||
10 | export class Ctx { | 10 | export class Ctx { |
11 | private constructor( | 11 | private constructor( |
@@ -36,7 +36,7 @@ export class Ctx { | |||
36 | 36 | ||
37 | res.pushCleanup(client.start()); | 37 | res.pushCleanup(client.start()); |
38 | await client.onReady(); | 38 | await client.onReady(); |
39 | client.onNotification(ra.status, (params) => res.setStatus(params.status)); | 39 | client.onNotification(ra.serverStatus, (params) => res.setServerStatus(params)); |
40 | return res; | 40 | return res; |
41 | } | 41 | } |
42 | 42 | ||
@@ -66,39 +66,28 @@ export class Ctx { | |||
66 | return this.extCtx.subscriptions; | 66 | return this.extCtx.subscriptions; |
67 | } | 67 | } |
68 | 68 | ||
69 | setStatus(status: Status) { | 69 | setServerStatus(status: ServerStatusParams) { |
70 | switch (status) { | 70 | this.statusBar.tooltip = status.message ?? "Ready"; |
71 | case "loading": | 71 | let icon = ""; |
72 | this.statusBar.text = "$(sync~spin) rust-analyzer"; | 72 | switch (status.health) { |
73 | this.statusBar.tooltip = "Loading the project"; | 73 | case "ok": |
74 | this.statusBar.command = undefined; | ||
75 | this.statusBar.color = undefined; | 74 | this.statusBar.color = undefined; |
76 | break; | 75 | break; |
77 | case "readyPartial": | 76 | case "warning": |
78 | this.statusBar.text = "rust-analyzer"; | 77 | this.statusBar.tooltip += "\nClick to reload." |
79 | this.statusBar.tooltip = "Ready (Partial)"; | ||
80 | this.statusBar.command = undefined; | ||
81 | this.statusBar.color = undefined; | ||
82 | break; | ||
83 | case "ready": | ||
84 | this.statusBar.text = "rust-analyzer"; | ||
85 | this.statusBar.tooltip = "Ready"; | ||
86 | this.statusBar.command = undefined; | ||
87 | this.statusBar.color = undefined; | ||
88 | break; | ||
89 | case "invalid": | ||
90 | this.statusBar.text = "$(error) rust-analyzer"; | ||
91 | this.statusBar.tooltip = "Failed to load the project"; | ||
92 | this.statusBar.command = undefined; | ||
93 | this.statusBar.color = new vscode.ThemeColor("notificationsErrorIcon.foreground"); | ||
94 | break; | ||
95 | case "needsReload": | ||
96 | this.statusBar.text = "$(warning) rust-analyzer"; | ||
97 | this.statusBar.tooltip = "Click to reload"; | ||
98 | this.statusBar.command = "rust-analyzer.reloadWorkspace"; | 78 | this.statusBar.command = "rust-analyzer.reloadWorkspace"; |
99 | this.statusBar.color = new vscode.ThemeColor("notificationsWarningIcon.foreground"); | 79 | this.statusBar.color = new vscode.ThemeColor("notificationsWarningIcon.foreground"); |
80 | icon = "$(warning) "; | ||
81 | break; | ||
82 | case "error": | ||
83 | this.statusBar.tooltip += "\nClick to reload." | ||
84 | this.statusBar.command = "rust-analyzer.reloadWorkspace"; | ||
85 | this.statusBar.color = new vscode.ThemeColor("notificationsErrorIcon.foreground"); | ||
86 | icon = "$(error) "; | ||
100 | break; | 87 | break; |
101 | } | 88 | } |
89 | if (!status.quiescent) icon = "$(sync~spin) "; | ||
90 | this.statusBar.text = `${icon} rust-analyzer`; | ||
102 | } | 91 | } |
103 | 92 | ||
104 | pushCleanup(d: Disposable) { | 93 | pushCleanup(d: Disposable) { |
diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts index 00e128b8c..2e1744f1b 100644 --- a/editors/code/src/lsp_ext.ts +++ b/editors/code/src/lsp_ext.ts | |||
@@ -10,11 +10,12 @@ export interface AnalyzerStatusParams { | |||
10 | export const analyzerStatus = new lc.RequestType<AnalyzerStatusParams, string, void>("rust-analyzer/analyzerStatus"); | 10 | export const analyzerStatus = new lc.RequestType<AnalyzerStatusParams, string, void>("rust-analyzer/analyzerStatus"); |
11 | export const memoryUsage = new lc.RequestType0<string, void>("rust-analyzer/memoryUsage"); | 11 | export const memoryUsage = new lc.RequestType0<string, void>("rust-analyzer/memoryUsage"); |
12 | 12 | ||
13 | export type Status = "loading" | "ready" | "readyPartial" | "invalid" | "needsReload"; | 13 | export interface ServerStatusParams { |
14 | export interface StatusParams { | 14 | health: "ok" | "warning" | "error" |
15 | status: Status; | 15 | quiescent: boolean |
16 | message?: string | ||
16 | } | 17 | } |
17 | export const status = new lc.NotificationType<StatusParams>("rust-analyzer/status"); | 18 | export const serverStatus = new lc.NotificationType<ServerStatusParams>("experimental/serverStatus"); |
18 | 19 | ||
19 | export const reloadWorkspace = new lc.RequestType0<null, void>("rust-analyzer/reloadWorkspace"); | 20 | export const reloadWorkspace = new lc.RequestType0<null, void>("rust-analyzer/reloadWorkspace"); |
20 | 21 | ||