diff options
author | Gustaf Rydholm <gustaf.rydholm@gmail.com> | 2021-07-07 01:05:06 +0200 |
---|---|---|
committer | Gustaf Rydholm <gustaf.rydholm@gmail.com> | 2021-07-07 01:05:06 +0200 |
commit | 0111b31cb0008f4fcc55ddc373e63f124652b156 (patch) | |
tree | 075490fb19c4838fc58129da9f902a3370f6029e /.config/nvim/lua/cfg/lsp | |
parent | 6fcc69113bd7cc7295ef9dc068da80d043cbb8bb (diff) |
Updated config based on Chris LunarVim release
Diffstat (limited to '.config/nvim/lua/cfg/lsp')
-rw-r--r-- | .config/nvim/lua/cfg/lsp/emmet-ls.lua | 23 | ||||
-rw-r--r-- | .config/nvim/lua/cfg/lsp/init.lua | 174 | ||||
-rw-r--r-- | .config/nvim/lua/cfg/lsp/ts-fmt-lint.lua | 37 |
3 files changed, 234 insertions, 0 deletions
diff --git a/.config/nvim/lua/cfg/lsp/emmet-ls.lua b/.config/nvim/lua/cfg/lsp/emmet-ls.lua new file mode 100644 index 0000000..fcb7f62 --- /dev/null +++ b/.config/nvim/lua/cfg/lsp/emmet-ls.lua @@ -0,0 +1,23 @@ +-- if not package.loaded['lspconfig'] then +-- return +-- end + +local nvim_lsp = require'lspconfig' +local configs = require'lspconfig/configs' +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.snippetSupport = true + +configs.emmet_ls = { + default_config = { + cmd = {'emmet-ls', '--stdio'}; + filetypes = {'html', 'css', 'javascript', 'typescript'}; + root_dir = function() + return vim.loop.cwd() + end; + settings = {}; + }; +} + +nvim_lsp.emmet_ls.setup{ + -- on_attach = on_attach; +} diff --git a/.config/nvim/lua/cfg/lsp/init.lua b/.config/nvim/lua/cfg/lsp/init.lua new file mode 100644 index 0000000..547f9e7 --- /dev/null +++ b/.config/nvim/lua/cfg/lsp/init.lua @@ -0,0 +1,174 @@ +-- TODO figure out why this don't work +vim.fn.sign_define( + "LspDiagnosticsSignError", + {texthl = "LspDiagnosticsSignError", text = "", numhl = "LspDiagnosticsSignError"} +) +vim.fn.sign_define( + "LspDiagnosticsSignWarning", + {texthl = "LspDiagnosticsSignWarning", text = "", numhl = "LspDiagnosticsSignWarning"} +) +vim.fn.sign_define( + "LspDiagnosticsSignHint", + {texthl = "LspDiagnosticsSignHint", text = "", numhl = "LspDiagnosticsSignHint"} +) +vim.fn.sign_define( + "LspDiagnosticsSignInformation", + {texthl = "LspDiagnosticsSignInformation", text = "", numhl = "LspDiagnosticsSignInformation"} +) + +vim.cmd("nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>") +vim.cmd("nnoremap <silent> gD <cmd>lua vim.lsp.buf.declaration()<CR>") +vim.cmd("nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR>") +vim.cmd("nnoremap <silent> gi <cmd>lua vim.lsp.buf.implementation()<CR>") +vim.cmd("nnoremap <silent> K :lua vim.lsp.buf.hover()<CR>") +-- vim.cmd('nnoremap <silent> <C-k> <cmd>lua vim.lsp.buf.signature_help()<CR>') +vim.cmd("nnoremap <silent> <C-p> :lua vim.lsp.diagnostic.goto_prev({popup_opts = {border = O.lsp.popup_border}})<CR>") +vim.cmd("nnoremap <silent> <C-n> :lua vim.lsp.diagnostic.goto_next({popup_opts = {border = O.lsp.popup_border}})<CR>") +-- scroll down hover doc or scroll in definition preview +-- scroll up hover doc +vim.cmd('command! -nargs=0 LspVirtualTextToggle lua require("lsp/virtual_text").toggle()') + +-- Set Default Prefix. +-- Note: You can set a prefix per lsp server in the lv-globals.lua file +vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with( + vim.lsp.diagnostic.on_publish_diagnostics, { + virtual_text = { + prefix = "", + spacing = 0, + }, + signs = true, + underline = true, + } +) + +vim.lsp.handlers["textDocument/hover"] = vim.lsp.with( + vim.lsp.handlers.hover, { + border = O.lsp.popup_border + } +) + +vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with( + vim.lsp.handlers.signature_help, { + border = O.lsp.popup_border + } +) + +-- symbols for autocomplete +vim.lsp.protocol.CompletionItemKind = { + " (Text) ", + " (Method)", + " (Function)", + " (Constructor)", + " ﴲ (Field)", + "[] (Variable)", + " (Class)", + " ﰮ (Interface)", + " (Module)", + " 襁 (Property)", + " (Unit)", + " (Value)", + " 練 (Enum)", + " (Keyword)", + " (Snippet)", + " (Color)", + " (File)", + " (Reference)", + " (Folder)", + " (EnumMember)", + " ﲀ (Constant)", + " ﳤ (Struct)", + " (Event)", + " (Operator)", + " (TypeParameter)" +} + +--[[ " autoformat +autocmd BufWritePre *.js lua vim.lsp.buf.formatting_sync(nil, 100) +autocmd BufWritePre *.jsx lua vim.lsp.buf.formatting_sync(nil, 100) +autocmd BufWritePre *.lua lua vim.lsp.buf.formatting_sync(nil, 100) ]] +-- Java +-- autocmd FileType java nnoremap ca <Cmd>lua require('jdtls').code_action()<CR> + +local function documentHighlight(client, bufnr) + -- Set autocommands conditional on server_capabilities + if client.resolved_capabilities.document_highlight then + vim.api.nvim_exec( + [[ + hi LspReferenceRead cterm=bold ctermbg=red guibg=#464646 + hi LspReferenceText cterm=bold ctermbg=red guibg=#464646 + hi LspReferenceWrite cterm=bold ctermbg=red guibg=#464646 + augroup lsp_document_highlight + autocmd! * <buffer> + autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight() + autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references() + augroup END + ]], + false + ) + end +end +local lsp_config = {} + +if O.document_highlight then + function lsp_config.common_on_attach(client, bufnr) + documentHighlight(client, bufnr) + end +end + +function lsp_config.tsserver_on_attach(client, bufnr) + -- lsp_config.common_on_attach(client, bufnr) + client.resolved_capabilities.document_formatting = false + + local ts_utils = require("nvim-lsp-ts-utils") + + -- defaults + ts_utils.setup { + debug = false, + disable_commands = false, + enable_import_on_completion = false, + import_all_timeout = 5000, -- ms + + -- eslint + eslint_enable_code_actions = true, + eslint_enable_disable_comments = true, + eslint_bin = O.lang.tsserver.linter, + eslint_config_fallback = nil, + eslint_enable_diagnostics = true, + + -- formatting + enable_formatting = O.lang.tsserver.autoformat, + formatter = O.lang.tsserver.formatter, + formatter_config_fallback = nil, + + -- parentheses completion + complete_parens = false, + signature_help_in_parens = false, + + -- update imports on file move + update_imports_on_move = false, + require_confirmation_on_move = false, + watch_dir = nil, + } + + -- required to fix code action ranges + ts_utils.setup_client(client) + + -- TODO: keymap these? + -- vim.api.nvim_buf_set_keymap(bufnr, "n", "gs", ":TSLspOrganize<CR>", {silent = true}) + -- vim.api.nvim_buf_set_keymap(bufnr, "n", "qq", ":TSLspFixCurrent<CR>", {silent = true}) + -- vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", ":TSLspRenameFile<CR>", {silent = true}) + -- vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", ":TSLspImportAll<CR>", {silent = true}) +end + + +require('cfg.utils').define_augroups({ + _general_lsp = { + {'FileType', 'lspinfo', 'nnoremap <silent> <buffer> q :q<CR>'}, + } +}) + +-- Use a loop to conveniently both setup defined servers +-- and map buffer local keybindings when the language server attaches +-- local servers = {"pyright", "tsserver"} +-- for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup {on_attach = on_attach} end +return lsp_config diff --git a/.config/nvim/lua/cfg/lsp/ts-fmt-lint.lua b/.config/nvim/lua/cfg/lsp/ts-fmt-lint.lua new file mode 100644 index 0000000..36d4ca8 --- /dev/null +++ b/.config/nvim/lua/cfg/lsp/ts-fmt-lint.lua @@ -0,0 +1,37 @@ +-- Example configuations here: https://github.com/mattn/efm-langserver +-- You can look for project scope Prettier and Eslint with e.g. vim.fn.glob("node_modules/.bin/prettier") etc. If it is not found revert to global Prettier where needed. +local M = {} + +M.setup = function() + local tsserver_args = {} + + local prettier = { + formatCommand = "prettier --stdin-filepath ${INPUT}", + formatStdin = true + } + + if vim.fn.glob("node_modules/.bin/prettier") ~= "" then + prettier = { + formatCommand = "./node_modules/.bin/prettier --stdin-filepath ${INPUT}", + formatStdin = true + } + end + + require"lspconfig".efm.setup { + -- init_options = {initializationOptions}, + cmd = {DATA_PATH .. "/lspinstall/efm/efm-langserver"}, + init_options = {documentFormatting = true, codeAction = false}, + filetypes = {"html", "css", "yaml", "vue", "javascript", "javascriptreact", "typescript", "typescriptreact"}, + settings = { + rootMarkers = {".git/", "package.json"}, + languages = { + html = {prettier}, + css = {prettier}, + json = {prettier}, + yaml = {prettier} + } + } + } +end + +return M |