diff options
| -rw-r--r-- | clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts b/clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts index cad6a3a1f22..d4ab6787030 100644 --- a/clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts +++ b/clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts @@ -40,6 +40,11 @@ class FileStatus { this.statusBarItem.show(); } + clear() { + this.statuses.clear(); + this.statusBarItem.hide(); + } + dispose() { this.statusBarItem.dispose(); } @@ -112,9 +117,16 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(() => { status.updateStatus(); })); - clangdClient.onReady().then(() => { - clangdClient.onNotification( - 'textDocument/clangd.fileStatus', - (fileStatus) => { status.onFileUpdated(fileStatus); }); - }) + clangdClient.onDidChangeState( + ({ newState }) => { + if (newState == vscodelc.State.Running) { + // clangd starts or restarts after crash. + clangdClient.onNotification( + 'textDocument/clangd.fileStatus', + (fileStatus) => { status.onFileUpdated(fileStatus); }); + } else if (newState == vscodelc.State.Stopped) { + // Clear all cached statuses when clangd crashes. + status.clear(); + } + }) } |

