Files
DotFiles/nvim/lua/plugins/autoformatting.lua
T
2026-05-18 23:18:07 +02:00

61 lines
1.8 KiB
Lua

return {
"nvimtools/none-ls.nvim",
dependencies = {
"nvimtools/none-ls-extras.nvim",
"jayp0521/mason-null-ls.nvim", -- ensure dependencies are installed
},
config = function()
local null_ls = require("null-ls")
-- Formatters & linters for mason to install
require("mason-null-ls").setup({
ensure_installed = {
"prettier", -- ts/js formatter
"eslint_d", -- ts/js linter
"shfmt", -- Shell formatter
"checkmake", -- linter for Makefiles
"stylua", -- lua formatter; Already installed via Mason
-- 'ruff', -- Python linter and formatter; Already installed via Mason
},
automatic_installation = true,
})
local sources = {
-- null_ls.builtins.formatting.prettier.with({ filetypes = { "html", "json", "yaml", "markdown" } }),
null_ls.builtins.formatting.stylua,
-- null_ls.builtins.formatting.terraform_fmt,
null_ls.builtins.diagnostics.checkmake,
null_ls.builtins.formatting.shfmt.with({ args = { "-i", "4" } }),
require("none-ls.formatting.ruff").with({ extra_args = { "--extend-select", "I" } }),
require("none-ls.formatting.ruff_format"),
null_ls.builtins.formatting.clang_format.with({
filetypes = { "cpp" },
}),
}
require("null-ls").setup({
sources = sources,
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({
bufnr = bufnr,
filter = function(client)
return client.name == "null-ls"
end,
})
end,
})
end
end,
})
vim.keymap.set("n", "<leader>fo", vim.lsp.buf.format, {})
end,
}