-- 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"} ) -- 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 = 1, }, signs = true, underline = true, } ) -- 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)" } 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! * autocmd CursorHold lua vim.lsp.buf.document_highlight() autocmd CursorMoved lua vim.lsp.buf.clear_references() augroup END ]], false ) end end require'lspconfig'.elixirls.setup{} -- needed for the LSP to recognize elixir files (alternativly just use elixir-editors/vim-elixir) vim.cmd([[ au BufRead,BufNewFile *.ex,*.exs set filetype=elixir au BufRead,BufNewFile *.eex,*.leex,*.sface set filetype=eelixir au BufRead,BufNewFile mix.lock set filetype=elixir ]]) -- Diagnostic keymaps vim.api.nvim_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', { noremap = true, silent = true }) -- LSP settings local lspconfig = require 'lspconfig' local on_attach = function(_, bufnr) local opts = { noremap = true, silent = true } vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'so', [[lua require('telescope.builtin').lsp_document_symbols()]], opts) vim.cmd [[ command! Format execute 'lua vim.lsp.buf.formatting()' ]] end -- nvim-cmp supports additional completion capabilities local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) -- Enable the following language servers local servers = { 'gopls', 'julials', 'rust_analyzer', 'pyright', 'elixirls' } for _, lsp in ipairs(servers) do lspconfig[lsp].setup { on_attach = on_attach, capabilities = capabilities, } end --require("lspconfig").gopls.setup({ --cmd = { "gopls", "serve" }, --settings = { --gopls = { --analyses = { --unusedparams = true, --}, --staticcheck = true, --}, --}, --}) --require'lspconfig'.julials.setup{} --require'lspconfig'.pyright.setup{} --require("lspconfig").rust_analyzer.setup({ ----cmd = { "rustup", "run", "nightly", "rust-analyzer"}, --[> --settings = { --rust = { --unstable_features = true, --build_on_save = false, --all_features = true, --}, --} ----]] --}) require('rust-tools').setup({ tools = { inlay_hints = { parameter_hints_prefix = "← ", other_hints_prefix = "➜ ", } } }) vim.g.symbols_outline = { auto_close = true, highlight_hovered_item = true, show_guides = true, relative_width = true, width = 25, } --vim.cmd([[ --augroup --autocmd! --autocmd BufWritePre *.go lua vim.lsp.buf.formatting_sync(nil, 100) --autocmd BufWritePre *.rs lua vim.lsp.buf.formatting_sync(nil, 100) --autocmd BufWritePre *.ex,*.exs lua vim.lsp.buf.formatting_sync(nil, 100) --autocmd BufWritePre *.py lua vim.lsp.buf.formatting_sync(nil, 100) --augroup END --]])