From b968af5b9c4f7e8ca7d8d0abd7c3576e140a341e Mon Sep 17 00:00:00 2001 From: Matthew Leong Date: Thu, 26 May 2022 15:07:08 -0700 Subject: [PATCH] fix(LSP): respect user configs for formatting --- lua/cosmic/lsp/providers/defaults.lua | 53 ++++++++++++++------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/lua/cosmic/lsp/providers/defaults.lua b/lua/cosmic/lsp/providers/defaults.lua index 8bbbeee..1076e51 100644 --- a/lua/cosmic/lsp/providers/defaults.lua +++ b/lua/cosmic/lsp/providers/defaults.lua @@ -13,34 +13,34 @@ function M.on_attach(client, bufnr) -- Enable completion triggered by buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') - if config.lsp.can_client_format(client.name) then - client.server_capabilities.documentFormatting = true - client.server_capabilities.documentRangeFormatting = true - -- check user config to see if we can format on save - if config.lsp.format_on_save and not auto_format_lock then - auto_format_lock = true -- just run autocommand once - 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 = '*' + if config.lsp.format_on_save and not auto_format_lock then + auto_format_lock = true -- just run autocommand once + 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 - - vim.api.nvim_create_autocmd(string.format('BufWritePre %s', format_filetypes), { - callback = function() - vim.lsp.buf.format({ - timeout_ms = config.lsp.format_timeout, - }) - end, - group = group, - nested = true, - }) + else + format_filetypes = '*' end - else - client.server_capabilities.documentFormatting = false - client.server_capabilities.documentRangeFormatting = false + + 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) @@ -58,6 +58,7 @@ M.root_dir = function(fname) or util.root_pattern('tsconfig.base.json')(fname) or util.root_pattern('package.json')(fname) or util.root_pattern('.eslintrc.js')(fname) + or util.root_pattern('.eslintrc.json')(fname) or util.root_pattern('tsconfig.json')(fname) end