📄

mason.nvimでFormatter, Linterを自動マッピングする

2022/08/03に公開

mason-lspconfig でLSPを自動マッピングすることはヘルプにも方法が書いてあり、すぐにできますがFormatter, Linterは少しドキュメントを読まないといけないので、書き留めておきます。
フォーマットには null-ls を使用します。

local mason = require("mason")
local mason_package = require("mason-core.package")
local mason_registry = require("mason-registry")
local null_ls = require("null-ls")

mason.setup({})

local null_sources = {}

for _, package in ipairs(mason_registry.get_installed_packages()) do
        local package_categories = package.spec.categories[1]
        if package_categories == mason_package.Cat.Formatter then
                table.insert(null_sources, null_ls.builtins.formatting[package.name])
        end
        if package_categories == mason_package.Cat.Linter then
                table.insert(null_sources, null_ls.builtins.diagnostics[package.name])
        end
end

null_ls.setup({
        sources = null_sources,
})

PackageSpecについて

require("mason-registry").get_installed_packages()

でインストールされているパッケージをPackageの配列で受け取ることができます。
Package.spec によってPackageSpecを受け取ることができ、これには

  • name
  • desc
  • homepage
  • categories
  • languages
  • install

の値が長さ1の配列として含まれています。
formatter.nvim などを使用する場合、lua: styluaなど言語名が必要ですが、ここから取ることができます。

Discussion