diff options
Diffstat (limited to 'editors/code/src/ctx.ts')
-rw-r--r-- | editors/code/src/ctx.ts | 47 |
1 files changed, 18 insertions, 29 deletions
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts index c07583cfa..bd023f803 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) { |