diff --git a/lua/cosmic/config/config.lua b/lua/cosmic/config/config.lua index fb138e2..85a4443 100644 --- a/lua/cosmic/config/config.lua +++ b/lua/cosmic/config/config.lua @@ -4,8 +4,12 @@ local config = {} servers = { eslint = false, efm = { + format = false -- disable formatting all together disable_formatters = {'eslint', 'prettier', 'stylua'} - } + }, + tsserver = { + format = false, + } } } ]] diff --git a/lua/cosmic/config/init.lua b/lua/cosmic/config/init.lua index f4d4a3b..ce23f57 100644 --- a/lua/cosmic/config/init.lua +++ b/lua/cosmic/config/init.lua @@ -1,15 +1,28 @@ -local config = require('cosmic.config.config') +local user_config = require('cosmic.config.config') +-- these settings will be merged with any settings definined in config.lua local default_config = { lsp = { format_on_save = false, servers = { - eslint = true, + eslint = false, efm = { - disable_formatters = { 'eslint' }, + format = true, + disable_formatters = {}, -- e.g. 'eslint', 'prettier', 'stylua' }, + tsserver = { + format = false, + } }, }, } -return vim.tbl_deep_extend('force', default_config, config) +local config = vim.tbl_deep_extend('force', default_config, user_config) + +-- default servers that can be formatted +local formatting_servers = { 'efm', 'eslint', 'tsserver', 'sumneko_lua', 'rust_analyzer', 'gopls', 'pyright' } +function default_config.lsp.can_client_format(client_name) + return (config.lsp.servers[client_name] and config.lsp.servers[client_name].format and vim.tbl_contains(formatting_servers, client_name)) +end + +return config diff --git a/lua/cosmic/lsp/providers/defaults.lua b/lua/cosmic/lsp/providers/defaults.lua index b6fece3..d04fdbb 100644 --- a/lua/cosmic/lsp/providers/defaults.lua +++ b/lua/cosmic/lsp/providers/defaults.lua @@ -2,6 +2,7 @@ local config = require('cosmic.config') 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, ...) @@ -10,10 +11,10 @@ function M.on_attach(client, bufnr) -- Enable completion triggered by buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') - local formatting_servers = { 'efm', 'eslint' } - if vim.tbl_contains(formatting_servers, client.name) then + if config.lsp.can_client_format(client.name) then client.resolved_capabilities.document_formatting = true client.resolved_capabilities.document_range_formatting = true + -- auto format on save if config.lsp.format_on_save and not auto_format_lock then auto_format_lock = true -- just run autocommand once vim.cmd([[ diff --git a/lua/cosmic/lsp/providers/efm.lua b/lua/cosmic/lsp/providers/efm.lua index 428f1c4..0990bce 100644 --- a/lua/cosmic/lsp/providers/efm.lua +++ b/lua/cosmic/lsp/providers/efm.lua @@ -23,17 +23,17 @@ formatters.prettier = { } local filetype_defaults = { - css = {}, - html = {}, - lua = {}, - javascript = {}, - javascriptreact = {}, - json = {}, - markdown = {}, - scss = {}, - typescript = {}, - typescriptreact = {}, - yaml = {}, + 'css', + 'html', + 'lua', + 'javascript', + 'javascriptreact', + 'json', + 'markdown', + 'scss', + 'typescript', + 'typescriptreact', + 'yaml', } formatters.defaults = { @@ -61,6 +61,7 @@ formatters.defaults = { local languages = {} for formatter, filetypes in pairs(formatters.defaults) do + -- disable specific formatters if not vim.tbl_contains(config.lsp.servers.efm.disable_formatters, formatter) then for _, filetype in pairs(filetypes) do languages[filetype] = languages[filetype] or {} @@ -69,9 +70,6 @@ for formatter, filetypes in pairs(formatters.defaults) do end end --- print(vim.inspect(languages)) --- print(vim.inspect(languages['javascript']['prettier'])) - return { init_options = { documentFormatting = true, codeAction = true }, root_dir = function(fname) @@ -81,6 +79,6 @@ return { or util.root_pattern('.eslintrc.js')(fname) or util.root_pattern('tsconfig.json')(fname) end, - filetypes = vim.tbl_keys(filetype_defaults), + filetypes = filetype_defaults, settings = { languages = languages }, }