feat(nvim)!: switch formatter.nvim to conform.nvim
This commit is contained in:
parent
cf425d4db9
commit
1735fb38da
8 changed files with 110 additions and 154 deletions
|
|
@ -1,20 +1,8 @@
|
|||
{ pkgs, lib, ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
with builtins;
|
||||
{
|
||||
config.home-manager.users.moritz.programs.neovim.lazy.plugins = with pkgs.vimPlugins; [
|
||||
{
|
||||
plugin = formatter-nvim;
|
||||
cmd = [ "Format" "Fmt" ];
|
||||
keys = [
|
||||
{
|
||||
key = "=";
|
||||
cmd = "<cmd>Format<cr>";
|
||||
desc = "format (formatter)";
|
||||
}
|
||||
];
|
||||
conf = readFile ./lua/formatter-nvim.lua;
|
||||
}
|
||||
{
|
||||
plugin = oil-nvim;
|
||||
lazy = false;
|
||||
|
|
@ -321,5 +309,13 @@ with builtins;
|
|||
];
|
||||
conf = readFile ./lua/neotest.lua;
|
||||
}
|
||||
{
|
||||
plugin = conform-nvim;
|
||||
keys = [
|
||||
{ key = "="; cmd = "<cmd>lua require('conform').format()<cr>"; desc = "format buffer"; mode = [ "n" "v" ]; }
|
||||
];
|
||||
cmd = [ "ConformInfo" "Format" ];
|
||||
conf = readFile ./lua/conform.lua;
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
|||
36
modules/programs/nvim/plugins/lua/conform.lua
Normal file
36
modules/programs/nvim/plugins/lua/conform.lua
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
local conform = require("conform")
|
||||
|
||||
local formatters_by_ft = {
|
||||
["*"] = { "codespell", "trim_whitespace" },
|
||||
go = { "gofmt" },
|
||||
json = { "jq" },
|
||||
lua = { "stylua" },
|
||||
nix = { { "nixpkgs_fmt", "alejandra" } },
|
||||
python = { { "ruff_fix", "isort" }, { "ruff_format", "black" } },
|
||||
rust = { "rustfmt" },
|
||||
sh = { "shfmt" },
|
||||
toml = { "taplo" },
|
||||
yaml = { "yamlfix" },
|
||||
}
|
||||
|
||||
conform.setup({
|
||||
formatters_by_ft = formatters_by_ft,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_user_command("Format", function(opts)
|
||||
conform.format({ formatters = opts.fargs })
|
||||
end, {
|
||||
nargs = "+",
|
||||
complete = function()
|
||||
local names = formatters_by_ft[vim.bo.filetype] or formatters_by_ft["_"] or {}
|
||||
names = vim.list_extend(names, formatters_by_ft["*"] or {})
|
||||
names = vim.tbl_flatten(names)
|
||||
local formatters = vim.tbl_map(conform.get_formatter_info, names)
|
||||
formatters = vim.tbl_filter(function(formatter)
|
||||
return formatter.available
|
||||
end, formatters)
|
||||
return vim.tbl_map(function(formatter_info)
|
||||
return formatter_info.name
|
||||
end, formatters)
|
||||
end,
|
||||
})
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
-- Provides the Format, FormatWrite, FormatLock, and FormatWriteLock commands
|
||||
require("formatter").setup({
|
||||
-- Enable or disable logging
|
||||
logging = true,
|
||||
-- Set the log level
|
||||
log_level = vim.log.levels.WARN,
|
||||
-- All formatter configurations are opt-in
|
||||
filetype = {
|
||||
go = {
|
||||
require("formatter.filetypes.go").gofmt,
|
||||
},
|
||||
json = {
|
||||
require("formatter.filetypes.json").jq,
|
||||
},
|
||||
lua = {
|
||||
require("formatter.filetypes.lua").stylua,
|
||||
},
|
||||
nix = {
|
||||
require("formatter.filetypes.nix").nixpkgs_fmt,
|
||||
},
|
||||
python = {
|
||||
require("formatter.filetypes.python").black,
|
||||
},
|
||||
rust = {
|
||||
require("formatter.filetypes.rust").rustfmt,
|
||||
},
|
||||
sh = {
|
||||
require("formatter.filetypes.sh").shfmt,
|
||||
},
|
||||
toml = {
|
||||
require("formatter.filetypes.toml").taplo,
|
||||
},
|
||||
yaml = {
|
||||
require("formatter.filetypes.yaml").yamlfmt,
|
||||
},
|
||||
|
||||
-- HACK to use specific formatters only when specified
|
||||
alejandra = {
|
||||
require("formatter.filetypes.nix").alejandra,
|
||||
},
|
||||
isort = {
|
||||
require("formatter.filetypes.python").isort,
|
||||
},
|
||||
|
||||
-- Use the special "*" filetype for defining formatter configurations on
|
||||
-- any filetype
|
||||
["*"] = {
|
||||
-- "formatter.filetypes.any" defines default configurations for any
|
||||
-- filetype
|
||||
require("formatter.filetypes.any").remove_trailing_whitespace,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
vim.api.nvim_create_user_command("Fmt", function(opts)
|
||||
local params = vim.split(opts.args, "%s+", { trimempty = true })
|
||||
local filetype = vim.bo.filetype
|
||||
vim.cmd("set filetype=" .. params[1]) -- fake filetype
|
||||
vim.cmd(":Format")
|
||||
vim.cmd("set filetype=" .. filetype) -- restore original filetype
|
||||
end, {
|
||||
nargs = 1,
|
||||
complete = function()
|
||||
local languages = {
|
||||
nix = { "alejandra" },
|
||||
python = { "isort" },
|
||||
}
|
||||
return languages[vim.bo.filetype] or {}
|
||||
end,
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue