diff --git a/.config/nvim/lua/plugins/formatter.lua b/.config/nvim/lua/plugins/formatter.lua new file mode 100644 --- /dev/null +++ b/.config/nvim/lua/plugins/formatter.lua @@ -0,0 +1,48 @@ +return { + { + "stevearc/conform.nvim", + opts = { + formatters_by_ft = { + lua = { "stylua" }, + mail = { "pandoc_markdown" }, + markdown = { "pandoc_markdown" }, + perl = { "perltidy" }, + ruby = { { "standardrb", "rubocop" } }, + sh = { "shfmt" }, + sql = { "pg_format" }, + -- LSP-handled: + -- elixir = { "mix" }, + -- go = { "goimports", "gofumpt" }, + }, + formatters = { + pandoc_markdown = { + command = "pandoc", + args = { "-f", "markdown", "-t", "markdown" }, + stdin = true, + }, + shfmt = { + prepend_args = function(_, ctx) + return { "-i", vim.bo[ctx.buf].shiftwidth } + end, + }, + perltidy = { + prepend_args = function(_, ctx) + return { "-i", vim.bo[ctx.buf].shiftwidth } + end, + }, + }, + format_on_save = function(bufnr) + local autoformat_filetypes = { "elixir", "go" } + + if not vim.tbl_contains(autoformat_filetypes, vim.bo[bufnr].filetype) then + return + end + + return { + timeout_ms = 500, + lsp_fallback = true, + } + end + }, + }, +}