Neovim+ALEでclang-formatを使う。

好みの問題にはなりますが、プログラムコードを書く場合に、コードの整形を自動で行いたいという向きもあるでしょう。Python なら autopep8 とか。

C言語だと clang-format というものがありますがこれは Clang の配布物に含まれていて、別に Clang はいらないけど clang-format を使いたいという場合には 1GB を超えるツールをまるごとインストールするのは大変です。LLVM のダウンロードページにあるインストーラは Clang と LLD、その他の LLVM ツール類がやまほど含まれていて、巨大なパッケージになっています。

でも実際にほしいのは clang-format.exe だけ。ということで、ダウンロードしたインストーラを 7zip で展開してみたら、LLVM のツリー構造がそのまま展開されたので、そこから bin/clang-format.exe だけを抜き出して、パスの通った場所にコピーします。

興味本位でその他のファイルも眺めてみると、clang-format.exe の他に、clang-tidy.exe や clang-refactor.exe、clang-include-fixer.exe などというものもあります。使い方はよくわかりませんが、名前だけ見ると便利そう。ですが、たとえば include-fixer は参照が足りていない #include を構成してくれるというもので、不要な #include を見てくれるわけではないようです。

とりあえず、ALE で clang-format.exe を使って自動整形できればいいので、clang-format.exe だけに着目します。

余談ですが、Visual Studio 2017 や 2019 では、clang-format.exe を同梱しているようです。C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\VC\vcpackagesあたりにありますが、バージョンはちょっと古いようです。

コマンドプロンプトを開いて、clang-format -version などとして動作することがわかったら、Neovim の設定をします。
現在は .toml ファイルでプラグインをロードしているので、そちらでの設定です。
[[plugins]]
## Asynchronous Lint Engine
repo = 'w0rp/ale'
hook_add='''
  let g:ale_lint_on_enter = 1
  let g:ale_lint_on_text_changed = 1
  let g:ale_fix_on_save = 1
  let g:ale_fixers = {
  \   '*': ['remove_trailing_lines', 'trim_whitespace'],
  \   'c': ['clang-format'],
  \   'cpp': ['clang-format'],
  \   'python': ['autopep8', 'isort'],
  \   'go': ['gofmt']
  \}
  let g:ale_linters = {
  \   'python': ['flake8'],
  \   'c': ['cpplint'],
  \   'cpp': ['cpplint']
  \}
  let g:ale_python_autopep8_options = '--max-line-length=99'
  let g:ale_python_flake8_options = '--max-line-length=99'
  let g:ale_virtualtext_cursor = 1
'''
自分がちょくちょく使用する言語の設定だけですが、こんな感じ。ちなみに cpplint は Python で実行されるので、利用するには pip install cpplint が必要です。

0 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...