diff options
Diffstat (limited to 'editors/code')
-rw-r--r-- | editors/code/src/commands/analyzer_status.ts | 61 | ||||
-rw-r--r-- | editors/code/src/extension.ts | 5 |
2 files changed, 59 insertions, 7 deletions
diff --git a/editors/code/src/commands/analyzer_status.ts b/editors/code/src/commands/analyzer_status.ts index 5c56b9c4c..bb46a1990 100644 --- a/editors/code/src/commands/analyzer_status.ts +++ b/editors/code/src/commands/analyzer_status.ts | |||
@@ -1,12 +1,61 @@ | |||
1 | import * as vscode from 'vscode'; | 1 | import * as vscode from 'vscode'; |
2 | import { Server } from '../server'; | 2 | import { Server } from '../server'; |
3 | 3 | ||
4 | const statusUri = vscode.Uri.parse('ra-lsp-status://status'); | ||
5 | |||
6 | export class TextDocumentContentProvider | ||
7 | implements vscode.TextDocumentContentProvider { | ||
8 | public eventEmitter = new vscode.EventEmitter<vscode.Uri>(); | ||
9 | public syntaxTree: string = 'Not available'; | ||
10 | |||
11 | public provideTextDocumentContent( | ||
12 | uri: vscode.Uri | ||
13 | ): vscode.ProviderResult<string> { | ||
14 | const editor = vscode.window.activeTextEditor; | ||
15 | if (editor == null) { | ||
16 | return ''; | ||
17 | } | ||
18 | return Server.client.sendRequest<string>('ra/analyzerStatus', null); | ||
19 | } | ||
20 | |||
21 | get onDidChange(): vscode.Event<vscode.Uri> { | ||
22 | return this.eventEmitter.event; | ||
23 | } | ||
24 | } | ||
25 | |||
26 | let poller: NodeJS.Timer | null = null; | ||
27 | |||
4 | // Shows status of rust-analyzer (for debugging) | 28 | // Shows status of rust-analyzer (for debugging) |
5 | export async function handle() { | 29 | |
6 | const status = await Server.client.sendRequest<string>( | 30 | export function makeCommand(context: vscode.ExtensionContext) { |
7 | 'ra/analyzerStatus', | 31 | const textDocumentContentProvider = new TextDocumentContentProvider(); |
8 | null | 32 | context.subscriptions.push( |
33 | vscode.workspace.registerTextDocumentContentProvider( | ||
34 | 'ra-lsp-status', | ||
35 | textDocumentContentProvider | ||
36 | ) | ||
9 | ); | 37 | ); |
10 | const doc = await vscode.workspace.openTextDocument({ content: status }); | 38 | |
11 | await vscode.window.showTextDocument(doc, vscode.ViewColumn.Two); | 39 | context.subscriptions.push({ |
40 | dispose() { | ||
41 | if (poller != null) { | ||
42 | clearInterval(poller); | ||
43 | } | ||
44 | } | ||
45 | }); | ||
46 | |||
47 | return async function handle() { | ||
48 | if (poller == null) { | ||
49 | poller = setInterval( | ||
50 | () => textDocumentContentProvider.eventEmitter.fire(statusUri), | ||
51 | 1000 | ||
52 | ); | ||
53 | } | ||
54 | const document = await vscode.workspace.openTextDocument(statusUri); | ||
55 | return vscode.window.showTextDocument( | ||
56 | document, | ||
57 | vscode.ViewColumn.Two, | ||
58 | true | ||
59 | ); | ||
60 | }; | ||
12 | } | 61 | } |
diff --git a/editors/code/src/extension.ts b/editors/code/src/extension.ts index 288a852aa..3af95c599 100644 --- a/editors/code/src/extension.ts +++ b/editors/code/src/extension.ts | |||
@@ -45,7 +45,10 @@ export function activate(context: vscode.ExtensionContext) { | |||
45 | } | 45 | } |
46 | 46 | ||
47 | // Commands are requests from vscode to the language server | 47 | // Commands are requests from vscode to the language server |
48 | registerCommand('ra-lsp.analyzerStatus', commands.analyzerStatus.handle); | 48 | registerCommand( |
49 | 'ra-lsp.analyzerStatus', | ||
50 | commands.analyzerStatus.makeCommand(context) | ||
51 | ); | ||
49 | registerCommand('ra-lsp.syntaxTree', commands.syntaxTree.handle); | 52 | registerCommand('ra-lsp.syntaxTree', commands.syntaxTree.handle); |
50 | registerCommand('ra-lsp.extendSelection', commands.extendSelection.handle); | 53 | registerCommand('ra-lsp.extendSelection', commands.extendSelection.handle); |
51 | registerCommand('ra-lsp.matchingBrace', commands.matchingBrace.handle); | 54 | registerCommand('ra-lsp.matchingBrace', commands.matchingBrace.handle); |