diff --git a/lua/cosmic/config/examples/config.lua b/lua/cosmic/config/examples/config.lua index 4db597c..3d6d22f 100644 --- a/lua/cosmic/config/examples/config.lua +++ b/lua/cosmic/config/examples/config.lua @@ -1,6 +1,8 @@ -- Override Cosmic configuration options --[[ +-- You can require null-ls if needed +-- local null_ls = require('null-ls') local config = {} @@ -39,7 +41,7 @@ config.lsp = { rust_analyzer = true, tsserver = { - -- disable formatting + -- disable formatting (defaults to true) format = false, -- OR add/override server options opts = { @@ -50,12 +52,12 @@ config.lsp = { } }, - efm = { - -- specifc to efm, e.g. 'eslint', 'prettier', 'stylua' - disable_formatters = {'eslint'}, - }, - + -- See Cosmic defaults lsp/providers/null_ls.lua + null_ls = {} }, + + -- See Cosmic defaults lsp/providers/tsserver.lua + ts_utils = {} } return config diff --git a/lua/cosmic/config/init.lua b/lua/cosmic/config/init.lua index 8c7e704..d18b174 100644 --- a/lua/cosmic/config/init.lua +++ b/lua/cosmic/config/init.lua @@ -22,17 +22,13 @@ local default_config = { }, ]] - -- enable, but disable formatting - eslint = { - format = false, - }, - efm = { - format = true, - disable_formatters = { 'eslint' }, -- e.g. 'eslint', 'prettier', 'stylua' + sumneko_lua = { + format = false, -- disable formatting all together }, tsserver = { format = false, -- disable formatting all together }, + null_ls = {}, }, }, } @@ -48,7 +44,7 @@ function config.lsp.can_client_format(client_name) return (config.lsp.servers[client_name].format == true) end - return false + return true end return config diff --git a/lua/cosmic/lsp/mappings.lua b/lua/cosmic/lsp/mappings.lua index 1192615..f0825d4 100644 --- a/lua/cosmic/lsp/mappings.lua +++ b/lua/cosmic/lsp/mappings.lua @@ -19,6 +19,7 @@ map('n', 'K', 'lua vim.lsp.buf.hover()') map('n', 'ga', 'lua require("telescope.builtin").lsp_code_actions()') map('v', 'ga', 'lua require("telescope.builtin").lsp_range_code_actions()') map('n', 'gf', 'lua vim.lsp.buf.formatting()') +map('v', 'gf', 'lua vim.lsp.buf.range_formatting()') map('n', '', 'lua require("lsp_signature").signature()') -- lsp workspace diff --git a/lua/cosmic/lsp/providers/defaults.lua b/lua/cosmic/lsp/providers/defaults.lua index 2e5dec8..38149dc 100644 --- a/lua/cosmic/lsp/providers/defaults.lua +++ b/lua/cosmic/lsp/providers/defaults.lua @@ -49,7 +49,15 @@ M.flags = { debounce_text_changes = 150, } -M.capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()) +local function get_capabilities() + local ok, cmp_nvim_lsp = pcall(require, 'cmp_nvim_lsp') + if not ok then + return {} + end + return cmp_nvim_lsp.update_capabilities(vim.lsp.protocol.make_client_capabilities()) +end + +M.capabilities = get_capabilities() M.root_dir = function(fname) local util = require('lspconfig').util diff --git a/lua/cosmic/lsp/providers/efm.lua b/lua/cosmic/lsp/providers/efm.lua deleted file mode 100644 index 0990bce..0000000 --- a/lua/cosmic/lsp/providers/efm.lua +++ /dev/null @@ -1,84 +0,0 @@ -local util = require('lspconfig').util -local config = require('cosmic.config') -local formatters = {} - -formatters.stylua = { - formatCommand = 'stylua -s --quote-style AutoPreferSingle --indent-type Spaces --indent-width 2 -', - formatStdin = true, -} - -formatters.eslint = { - lintCommand = 'eslint_d -f unix --stdin --stdin-filename ${INPUT}', - lintStdin = true, - lintFormats = { '%f:%l:%c: %m' }, - lintIgnoreExitCode = true, - formatCommand = 'eslint_d --stdin --fix-to-stdout --stdin-filename=${INPUT}', - formatStdin = true, -} - -formatters.prettier = { - -- formatCommand = 'prettier --stdin-filepath ${INPUT}', - formatCommand = 'prettierd "${INPUT}"', - formatStdin = true, -} - -local filetype_defaults = { - 'css', - 'html', - 'lua', - 'javascript', - 'javascriptreact', - 'json', - 'markdown', - 'scss', - 'typescript', - 'typescriptreact', - 'yaml', -} - -formatters.defaults = { - eslint = { - 'javascript', - 'javascriptreact', - 'json', - 'typescriptreact', - 'typescript', - }, - prettier = { - 'css', - 'html', - 'javascript', - 'javascriptreact', - 'json', - 'typescriptreact', - 'typescript', - 'markdown', - 'scss', - 'yaml', - }, - stylua = { 'lua' }, -} - -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 {} - table.insert(languages[filetype], formatters[formatter]) - end - end -end - -return { - init_options = { documentFormatting = true, codeAction = true }, - root_dir = function(fname) - return util.root_pattern('.git')(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('tsconfig.json')(fname) - end, - filetypes = filetype_defaults, - settings = { languages = languages }, -} diff --git a/lua/cosmic/lsp/providers/eslint.lua b/lua/cosmic/lsp/providers/eslint.lua deleted file mode 100644 index 8458f99..0000000 --- a/lua/cosmic/lsp/providers/eslint.lua +++ /dev/null @@ -1,15 +0,0 @@ -local util = require('lspconfig').util - -return { - settings = { - packageManager = 'npm', - format = true, - }, - root_dir = function(fname) - return util.root_pattern('.git')(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('tsconfig.json')(fname) - end, -} diff --git a/lua/cosmic/lsp/providers/init.lua b/lua/cosmic/lsp/providers/init.lua index b6597e7..0b1c0c2 100644 --- a/lua/cosmic/lsp/providers/init.lua +++ b/lua/cosmic/lsp/providers/init.lua @@ -19,8 +19,8 @@ lsp_installer.settings({ -- initial default serverse local requested_servers = { - 'eslint', - 'efm', + -- 'eslint', + -- 'efm', 'tsserver', 'sumneko_lua', 'jsonls', @@ -63,14 +63,10 @@ lsp_installer.on_server_ready(function(server) -- set up default cosmic options if server.name == 'tsserver' then opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.tsserver')) - elseif server.name == 'efm' then - opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.efm')) elseif server.name == 'jsonls' then opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.jsonls')) elseif server.name == 'sumneko_lua' then opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.lua')) - elseif server.name == 'eslint' then - opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.eslint')) end -- override options if user definds them diff --git a/lua/cosmic/lsp/providers/null_ls.lua b/lua/cosmic/lsp/providers/null_ls.lua new file mode 100644 index 0000000..cf444f1 --- /dev/null +++ b/lua/cosmic/lsp/providers/null_ls.lua @@ -0,0 +1,26 @@ +local config = require('cosmic.config') +local on_attach = require('cosmic.lsp.providers.defaults').on_attach +local null_ls = require('null-ls') + +null_ls.config(vim.tbl_deep_extend('force', { + -- you must define at least one source for the plugin to work + sources = { + null_ls.builtins.formatting.stylua.with({ + args = { + '-s', + '--quote-style', + 'AutoPreferSingle', + '--indent-type', + 'Spaces', + '--indent-width', + '2', + '-', + }, + }), + null_ls.builtins.code_actions.gitsigns, + }, +}, config.lsp.servers.null_ls)) + +require('lspconfig')['null-ls'].setup({ + on_attach = on_attach, +}) diff --git a/lua/cosmic/lsp/providers/tsserver.lua b/lua/cosmic/lsp/providers/tsserver.lua index bb736f2..5572bd2 100644 --- a/lua/cosmic/lsp/providers/tsserver.lua +++ b/lua/cosmic/lsp/providers/tsserver.lua @@ -1,4 +1,5 @@ local default_on_attach = require('cosmic.lsp.providers.defaults').on_attach +local config = require('cosmic.config') local M = {} function M.on_attach(client, bufnr) @@ -7,7 +8,7 @@ function M.on_attach(client, bufnr) local ts_utils = require('nvim-lsp-ts-utils') -- defaults - ts_utils.setup({ + ts_utils.setup(vim.tbl_deep_extend('force', { debug = false, disable_commands = false, enable_import_on_completion = true, @@ -24,16 +25,16 @@ function M.on_attach(client, bufnr) import_all_select_source = false, -- eslint - eslint_enable_code_actions = false, - eslint_enable_disable_comments = false, + eslint_enable_code_actions = true, + eslint_enable_disable_comments = true, eslint_bin = 'eslint_d', - eslint_enable_diagnostics = false, - eslint_opts = {}, + eslint_enable_diagnostics = true, + -- eslint_opts = {}, -- formatting - enable_formatting = false, + enable_formatting = true, formatter = 'prettierd', - formatter_opts = {}, + -- formatter_opts = {}, -- update imports on file move update_imports_on_move = true, @@ -43,7 +44,7 @@ function M.on_attach(client, bufnr) -- filter diagnostics filter_out_diagnostics_by_severity = {}, filter_out_diagnostics_by_code = {}, - }) + }, config.lsp.ts_utils or {})) -- required to fix code action ranges and filter diagnostics ts_utils.setup_client(client) diff --git a/lua/cosmic/pluginsInit.lua b/lua/cosmic/pluginsInit.lua index 639bd54..24e64cc 100644 --- a/lua/cosmic/pluginsInit.lua +++ b/lua/cosmic/pluginsInit.lua @@ -115,6 +115,14 @@ return packer.startup(function() }, }) + use({ + 'jose-elias-alvarez/null-ls.nvim', + config = function() + require('cosmic.lsp.providers.null_ls') + end, + requires = { 'nvim-lua/plenary.nvim', 'neovim/nvim-lspconfig' }, + }) + use({ 'L3MON4D3/LuaSnip', config = function()