Browse Source

nixpkgs/neovim: add format-on-save

Thomas Dy 3 months ago
parent
commit
9c8b6814d4

+ 0 - 10
.config/nixpkgs/neovim/autocmd.lua

@@ -32,16 +32,6 @@ vim.api.nvim_create_autocmd('BufLeave', {
   command = 'stopinsert',
 })
 
--- strip trailing whitespace
-vim.api.nvim_create_autocmd('BufWritePre', {
-  callback = function(opts)
-    if vim.bo.filetype == 'diff' then
-      return
-    end
-    vim.cmd('%s/\\s\\+$//e')
-  end,
-})
-
 -- filetype specific options
 vim.api.nvim_create_autocmd('FileType', {
   pattern = 'markdown',

+ 0 - 23
.config/nixpkgs/neovim/lsp.lua

@@ -100,29 +100,6 @@ if vim.fn.executable("nil") == 1 then
   });
 end
 
--- format on save
-local group = vim.api.nvim_create_augroup('LspFormatting', { clear = false })
-
-vim.api.nvim_create_autocmd('LspAttach', {
-  callback = function(args)
-    local bufnr = args.buf
-    local client = vim.lsp.get_client_by_id(args.data.client_id)
-
-    if client.server_capabilities.documentFormattingProvider then
-      for key, cmd in pairs(vim.api.nvim_get_autocmds({ group = group, buffer = bufnr })) do
-        vim.api.nvim_del_autocmd(cmd.id)
-      end
-      vim.api.nvim_create_autocmd('BufWritePre', {
-        group = group,
-        buffer = bufnr,
-        callback = function()
-          vim.lsp.buf.format()
-        end,
-      })
-    end
-  end,
-})
-
 -- custom LSP servers
 local configs = require('lspconfig.configs')
 

+ 37 - 0
.config/nixpkgs/neovim/plugins.lua

@@ -268,5 +268,42 @@ cmp.setup({
   },
 })
 
+-- format on save
+local format_on_save = require("format-on-save")
+local formatters = require("format-on-save.formatters")
+local vim_notify = require("format-on-save.error-notifiers.vim-notify")
+
+local js = {
+  formatters.lsp,
+  formatters.if_file_exists({
+    pattern = {
+      "dprint.json",
+      "dprint.jsonc",
+      ".dprint.json",
+      ".dprint.jsonc",
+    },
+    formatter = formatters.shell({ cmd = { "dprint", "fmt", "--stdin", "%" }}),
+  }),
+}
+
+format_on_save.setup({
+  error_notifier = vim_notify,
+
+  exclude_path_patterns = {
+    "/node_modules/",
+  },
+
+  formatter_by_ft = {
+    javascript = js,
+    typescript = js,
+    typescriptreact = js,
+  },
+
+  fallback_formatter = {
+    formatters.remove_trailing_whitespace,
+    formatters.lsp,
+  },
+})
+
 -- typescript-vim compiler options
 vim.g.typescript_compiler_options = '--incremental --noEmit'

+ 4 - 0
.config/nixpkgs/neovim/plugins/sources.json

@@ -105,5 +105,9 @@
     "optional": true,
     "rev": "3ba0c02c378503739f1fdb95cff3ea2aad48db3e",
     "sha256": "0pvb25bdmx4hxs3g7pkdqfjg3qpnr9p5szzbqqwaw3lbdnbyykzy"
+  },
+  "elentok/format-on-save.nvim": {
+    "rev": "b7ea8d72391281d14ea1fa10324606c1684180da",
+    "sha256": "0z1ifp9ycn9fh3ckcdx2vx0pda7rp45gq8wix8hh28ci3djw176b"
   }
 }