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

最终效果

vscode-cquery

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