NeovimでローカルのBiome使う設定

流行りのBiomeをグローバルではなくローカルにインストールしてNeovimで動かす設定を紹介します。

プラグインの用意

nvim-lspconfigを入れてLSPとして使います。
Neovimがv0.10未満の場合はnone-ls.nvimが必要です。

lspconfigの設定

Biomeをグローバルでインストールしている方は、server_configurations.mdのとおり、setupを呼び出すだけで終わりです。

local lspconfig = require("lspconfig")
lspconfig.biome.setup({})

Biomeをローカルにインストールしている仲間の皆さんは少々工夫が必要です。

インストールしているパッケージマネージャーに合わせてsetupcmdを書き換えます。

lspconfig.biome.setup({
cmd = { "npx", "biome", "lsp-proxy" }
-- cmd = { "pnpm", "biome", "lsp-proxy" }
})

pnpmを使ってたらpnpm、そうじゃないならnpxで指定する場合は次のように書きます。

local lspconfig = require("lspconfig")
lspconfig.biome.setup({
on_attach = on_attach, -- 各自設定して~
cmd = { "biome", "lsp-proxy" },
on_new_config = function(new_config)
local pnpm = lspconfig.util.root_pattern("pnpm-lock.yml", "pnpm-lock.yaml")(vim.api.nvim_buf_get_name(0))
local cmd = { "npx", "biome", "lsp-proxy" }
if pnpm then
cmd = { "pnpm", "biome", "lsp-proxy" }
end
new_config.cmd = cmd
end,
})

on_new_configを使って動的に設定を書き換えできます。pnpmかどうかはロックファイルで判断します。

Formatterの設定

単純に:lua vim.lsp.buf.format()で呼び出すだけであれば、以上で設定は終わりです。
ただし、「保存時にFormatterを実行する場合」は次の記事を参考に設定を見直してください。

NeovimのLSPのFormatter設定を見直す

LSPの動的な機能登録を使うには一部のAPIを書き換える必要があるためです。

none-ls(現在は不要)

none-ls.nvimでFormatterを使う例も残しておきます。こちらは単純でsourcesnull_ls.builtins.formatting.biomeを書くだけです。

local null_ls = require("null-ls")
local sources = {
-- ほかのFormatterなど
null_ls.builtins.formatting.biome,
}
null_ls.setup({
sources = sources,
})

気になって実装覗いてみたら、「ローカルを探してみて実行できないならグローバルとしてコマンドをたたく」という処理のようです。


以上、ローカルにインストールしたBiomeをNeovimで使う方法でした。

最初にlspconfigのドキュメントのとおりに書いたらNeovimが起動時にすぐ落ちました。あらためてドキュメントと実装を見たらグローバル前提っぽいな~と思ってこの記事を書いた次第です。