[clang-tools-extra] r350210 - [clangd] Show FileStatus in vscode-clangd.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 2 03:25:38 PST 2019
Author: hokein
Date: Wed Jan 2 03:25:37 2019
New Revision: 350210
URL: http://llvm.org/viewvc/llvm-project?rev=350210&view=rev
Log:
[clangd] Show FileStatus in vscode-clangd.
Summary:
The file status will be shown in the status bar.
Depends on D55363.
Reviewers: ilya-biryukov
Subscribers: ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits
Differential Revision: https://reviews.llvm.org/D55374
Modified:
clang-tools-extra/trunk/clangd/clients/clangd-vscode/src/extension.ts
Modified: clang-tools-extra/trunk/clangd/clients/clangd-vscode/src/extension.ts
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/clients/clangd-vscode/src/extension.ts?rev=350210&r1=350209&r2=350210&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/clients/clangd-vscode/src/extension.ts (original)
+++ clang-tools-extra/trunk/clangd/clients/clangd-vscode/src/extension.ts Wed Jan 2 03:25:37 2019
@@ -18,6 +18,33 @@ export const type =
void, void>('textDocument/switchSourceHeader');
}
+class FileStatus {
+ private statuses = new Map<string, any>();
+ private readonly statusBarItem =
+ vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 10);
+
+ onFileUpdated(fileStatus: any) {
+ const filePath = vscode.Uri.parse(fileStatus.uri);
+ this.statuses.set(filePath.fsPath, fileStatus);
+ this.updateStatus();
+ }
+
+ updateStatus() {
+ const path = vscode.window.activeTextEditor.document.fileName;
+ const status = this.statuses.get(path);
+ if (!status) {
+ this.statusBarItem.hide();
+ return;
+ }
+ this.statusBarItem.text = `clangd: ` + status.state;
+ this.statusBarItem.show();
+ }
+
+ dispose() {
+ this.statusBarItem.dispose();
+ }
+}
+
/**
* this method is called when your extension is activate
* your extension is activated the very first time the command is executed
@@ -44,6 +71,7 @@ export function activate(context: vscode
synchronize: !syncFileEvents ? undefined : {
fileEvents: vscode.workspace.createFileSystemWatcher(filePattern)
},
+ initializationOptions: { clangdFileStatus: true },
// Resolve symlinks for all files provided by clangd.
// This is a workaround for a bazel + clangd issue - bazel produces a symlink tree to build in,
// and when navigating to the included file, clangd passes its path inside the symlink tree
@@ -80,4 +108,13 @@ export function activate(context: vscode
vscode.Uri.parse(sourceUri));
vscode.window.showTextDocument(doc);
}));
+ const status = new FileStatus();
+ context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(() => {
+ status.updateStatus();
+ }));
+ clangdClient.onReady().then(() => {
+ clangdClient.onNotification(
+ 'textDocument/clangd.fileStatus',
+ (fileStatus) => { status.onFileUpdated(fileStatus); });
+ })
}
More information about the cfe-commits
mailing list