Index: clang-tools-extra/trunk/clangd/clients/clangd-vscode/package.json =================================================================== --- clang-tools-extra/trunk/clangd/clients/clangd-vscode/package.json +++ clang-tools-extra/trunk/clangd/clients/clangd-vscode/package.json @@ -74,6 +74,20 @@ "description": "Names a file that clangd should log a performance trace to, in chrome trace-viewer JSON format." } } - } + }, + "commands": [ + { + "command": "clangd-vscode.switchheadersource", + "title": "Switch between Source/Header" + } + ], + "keybindings": [ + { + "command": "clangd-vscode.switchheadersource", + "key": "Alt+o", + "mac": "Alt+cmd+o", + "when": "editorTextFocus" + } + ] } } Index: clang-tools-extra/trunk/clangd/clients/clangd-vscode/src/extension.ts =================================================================== --- clang-tools-extra/trunk/clangd/clients/clangd-vscode/src/extension.ts +++ clang-tools-extra/trunk/clangd/clients/clangd-vscode/src/extension.ts @@ -12,6 +12,12 @@ return config.get(option, defaultValue); } +namespace SwitchSourceHeaderRequest { +export const type = + new vscodelc.RequestType('textDocument/switchSourceHeader'); +} + /** * this method is called when your extension is activate * your extension is activated the very first time the command is executed @@ -51,8 +57,25 @@ } }; - const clangdClient = new vscodelc.LanguageClient('Clang Language Server', serverOptions, clientOptions); - console.log('Clang Language Server is now active!'); - - const disposable = clangdClient.start(); + const clangdClient = new vscodelc.LanguageClient('Clang Language Server', serverOptions, clientOptions); + console.log('Clang Language Server is now active!'); + context.subscriptions.push(clangdClient.start()); + context.subscriptions.push(vscode.commands.registerCommand( + 'clangd-vscode.switchheadersource', async () => { + const uri = + vscode.Uri.file(vscode.window.activeTextEditor.document.fileName); + if (!uri) { + return; + } + const docIdentifier = + vscodelc.TextDocumentIdentifier.create(uri.toString()); + const sourceUri = await clangdClient.sendRequest( + SwitchSourceHeaderRequest.type, docIdentifier); + if (!sourceUri) { + return; + } + const doc = await vscode.workspace.openTextDocument( + vscode.Uri.parse(sourceUri)); + vscode.window.showTextDocument(doc); + })); }