From 6302d90f4ac0ee4962161120cba455232c6abcc2 Mon Sep 17 00:00:00 2001 From: long Date: Mon, 1 Nov 2021 13:25:25 -0500 Subject: [PATCH] modified: init.lua modified: lua/ale.lua modified: lua/config.lua renamed: lua/nvim_lsp.lua -> lua/lsp_setup.lua --- init.lua | 1 + lua/ale.lua | 11 +- lua/config.lua | 200 ---------------------------- lua/{nvim_lsp.lua => lsp_setup.lua} | 15 ++- 4 files changed, 17 insertions(+), 210 deletions(-) rename lua/{nvim_lsp.lua => lsp_setup.lua} (94%) diff --git a/init.lua b/init.lua index a88b118..061219d 100644 --- a/init.lua +++ b/init.lua @@ -4,6 +4,7 @@ require "plugins" require "config" require "keybinds" require "save_buffer_position" +require "lsp_setup" --local theme = vim.env.LIGHTMODE == "1" and "onehalflight" or "onedark" --vim.cmd("colorscheme " .. theme) diff --git a/lua/ale.lua b/lua/ale.lua index 5ee1b08..9d74126 100644 --- a/lua/ale.lua +++ b/lua/ale.lua @@ -13,11 +13,12 @@ g.ale_fixers = { lua = {"luafmt"}, css = {"prettier"}, scss = {"prettier"}, - html = {"prettier"}, - javascript = {"prettier"}, - typescript = {"prettier"}, - javascriptreact = {"prettier"}, - typescriptreact = {"prettier"} + html = {"prettier"} + -- using null-ls for formatting js/ts + --javascript = {"prettier"}, + --typescript = {"prettier"}, + --javascriptreact = {"prettier"}, + --typescriptreact = {"prettier"} } g.ale_linters = { diff --git a/lua/config.lua b/lua/config.lua index 218f591..b2ef1c4 100644 --- a/lua/config.lua +++ b/lua/config.lua @@ -57,206 +57,6 @@ require("nvim-treesitter.configs").setup { } } --------------- --- NVIM-CMP -- --------------- - --- Set completeopt to have a better completion experience -opt.completeopt = "menuone,noselect" - -local has_words_before = function() - local line, col = unpack(vim.api.nvim_win_get_cursor(0)) - return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil -end - -local luasnip = require("luasnip") -local cmp = require("cmp") - -cmp.setup { - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end - }, - mapping = { - [""] = cmp.mapping.select_prev_item(), - [""] = cmp.mapping.select_next_item(), - [""] = cmp.mapping.scroll_docs(-4), - [""] = cmp.mapping.scroll_docs(4), - [""] = cmp.mapping.complete(), - [""] = cmp.mapping.close(), - [""] = cmp.mapping.confirm { - --behavior = cmp.ConfirmBehavior.Replace, - select = true - }, - [""] = cmp.mapping( - function(fallback) - if cmp.visible() then - cmp.select_next_item() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - elseif has_words_before() then - cmp.complete() - else - fallback() - end - end, - {"i", "s"} - ), - [""] = cmp.mapping( - function(fallback) - if cmp.visible() then - cmp.select_prev_item() - elseif luasnip.jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, - {"i", "s"} - ) - }, - sources = { - {name = "nvim_lsp"}, - {name = "luasnip"} - } -} - --------------------- --- NVIM-AUTOPAIRS -- --------------------- - ---require("nvim-autopairs").setup {} --- ----- you need setup cmp first put this after cmp.setup() ---require("nvim-autopairs.completion.cmp").setup( --- { --- map_cr = true, -- map on insert mode --- map_complete = true, -- it will auto insert `(` (map_char) after select function or method item --- auto_select = true, -- automatically select the first item --- insert = false, -- use insert confirm behavior instead of replace --- map_char = { --- -- modifies the function or method delimiter by filetypes --- all = "(", --- tex = "{" --- } --- } ---) - ------------------------- --- NVIM-LSP-INSTALLER -- ------------------------- - --- Use an on_attach function to only map the following keys --- after the language server attaches to the current buffer -local common_on_attach = function(client, bufnr) - local function buf_set_keymap(...) - vim.api.nvim_buf_set_keymap(bufnr, ...) - end - local function buf_set_option(...) - vim.api.nvim_buf_set_option(bufnr, ...) - end - - client.resolved_capabilities.document_formatting = false - -- Enable completion triggered by - buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") - - -- Mappings. - local opts = {noremap = true, silent = true} - - -- See `:help vim.lsp.*` for documentation on any of the below functions - --buf_set_keymap("n", "", "lua vim.lsp.buf.signature_help()", opts) - buf_set_keymap("n", "D", "lua vim.lsp.buf.type_definition()", opts) - buf_set_keymap("n", "ca", "lua vim.lsp.buf.code_action()", opts) - buf_set_keymap("n", "e", "lua vim.lsp.diagnostic.show_line_diagnostics()", opts) - buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) - buf_set_keymap("n", "q", "lua vim.lsp.diagnostic.set_loclist()", opts) - buf_set_keymap("n", "rn", "lua vim.lsp.buf.rename()", opts) - buf_set_keymap("n", "wa", "lua vim.lsp.buf.add_workspace_folder()", opts) - buf_set_keymap("n", "wl", "lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))", opts) - buf_set_keymap("n", "wr", "lua vim.lsp.buf.remove_workspace_folder()", opts) - buf_set_keymap("n", "K", "lua vim.lsp.buf.hover()", opts) - buf_set_keymap("n", "", "lua vim.lsp.diagnostic.goto_prev({wrap = false})", opts) - buf_set_keymap("n", "", "lua vim.lsp.diagnostic.goto_next({wrap = false})", opts) - buf_set_keymap("n", "gD", "lua vim.lsp.buf.declaration()", opts) - buf_set_keymap("n", "gd", "lua vim.lsp.buf.definition()", opts) - buf_set_keymap("n", "gi", "lua vim.lsp.buf.implementation()", opts) - buf_set_keymap("n", "gr", "lua vim.lsp.buf.references()", opts) -end - --- enable null-ls integration (optional) -require("null-ls").config {} -require("lspconfig")["null-ls"].setup {} - -require("nvim-lsp-installer").on_server_ready( - function(server) - --Enable (broadcasting) snippet capability for completion - local capabilities = vim.lsp.protocol.make_client_capabilities() - capabilities.textDocument.completion.completionItem.snippetSupport = true - - local opts = { - on_attach = common_on_attach, - flags = { - debounce_text_changes = 150 - }, - capabilities = capabilities, - settings = { - format = {enable = false} - } - } - - local vscode_servers = {html = "html", jsonls = "json", cssls = "css"} - local lang = vscode_servers[server.name] - - if lang ~= nil then - opts.cmd = {("vscode-" .. lang .. "-language-server"), "--stdio"} - end - - if server.name == "tsserver" then - opts.on_attach = function(client, bufnr) - local ts_utils = require("nvim-lsp-ts-utils") - - ts_utils.setup {enable_import_on_completion = true} - - -- required to fix code action ranges and filter diagnostics - ts_utils.setup_client(client) - - -- no default maps, so you may want to define some here - local o = {silent = true} - vim.api.nvim_buf_set_keymap(bufnr, "n", "gs", ":TSLspOrganize", o) - vim.api.nvim_buf_set_keymap(bufnr, "n", "rN", ":TSLspRenameFile", o) - vim.api.nvim_buf_set_keymap(bufnr, "n", "gI", ":TSLspImportAll", o) - - common_on_attach(client, bufnr) - end - end - - server:setup(opts) - vim.cmd [[do User LspAttachBuffers]] - end -) - -local lsp_installer_servers = require("nvim-lsp-installer.servers") -local auto_servers = { - "pylsp", - "sumneko_lua", - "tsserver", - "bashls", - "vimls", - "rust_analyzer", - "html", - "cssls", - "jsonls" - --"eslintls" -} - -for _, s in ipairs(auto_servers) do - local ok, server = lsp_installer_servers.get_server(s) - if ok and not server:is_installed() then - server:install() - end -end - ------------- -- LUALINE -- ------------- diff --git a/lua/nvim_lsp.lua b/lua/lsp_setup.lua similarity index 94% rename from lua/nvim_lsp.lua rename to lua/lsp_setup.lua index b098eac..84ed948 100644 --- a/lua/nvim_lsp.lua +++ b/lua/lsp_setup.lua @@ -101,6 +101,7 @@ local common_on_attach = function(client, bufnr) end client.resolved_capabilities.document_formatting = false + client.resolved_capabilities.document_range_formatting = false -- Enable completion triggered by buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") @@ -129,14 +130,18 @@ end -- enable null-ls integration (optional) require("null-ls").config {} -require("lspconfig")["null-ls"].setup {} +require("lspconfig")["null-ls"].setup {on_attach = common_on_attach} local tsserver_on_attach = function(client, bufnr) local ts_utils = require("nvim-lsp-ts-utils") - - ts_utils.setup {enable_import_on_completion = true} - - -- required to fix code action ranges and filter diagnostics + ts_utils.setup { + eslint_bin = "eslint_d", + eslint_enable_diagnostics = true, + eslint_enable_code_actions = true, + enable_formatting = true, + enable_import_on_completion = true, + formatter = "prettier" + } ts_utils.setup_client(client) -- no default maps, so you may want to define some here