-- ============================================================================ -- Formatting - conform.nvim -- ============================================================================ return { { 'stevearc/conform.nvim', event = { 'BufWritePre' }, cmd = { 'ConformInfo' }, keys = { { 'cf', function() require('conform').format({ async = true, lsp_fallback = true }) end, mode = '', desc = 'Format buffer', }, }, opts = { notify_on_error = false, 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, formatters_by_ft = { -- TypeScript/JavaScript javascript = { 'prettier' }, typescript = { 'prettier' }, javascriptreact = { 'prettier' }, typescriptreact = { 'prettier' }, -- Go go = { 'gofumpt', 'goimports' }, -- Web html = { 'prettier' }, css = { 'prettier' }, json = { 'prettier' }, yaml = { 'prettier' }, markdown = { 'prettier' }, -- Lua lua = { 'stylua' }, -- Shell sh = { 'shfmt' }, }, }, init = function() -- Autoformat toggle commands vim.api.nvim_create_user_command('FormatDisable', function(args) if args.bang then 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, }, }