return { -- Autoformat "stevearc/conform.nvim", event = { "BufWritePre", "BufReadPre", "BufNewFile" }, cmd = { "ConformInfo" }, keys = { { "f", function() require("conform").format({ async = true, lsp_format = "fallback" }) end, mode = "", desc = "[F]ormat buffer", }, }, opts = { notify_on_error = false, notify_no_formatters = true, format_on_save = { lsp_fallback = true, async = false, timeout_ms = 5000, }, formatters_by_ft = { go = { "goimports", "gofmt" }, terraform = { "terraform_fmt" }, lua = { "stylua" }, javascript = { "prettier" }, typescript = { "prettier" }, javascriptreact = { "prettier" }, typescriptreact = { "prettier" }, svelte = { "prettier" }, css = { "prettier" }, html = { "prettier" }, json = { "prettier" }, yaml = { "prettier" }, markdown = { "prettier" }, graphql = { "prettier" }, liquid = { "prettier" }, -- python = { 'isort', 'black' }, -- You can use a function here to determine the formatters dynamically python = function(bufnr) if require("conform").get_formatter_info("ruff_format", bufnr).available then return { "ruff_format" } else return { "isort", "black" } end end, -- Use the "*" filetype to run formatters on all filetypes. ["*"] = { "codespell" }, -- Use the "_" filetype to run formatters on filetypes that don't -- have other formatters configured. ["_"] = { "trim_whitespace" }, -- Conform can also run multiple formatters sequentially -- python = { "isort", "black" }, -- -- You can use 'stop_after_first' to run the first available formatter from the list -- javascript = { "prettierd", "prettier", stop_after_first = true }, }, }, }