forked from OSchip/llvm-project
[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 llvm-svn: 350210
This commit is contained in:
parent
52b7e863d1
commit
91051537b8
|
@ -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.ExtensionContext) {
|
|||
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.ExtensionContext) {
|
|||
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); });
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue