mason-null-ls.nvim で null-lsを自動セットアップする
TL;DR
init.lua
等で、以下のように設定する。
require('mason-null-ls').setup({
automatic_setup = true,
handlers = {},
})
詳細
mason-null-ls.nvim
のREADME.md
のAutomatic Setup UsageとHandlers usageを読めばわかります。
handlers
を明示的に宣言することでnull-lsにある全てのsources
が自動的に有効になります。
handlers
の中にfunction() end
を設定することで、全ての自動設定を削除できるようなので、手動で設定したい方はそのようにすると良いです。
勘違いしていた頃の話
TL;DR
:NullLsInstall
を使ってツールをインストールしても、自動でnull-ls
のsources
には追記されない。
きちんと自分のinit.lua
等で、
require('null-ls').setup({
sources = {
-- 追加したツールの呼び出しをかく
null_ls.builtins.formatting.black, -- こんな感じ
},
})
のように設定する必要があるということ。
ツールの設定の呼び出しは、公式のBUILTINS.mdを見ればわかると思います。
気がついたきっかけ
mason.nvim
を使い始めたのですが、:MasonInstall black isort
を行い、neovim
本体のLSPを使ったフォーマットをかけても、import
文が整形されなかったことに気がついた事が今回ハマってしまったきっかけでした。
これに対応するために色々調べてみると、コードアクションやフォーマッティング機能にLSP(Language Server Protocol)が対応していない場合(しているケースを知りませんが...)、外部のツールを使って(black
, isort
, etc...)それらを補う必要があるとわかりました。
mason
を使ってblack
等が入れられるだけに、このことに気がつくには時間がかかりました。
外部ツールをうまく動かすためには、null-ls.nvim
を使うと良いとmason
のREADME
にあったため、早速使ってみることにしました。
mason
とは?
そもそもPortable package manager for Neovim that runs everywhere Neovim runs.
Easily install and manage LSP servers, DAP servers, linters, and formatters.
とあるように、LSPやDAPサーバー、リンター、フォーマッターを簡単に導入/管理できるneovim
向けのパッケージマネージャーです。
mason
で可能なのはツールの導入に限っているため、導入したツールを適切に動作させるためにはnvim-lspconfig
やmason-lspconfig
等のプラグインを追加で導入する必要があります。
nvim-lspconfig
等を導入することで、例えばpython-lsp-server
を利用して構文エラーをneovim
上で確認できるようになるわけです。
null-ls.nvim
とは?
LSPとして提供されていないツールをneovim
標準のLSP機能に挿入する事ができるプラグインです。
例えば、コードアクションやフォーマッターがそれに当たります。
null-ls
を用いることでblack
やisort
などを使ったフォーマッティングをneovim
のLSP機能から呼び出す事ができるというわけですね。
mason-null-ls.nvim
とは?
null-ls
にてデフォルトで提供されている「ツール毎の設定」があるのですが、そこに記載されているツールをmason
の管理下で導入/管理可能にするためのツールです。(と認識しています)
:NullLsInstall
を使うことで、必要なフォーマッタ等を簡単に導入できるようになります。
改めて、ハマったポイントは?
mason-null-ls
を使えば、:NullLsInstall
をした際に自動でnull-ls
の設定を追記してくれると勘違いしたことにあります。
きちんとドキュメントを読み込むと確かにそんなことはどこにも書いておらず、ただの勘違いであったわけなんですが...
独り言というか愚痴というか
いやー、セットアップの引数にautomatic_setup
なんていう項目があれば勘違いしちゃいません?
この引数、README
の中でも出てきたりこなかったりするので結構混乱させられました...
ただでさえ英語ができないのに...
(2023/04/25 追記)
もう一度、Automatic Setup Usageの項を読んで自動で構成してくれないか試してみましたが、うまくいきませんでした。
解決方法
インストールしたツールがあれば、すぐにTL;DRに書いたように設定ファイルを編集するようにすると良いでしょう。(というより、しなくてはいけない)
時間がある時に、インストール済みのツールを見て自動的にsources
に追加するプラグインでも書こうかなと思います。
Discussion