-- 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 = { 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, })