format.lua

Branches > main > d3246dc > files / nvim / lua / format.lua

local ac = vim.api.nvim_create_autocmd
local ag = vim.api.nvim_create_augroup

--- Format with the LSP before writing (clojure-lsp uses cljfmt under the hood)
--- Disable with `:let b:format_on_write = v:false` (or g: for everything)
local function enabled(bufnr)
  local b = vim.b[bufnr].format_on_write
  if b ~= nil then return b end
  return vim.g.format_on_write ~= false
end

local format_group = ag("Format", {clear = true})
ac("BufWritePre",
   {callback = function(args)
      if not enabled(args.buf) then return end
      if #vim.lsp.get_clients({bufnr = args.buf, method = "textDocument/formatting"}) == 0 then return end
      vim.lsp.buf.format({bufnr = args.buf, timeout_ms = 2000})
    end,
    group = format_group})