nvimの自動整形用プラグインをnone_lsからconform.nvimに置き換えた

私が所属している部署にAIを専門とするチームがあり、そのチームではPythonを利用して開発を行っています。

つい先日、そのチームに所属するメンバーがPythonのlinter/formatterであるruffを導入しました。

私は主にGoで開発を行っているのですが、別の業務でPythonを利用することもあるため、ruffを使ってみることにしました。

ruffを導入する過程で、nvimの自動整形用のプラグインであるnone-lsがruffに対応していないことが分かったため、conform.nvimに置き換えることにしました。

conform.nvimについて

conform.nvimは、nvimで書いたコードを自動整形するためのプラグインです。

READMEにあるとおり、軽量で使いやすいプラグインであり、設定も簡単でした。

none-lsは2023年にアーカイブされたnull-lsの後継で、自動整形だけでなくLSPを利用したコード分析(diagnostics)なども行える多機能なプラグインですが、ruffに対応していませんでした。

私はリンターやdiagnosticsの機能をnvim-lspconfigで設定しているため、none-lsは自動整形の機能だけを利用していました。そのような事情から、自動整形のみに特化したconform.nvimは、私にとって最適な選択肢でした。

置き換え作業

conform.nvimのインストールは、プラグインマネージャーであるlazy.nvimを利用して行いました。

1{
2	"stevearc/conform.nvim",
3	lazy = true,
4	event = { "BufRead", "BufNewFile" },
5	config = function()
6		require("conform_nvim")
7	end,
8},

フォーマッターはファイルを保存するときに実行されればよいので、遅延読み込みしています。また、conform.nvimの設定はconform_nvim.luaに記述しています。

 1require("conform").setup({
 2	format_on_save = {
 3		timeout_ms = 500,
 4		lsp_format = "fallback",
 5	},
 6	formatters_by_ft = {
 7		go = { "goimports" },
 8		javascript = { "prettierd", "prettier", stop_after_first = true },
 9		lua = { "stylua" },
10		python = { "ruff_fix", "ruff_format", "ruff_organize_imports" },
11	},
12})

format_on_saveはファイルを保存するときに自動整形を有効にする設定です。

formatters_by_ftに利用するフォーマッターを設定しています。

ruffのインストール

conform.nvimの設定だけでは当然動かないので、ruffをインストールする必要があります。インストール方法は公式サイトを参照のこと。

まとめ

conform.nvimに置き換えることで、ruffを利用した自動整形が可能になりました。また、conform.nvimの設定がかなりシンプルであるため、設定ファイルもすっきりしました。