先日、Go Advent Calendar の記事の中で Language Server について書きました。
Big Sky :: gocode やめます(そして Language Server へ)
はじめに まず始めに言っておかなければなりません。 gocode 今まで本当にありがとう この記事は、Go 言語歴10年になる僕がこれまで愛用してきた Go 言語のコード補完ソフトウェア gocode...
https://mattn.kaoriya.net/software/lang/go/20181217000056.htm
僕は Vim を使っていて、幾らかの言語の開発環境は vim-lsp に移行できたのですが C/C++ を扱うケースだけ vim-lsp に移行できず vim-clang を使ってきました。C/C++ は clangd という Language Server を使うのだけど何故か clangd サーバがうまく補完候補を出してくれませんでした。調べてみると clangd は vim-clang の様に .clang
ファイルを読み取ってくれず、compile_commands.json
というファイルを読み取っているらしいのです。フォーマットは以下の様になっています。
[
{
"directory": "C:/dev/foo",
"arguments": [
"gcc",
"-c",
"-I.",
"-DWIN32",
"-s",
"foo.c",
"-o",
"foo.o"
],
"file": "foo.c"
}
]
一つ二つなら自分で書く事も出来るのですが、ソースファイルが沢山ある場合にこんなの作ってられません。cmake を使っているプロジェクトであればこれを自動で生成してくれる方法があるらしいのですが、Makefile からは作ってくれません。これを自動で作る方法無いかなと調べていたら compiledb というコマンドがある事に気付きました。
GitHub - nickdiego/compiledb: Tool for generating Clang's JSON Compilation Database files for make-based build systems.
Compilation Database Generator Tool for generating Clang's JSON Compilation Database file for GNU ma...
https://github.com/nickdiego/compiledb
このコマンドを以下の様にインストールします。
pip3 install compiledb
インストールしたらいつもの make の手順に compiledb を付けて以下の様に実行します。
compiledb make
すると全てのビルドが終わったタイミングで compile_commands.json
が生成されます。後は vim-lsp から補完を行えば vim-clang よりも高速に入力補完が行える様になります。
— mattn来日 (@mattn_jp) December 25, 2018
快適~