[Neovim/coc.nvim]clangd/clang-formatでC/C++の快適な開発環境を整える
最近、低レイヤ理解のためにゼロからのOS自作入門をはじめました。
この本を進めるにあたり、C/C++の(快適な)開発環境が必要になるので、clangdとclang-formatを導入してみました。
開発マシンはMac、エディタはNeoVimです。LSPクライアントはcoc.nvimを使用しています。NeoVimやcoc.nvimの導入方法については触れません。
clangd
インストール
clangdはLLVMプロジェクトの一部なので、MacであればHomebrewでllvmをインストールするだけで利用できます。
$ brew install llvm
$ clangd --version
clangd version 11.0.0
coc-clangdのインストール
coc.nvimがclangdに接続するために、coc-clangdというプラグインをインストールする必要があります。
:CocInstall coc-clangd
:CocConfig
で設定を変更することができます。デフォルトのままでも補完やエラーチェックは行ってくれます。
私は保存時のオートフォーマットを有効にしたかったため、:CocConfig
でcoc-settings.json
を開き、以下の設定を追加しました。
"coc.preferences.formatOnSaveFiletypes": [
"cpp"
],
セットアップ
各種インストールすれば完了、というわけではありません。
clangdがソースコードの内容・依存関係を把握するためにcompile_commands.json
またはcompile_flags.txt
というファイルを作成する必要があります。
compile_flags.json
については、make
またはcmake
を使用してビルドしている場合は簡単に作成することができます。
make
compiledbを利用するとcompiledb make
というコマンドでcompile_commands.json
も合わせて出力してくれます。
$ pip install compiledb
$ compiledb make
参考:Big Sky :: clangd を使う時に便利なコマンド compiledb
cmake
cmake
実行時に-DCMAKE_EXPORT_COMPILE_COMMANDS=1
というオプションを付ければcompile_commands.json
を作成してくれます。
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=1
# 作業ディレクトリのルートにシンボリックリンクをはる
$ ln -s $(pwd)/compile_commands.json $(pwd)/../
それ以外
makeやcmakeを使っていない場合はcompile_flags.txt
を手で作成して作業ディレクトリのルートに配置することで補完や定義へ移動等が有効になります。
# 例
-I/usr/local/include
clang-format
インストール
clang-formatもLLVMプロジェクトの一部なので、(Macの場合)llvmをインストールすると一緒にインストールされます。
$ clang-format --version
clang-format version 11.0.0
セットアップ
.clang-format
というファイルを作成して作業ディレクトリにルートに配置します。
各設定の意味は下記に記載されています。
膨大なので全部目を通して一から.clang-format
を作成するのは大変かもしれません。 そのため、以下のコマンドで-style
に指定したルールを一式を.clang-format
に出力して利用します。
$ clang-format -style=llvm --dump-config > .clang-format
-style
には以下の種類があります。私はとりあえずgoogle
を指定しています。
LLVM A style complying with the LLVM coding standards
Google A style complying with Google’s C++ style guide
Chromium A style complying with Chromium’s style guide
Mozilla A style complying with Mozilla’s style guide
WebKit A style complying with WebKit’s style guide
Microsoft A style complying with Microsoft’s style guide
GNU A style complying with the GNU coding standards
参考:Configurable Format Style Options
使ってみる
ここまで準備できたらclangdによる補完や定義へ移動、clang-formatによるコードの自動整形が有効になります。
clangdの導入前は以下のようにインクルードしているヘッダーが見つからず警告が出ています。
clangdとclang-formatのセットアップ完了後、以下のように警告は消えてコードも整形されます。
hoverで定義やヒントを確認することができます(coc.nvimの設定が必要です)。
Discussion