LSP(Language-Server-Protocol)开源的语言服务器协定,微软出品,语言服务端提供索引代码的服务,编辑器直接调用。套用官话就是,可以让不同的程序编辑器与集成开发环境(IDE)方便嵌入各种程序语言,允许开发人员在最喜爱的工具中使用各种语言来撰写程序。
目前语言与编辑器支持情况见 https://langserver.org/
cquery 就是 C/C++/Objective-C 的 language server,VSCode, Vim, Emacs 等只要安装了 lsp 插件,就可调用它来实现 C/C++/Objective-C 语法补全等功能。
下面以 Visual Studio Code 为例来实现 C/C++ 补全。
build cquery
1 2 3
| git clone https://github.com/cquery-project/cquery --single-branch --depth=1 cd cquery git submodule update --init && ./waf configure build
|
VSCode 配置
首先在插件商店安装 cquery 插件,用户配置中加入以下配置:
1 2 3 4 5
| { "cquery.launch.workingDirectory": "/YOUR_PATH_TO/cquery/build", "cquery.launch.command": "release/bin/cquery", "cquery.cacheDirectory": "/tmp/vscode-cquery", }
|
项目编译选项配置
推荐 compile_commands.json
例如,如果使用 CMake,用以下命令生成 compile_commands.json
文件。
1 2 3 4
| CMake mkdir build (cd build; cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=YES ..) ln -s build/compile_commands.json
|
或者新建一个 .cquery
文件,内容示例:
1 2 3 4 5 6 7 8 9
| %clang %c -std=gnu11 %cpp -std=gnu++14 -pthread
# Includes -I/work/cquery/third_party -I/work/cquery/another_third_party # -I space_is_not_allowed
|
最终效果

参考:http://maskray.me/blog/2017-12-03-c++-language-server-cquery