clangd
clangdはclangのLSPサーバ。
例えば、Makefileで-Iオプションとかを使ってて、それによってエディタがincludeパスを正しく見つけられなくて、エラーを出すみたいな問題を解決できる。
vim-lsp
LSPクライアントはvim-lspをつかって、その設定はvim-lsp-settingsに任せている。
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
ヘッダーファイル中に未定義の型がある問題
ヘッダーファイルとかだと、ヘッダーファイル単体では未定義の型とかがある場合がある(そのヘッダファイルが依存する他のヘッダーファイルをincludeしてない場合等)。 この状態で最終的なビルドでは問題なくても、vimでそういうヘッダーファイルを開くとLSPがエラーを出してしまう。 これに対するうまい解決方法がわからないので、現状だと、compile_commands.jsonの該当のヘッダーファイルに関する記述の部分にgccの-includeオプションを手動で追記して無理やり依存を解決させている。