From 0cc8369ac1e2261e33eda767eef0fddb51b42724 Mon Sep 17 00:00:00 2001 From: Matthew Leong Date: Fri, 27 May 2022 12:51:54 -0700 Subject: [PATCH] fix: formatting autocmd queued only once --- lua/cosmic/lsp/commands.lua | 30 +++++++++++++++++++++++ lua/cosmic/lsp/init.lua | 1 + lua/cosmic/lsp/providers/defaults.lua | 34 --------------------------- 3 files changed, 31 insertions(+), 34 deletions(-) create mode 100644 lua/cosmic/lsp/commands.lua diff --git a/lua/cosmic/lsp/commands.lua b/lua/cosmic/lsp/commands.lua new file mode 100644 index 0000000..5bef996 --- /dev/null +++ b/lua/cosmic/lsp/commands.lua @@ -0,0 +1,30 @@ +local augroup_name = 'CosmicNvimLspFormat' +local group = vim.api.nvim_create_augroup(augroup_name, { clear = true }) +local config = require('cosmic.core.user') + +if config.lsp.format_on_save then + local format_filetypes = '' + if vim.tbl_islist(config.lsp.format_on_save) then + for _, ft in pairs(config.lsp.format_on_save) do + format_filetypes = format_filetypes .. '*' .. ft + end + else + format_filetypes = '*' + end + + vim.api.nvim_create_autocmd(string.format('BufWritePre %s', format_filetypes), { + callback = function() + vim.lsp.buf.format({ + timeout_ms = config.lsp.format_timeout, + -- check user config to see if we can format on save + filter = function(client) + if config.lsp.can_client_format(client.name) then + return client.name + end + end, + }) + end, + group = group, + nested = true, + }) +end diff --git a/lua/cosmic/lsp/init.lua b/lua/cosmic/lsp/init.lua index 27e87e1..f11e0ac 100644 --- a/lua/cosmic/lsp/init.lua +++ b/lua/cosmic/lsp/init.lua @@ -3,6 +3,7 @@ local config = require('cosmic.core.user') -- set up lsp servers require('cosmic.lsp.providers') require('cosmic.lsp.diagnostics') +require('cosmic.lsp.commands') vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, { border = config.border, diff --git a/lua/cosmic/lsp/providers/defaults.lua b/lua/cosmic/lsp/providers/defaults.lua index 9ca76d0..c6ab654 100644 --- a/lua/cosmic/lsp/providers/defaults.lua +++ b/lua/cosmic/lsp/providers/defaults.lua @@ -1,10 +1,5 @@ -local config = require('cosmic.core.user') -local augroup_name = 'CosmicNvimLspFormat' -local group = vim.api.nvim_create_augroup(augroup_name, { clear = true }) local M = {} -local auto_format_lock = false - function M.on_attach(client, bufnr) local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) @@ -13,35 +8,6 @@ function M.on_attach(client, bufnr) -- Enable completion triggered by buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') - if config.lsp.format_on_save then - local format_filetypes = '' - if vim.tbl_islist(config.lsp.format_on_save) then - for _, ft in pairs(config.lsp.format_on_save) do - format_filetypes = format_filetypes .. '*' .. ft - end - else - format_filetypes = '*' - end - - vim.api.nvim_create_autocmd(string.format('BufWritePre %s', format_filetypes), { - callback = function() - vim.lsp.buf.format({ - timeout_ms = config.lsp.format_timeout, - -- check user config to see if we can format on save - filter = function(clients) - return vim.tbl_filter(function(ct) - if config.lsp.can_client_format(ct.name) then - return ct.name - end - end, clients) - end, - }) - end, - group = group, - nested = true, - }) - end - require('cosmic.lsp.mappings').init(client, bufnr) end