Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

clangd導入メモ

$
0
0

clangdとは

clangのLanguage Server Protocol実装。

LSPはMicrosoftが提唱しているIDE支援のための統一プロトコル。
Language "Server"とあるとおり、言語支援のためのサーバーが常駐する。この手の機構を個別に備えた言語として、TypeScriptのtsserverとか、C#のOmniSharpなどが挙げられるけど、それの汎用版。

clangdはLLVMのフロントであるclangをベースとしたサーバーで、LLVMプロジェクトが公式に開発している。
コンパイラなので、コンパイルエラーの検出はもちろん、コード補完やフォーマット、定義ジャンプと参照元ジャンプ等には対応している。
なので、clang-formatやRTagsといったclang系ツールも、LSPクライアントを導入してしまえば、これらの個別設定をしなくてよい。

clangdのインストール

macだと、brew install llvmとかするとclangdもインストールされるらしい。未確認。
僕は未だにmacports使ってたせいか、知らんうちに手元に入ってた。port install llvm-5.0で勝手にインストールされるらしい。

LLVMのソースからビルドする場合は、 https://clang.llvm.org/get_started.htmlあたりを読むべし。clangdはclang-tools-extraに入ってるので、svn coするのを忘れずに。

インストールしたら、 --versionで確認できるよ(以下はソースからビルドした版)。

$ clangd --version> LLVM (http://llvm.org/):>   LLVM version 6.0.0svn>   Optimized build with assertions.>   Default target: x86_64-apple-darwin16.7.0>   Host CPU: broadwell

エディタ側

vim

vimの場合は汎用LSPクライントをインストールし、こいつにclangdのパスを教えてやる流れ。

LSPクライアントはいくつかあるんだけど、僕は https://github.com/prabirshrestha/vim-lspを利用している。
他と使い比べたわけでもないんだけど、作者がMSの人だしLSP慣れてんのかなーと思ってこれ使ってる。

この人のpluginは vim / nvimの非同期周りを吸収するasync.vimってのが出てくるので、セットでインストールしておく。

Plug 'prabirshrestha/async.vim'
Plug 'prabirshrestha/vim-lsp'
letg:lsp_log_verbose =1letg:lsp_log_file = expand('~/vim-lsp.log')calllsp#register_server({
    \ 'name': 'clangd',
    \ 'cmd': {server_info->['clangd']},
    \ 'whitelist': ['c','cpp','objc','objcpp'],
    \ })" オムニ補完設定
autocmd FileType typescript setlocalomnifunc=lsp#complete

VSC

LLVMが拡張作ってるので、これを入れるがよろし。

vscode-clangd

また、user/projectの設定で、clangdの在処を直接指定することも可能。

{"clangd.path":"/absolute/path/to/clangd"}

compile_commands.json

clangdにコンパイラオプションとかを教える場合、compile_commands.jsonを作って、カレントディクレトリなりに置くとclangdがよしなに探索してくれる。
または clangd起動時に -compile-commands-dirオプションで、jsonファイルの在処を教える、でもよい。

compile_commands.jsonを作る方法はいくつかある。

例えばcmakeの場合は下記のように、 CMAKE_EXPORT_COMPILE_COMMANDSを有効にしてcmakeを実行すると、出力される。

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .

シンプルにMakefileのみのプロジェクトの場合、Bearを使う。

bear make

Bazelだと、

https://github.com/grailbio/bazel-compilation-database

とか

https://gist.github.com/bsilver8192/0115ee5d040bb601e3b7

があるようだが、きちんと確認してない。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>