diff --git a/lua/plugins/conform.lua b/lua/plugins/conform.lua index ac0a0e8..0430c49 100644 --- a/lua/plugins/conform.lua +++ b/lua/plugins/conform.lua @@ -3,22 +3,43 @@ return { config = function() require("conform").setup({ formatters_by_ft = { - lua = { "stylua" }, - python = function(bufnr) - if require("conform").get_formatter_info("ruff_format", bufnr).available then - return { "ruff_fix", "ruff_format" } - else - return { "isort", "black", "flake8" } - end + lua = { "stylua" }, + python = function(bufnr) + if require("conform").get_formatter_info("ruff_format", bufnr).available then + return { "ruff_fix", "ruff_format" } + else + return { "isort", "black", "flake8" } + end end, - scala = { "scalafmt" }, - swift = { "swift_format" }, + scala = { "scalafmt" }, + swift = { "swift_format" }, ["*"] = { "trim_whitespace", "trim_newlines" }, }, - format_on_save = { - timeout_ms = 500, - lsp_fallback = true, - }, + format_on_save = function(bufnr) + -- Disable with a global or buffer-local variable + if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then + return + end + return { timeout_ms = 500, lsp_fallback = true } + end, + }) + + vim.api.nvim_create_user_command("FormatDisable", function(args) + if args.bang then + -- FormatDisable! will disable formatting just for this buffer + vim.b.disable_autoformat = true + else + vim.g.disable_autoformat = true + end + end, { + desc = "Disable autoformat-on-save", + bang = true, + }) + vim.api.nvim_create_user_command("FormatEnable", function() + vim.b.disable_autoformat = false + vim.g.disable_autoformat = false + end, { + desc = "Re-enable autoformat-on-save", }) end, }