👋

mason-null-ls.nvim で null-lsを自動セットアップする

2023/04/20に公開

TL;DR

init.lua等で、以下のように設定する。

init.lua
require('mason-null-ls').setup({
	automatic_setup = true,
	handlers = {}, 
})

詳細

mason-null-ls.nvimREADME.mdAutomatic Setup UsageHandlers usageを読めばわかります。

handlersを明示的に宣言することでnull-lsにある全てのsourcesが自動的に有効になります。
handlersの中にfunction() endを設定することで、全ての自動設定を削除できるようなので、手動で設定したい方はそのようにすると良いです。

勘違いしていた頃の話

TL;DR

:NullLsInstallを使ってツールをインストールしても、自動でnull-lssourcesには追記されない。
きちんと自分のinit.lua等で、

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を使うと良いとmasonREADMEにあったため、早速使ってみることにしました。

そもそも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-lspconfigmason-lspconfig等のプラグインを追加で導入する必要があります。

nvim-lspconfig等を導入することで、例えばpython-lsp-serverを利用して構文エラーをneovim上で確認できるようになるわけです。

null-ls.nvimとは?

LSPとして提供されていないツールをneovim標準のLSP機能に挿入する事ができるプラグインです。
例えば、コードアクションやフォーマッターがそれに当たります。

null-lsを用いることでblackisortなどを使ったフォーマッティングを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