vim-lsp/clangd/bear/compdb

clangd

clangdはclangのLSPサーバ。
例えば、Makefileで-Iオプションとかを使ってて、それによってエディタがincludeパスを正しく見つけられなくて、エラーを出すみたいな問題を解決できる。

vim-lsp

LSPクライアントはvim-lspをつかって、その設定はvim-lsp-settingsに任せている。

github.com

github.com

bear/compdb

# bear -- <BUILD COMMAND>
bear -- make 

上記を実行するとcompile_commands.jsonというのがカレントディレクトリに生成される。 compile_commands.jsonが見るコンパイル情報のデータベースと思えば良い。
そして、bearはmakeの実行内容を見てくれて、compile_commands.jsonを生成してくれる。 compile_commands.jsonのあるディレクトリ以下ではエディタはclangd経由で適切にincludeパス等を解決できるようになる。

ヘッダファイルについてLSPで面倒みてもらうためにはcompdbが使える。 以下を実行するとcompile_commands.jsonにヘッダファイルの情報が追記される。

compdb list | sponge compile_commands.json

github.com

github.com

uchan.hateblo.jp

ヘッダーファイル中に未定義の型がある問題

ヘッダーファイルとかだと、ヘッダーファイル単体では未定義の型とかがある場合がある(そのヘッダファイルが依存する他のヘッダーファイルをincludeしてない場合等)。 この状態で最終的なビルドでは問題なくても、vimでそういうヘッダーファイルを開くとLSPがエラーを出してしまう。 これに対するうまい解決方法がわからないので、現状だと、compile_commands.jsonの該当のヘッダーファイルに関する記述の部分にgccの-includeオプションを手動で追記して無理やり依存を解決させている。