【Neovim】null-lsを導入してElixirのリンターcredoの実行結果を表示する
先日の記事でElixirの開発環境としてNeovimの環境を整えた話をしました。
同記事内で ale というプラグインを利用してcredoの結果を表示するという内容に触れていましたが、Neovimであれば null-ls という別のプラグインを使って同じことが出来たので記事にしてみます。
同じことが出来るならどちらでも良い気がするのですが、null-lsの方はlua言語をベースに実装されており、vim-scriptの資産も特になくluaでNeovimの環境を整えている自分には親和性がありそうということで乗り換えてみました。
最終的にこのようにcredoの警告が確認できるようになりました。
null-lsで出来ること
READMEを見ると次のように記載があります。
Unlike the VS Code and coc.nvim ecosystems, Neovim doesn't provide a way for non-LSP sources to hook into its LSP client. null-ls is an attempt to bridge that gap and simplify the process of creating, sharing, and setting up LSP sources using pure Lua.
LSP(Language Server Protocol)の形式に沿っていないツールの出力をLSPの形式に変換してNeovimにbuilt-inされているclientに注入するという役割を担ってくれているようです。
Build-in Sources のドキュメントを見ると、有名どころのフォーマッターやリンターがズラズラと並んでいることが確認できます。
この中にElixirの静的コード解析ツールである credo も記述があり、これにしたがって導入できます。
導入
packer経由でinstallしたのち、sourcesに null_ls.builtins.diagnostics.credo
を指定します。
use({ "jose-elias-alvarez/null-ls.nvim", requires = "nvim-lua/plenary.nvim" })
local null_ls = require("null-ls")
null_ls.setup({
sources = {
null_ls.builtins.diagnostics.credo
},
})
動かしてみる
まっさらなmix projectを作って動かしてみます。
$ mix new sample
$ cd sample
credoを依存関係に追加したのち、依存を取得します。
defp deps do
[
{:credo, "~> 1.6", only: [:dev, :test], runtime: false}
]
end
$ mix deps.get
lib/sample.ex
でcredoで怒られる実装をしてみると、credoの警告が各言語でインストールしたlanguage serverと同じような見た目で表示されます(記事冒頭のキャプチャ再掲)
注意点
内部的には mix credo
コマンドを叩いているため、current directoryがmix projectのrootである必要があります。
archiveをinstallして動かしてみたところ、Jasonのエラーが出てうまく動作せずでした。
まとめ
null-lsを導入して多種多様なリンター・フォーマッターの恩恵を受けることができ、快適なコーディング環境となります。
現状、私の端末では他にも
の設定を追加しています。開発している言語のツールに合わせてぜひ導入を検討してみてはいかがでしょうか。
参考
Discussion