diff --git a/package.json b/package.json index 7843b590..9c8bb7d4 100644 --- a/package.json +++ b/package.json @@ -98,6 +98,12 @@ }, "description": "Arguments for clangd server." }, + "clangd.autoStart": { + "type": "boolean", + "default": true, + "description": "Start clangd language server automatically when opening a file or project.", + "scope": "resource" + }, "clangd.trace": { "type": "string", "description": "Names a file that clangd should log a performance trace to, in chrome trace-viewer JSON format." @@ -179,6 +185,11 @@ "category": "clangd", "title": "Restart language server" }, + { + "command": "clangd.stop", + "category": "clangd", + "title": "Stop language server" + }, { "command": "clangd.typeHierarchy", "category": "clangd", diff --git a/src/extension.ts b/src/extension.ts index 6d2b596a..d6e60c9c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -23,9 +23,16 @@ export async function activate(context: vscode.ExtensionContext) { await clangdContext.activate(context.globalStoragePath, outputChannel, context.workspaceState); })); + context.subscriptions.push( + vscode.commands.registerCommand('clangd.stop', async () => { + await clangdContext.dispose(); + })); - await clangdContext.activate(context.globalStoragePath, outputChannel, - context.workspaceState); + const autoStart = vscode.workspace.getConfiguration('clangd').get('autoStart'); + if (autoStart) { + await clangdContext.activate(context.globalStoragePath, outputChannel, + context.workspaceState); + } const shouldCheck = vscode.workspace.getConfiguration('clangd').get( 'detectExtensionConflicts');