2019-01-22 22:15:03 +01:00
|
|
|
import * as vscode from 'vscode';
|
|
|
|
import { Server } from '../server';
|
|
|
|
|
2019-01-25 14:10:34 +01:00
|
|
|
const statusUri = vscode.Uri.parse('ra-lsp-status://status');
|
|
|
|
|
|
|
|
export class TextDocumentContentProvider
|
|
|
|
implements vscode.TextDocumentContentProvider {
|
|
|
|
public eventEmitter = new vscode.EventEmitter<vscode.Uri>();
|
|
|
|
public syntaxTree: string = 'Not available';
|
|
|
|
|
|
|
|
public provideTextDocumentContent(
|
|
|
|
uri: vscode.Uri
|
|
|
|
): vscode.ProviderResult<string> {
|
|
|
|
const editor = vscode.window.activeTextEditor;
|
|
|
|
if (editor == null) {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
return Server.client.sendRequest<string>('ra/analyzerStatus', null);
|
|
|
|
}
|
|
|
|
|
|
|
|
get onDidChange(): vscode.Event<vscode.Uri> {
|
|
|
|
return this.eventEmitter.event;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let poller: NodeJS.Timer | null = null;
|
|
|
|
|
2019-01-22 22:15:03 +01:00
|
|
|
// Shows status of rust-analyzer (for debugging)
|
2019-01-25 14:10:34 +01:00
|
|
|
|
|
|
|
export function makeCommand(context: vscode.ExtensionContext) {
|
|
|
|
const textDocumentContentProvider = new TextDocumentContentProvider();
|
|
|
|
context.subscriptions.push(
|
|
|
|
vscode.workspace.registerTextDocumentContentProvider(
|
|
|
|
'ra-lsp-status',
|
|
|
|
textDocumentContentProvider
|
|
|
|
)
|
2019-01-22 22:15:03 +01:00
|
|
|
);
|
2019-01-25 14:10:34 +01:00
|
|
|
|
|
|
|
context.subscriptions.push({
|
|
|
|
dispose() {
|
|
|
|
if (poller != null) {
|
|
|
|
clearInterval(poller);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return async function handle() {
|
|
|
|
if (poller == null) {
|
|
|
|
poller = setInterval(
|
|
|
|
() => textDocumentContentProvider.eventEmitter.fire(statusUri),
|
|
|
|
1000
|
|
|
|
);
|
|
|
|
}
|
|
|
|
const document = await vscode.workspace.openTextDocument(statusUri);
|
|
|
|
return vscode.window.showTextDocument(
|
|
|
|
document,
|
|
|
|
vscode.ViewColumn.Two,
|
|
|
|
true
|
|
|
|
);
|
|
|
|
};
|
2019-01-22 22:15:03 +01:00
|
|
|
}
|