diff options
-rw-r--r-- | clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts | 8 | ||||
-rw-r--r-- | clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts | 15 |
2 files changed, 16 insertions, 7 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 fa787f9f029..4cd7b0e51e0 100644 --- a/clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts +++ b/clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts @@ -110,7 +110,8 @@ export function activate(context: vscode.ExtensionContext) { const clangdClient = new ClangdLanguageClient('Clang Language Server', serverOptions, clientOptions); const semanticHighlightingFeature = - new semanticHighlighting.SemanticHighlightingFeature(); + new semanticHighlighting.SemanticHighlightingFeature(clangdClient, + context); context.subscriptions.push( vscode.Disposable.from(semanticHighlightingFeature)); clangdClient.registerFeature(semanticHighlightingFeature); @@ -144,14 +145,9 @@ export function activate(context: vscode.ExtensionContext) { clangdClient.onNotification( 'textDocument/clangd.fileStatus', (fileStatus) => { status.onFileUpdated(fileStatus); }); - clangdClient.onNotification( - semanticHighlighting.NotificationType, - semanticHighlightingFeature.handleNotification.bind( - semanticHighlightingFeature)); } else if (newState == vscodelc.State.Stopped) { // Clear all cached statuses when clangd crashes. status.clear(); - semanticHighlightingFeature.dispose(); } })); // An empty place holder for the activate command, otherwise we'll get an diff --git a/clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts b/clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts index 27dfb8b75d2..930079b1b2d 100644 --- a/clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts +++ b/clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts @@ -44,7 +44,7 @@ export interface SemanticHighlightingLine { // Language server push notification providing the semantic highlighting // information for a text document. -export const NotificationType = +const NotificationType = new vscodelc.NotificationType<SemanticHighlightingParams, void>( 'textDocument/semanticHighlighting'); @@ -58,6 +58,19 @@ export class SemanticHighlightingFeature implements vscodelc.StaticFeature { highlighter: Highlighter; // Any disposables that should be cleaned up when clangd crashes. private subscriptions: vscode.Disposable[] = []; + constructor(client: vscodelc.BaseLanguageClient, + context: vscode.ExtensionContext) { + context.subscriptions.push(client.onDidChangeState(({newState}) => { + if (newState == vscodelc.State.Running) { + // Register handler for semantic highlighting notification. + client.onNotification(NotificationType, + this.handleNotification.bind(this)); + } else if (newState == vscodelc.State.Stopped) { + // Dispose resources when clangd crashes. + this.dispose(); + } + })); + } fillClientCapabilities(capabilities: vscodelc.ClientCapabilities) { // Extend the ClientCapabilities type and add semantic highlighting // capability to the object. |