diff options
author | Tyler Davis <tydavis@gmail.com> | 2022-01-25 18:27:13 +0000 |
---|---|---|
committer | Tyler Davis <tydavis@gmail.com> | 2022-01-25 18:27:13 +0000 |
commit | 26391c23fafb940de1e13641589e1cbc3ea71969 (patch) | |
tree | 0566890e7068f609c05b8955a7cb1194c4902919 | |
parent | a183750f2111a1a9844c8c8d47e12a1b51e32a75 (diff) | |
download | dotfiles-26391c23fafb940de1e13641589e1cbc3ea71969.tar.gz dotfiles-26391c23fafb940de1e13641589e1cbc3ea71969.zip |
nvim: Working lua config for Go
-rw-r--r-- | .config/nvim/init.lua | 2 | ||||
-rw-r--r-- | .config/nvim/lua/lsp_cfg.lua | 120 | ||||
-rw-r--r-- | .config/nvim/lua/settings.lua | 6 |
3 files changed, 128 insertions, 0 deletions
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 3bd72da..0946631 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -1,4 +1,6 @@ require("plugins") +require("lsp_cfg") require("settings") require("mappings") require("statusline") + diff --git a/.config/nvim/lua/lsp_cfg.lua b/.config/nvim/lua/lsp_cfg.lua new file mode 100644 index 0000000..5fbace3 --- /dev/null +++ b/.config/nvim/lua/lsp_cfg.lua @@ -0,0 +1,120 @@ +-- Statusline via LSP +local lsp_status = require('lsp-status') +lsp_status.config({ +indicator_errors = 'E', +indicator_warnings = 'W', +indicator_info = 'i', +indicator_hint = '?', +indicator_ok = 'Ok', +}) +lsp_status.register_progress() + +-- Main LSP Configs +local nvim_lsp = require('lspconfig') +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.snippetSupport = true + +-- Rust +nvim_lsp.rust_analyzer.setup({ + on_attach = lsp_status.on_attach, + capabilities = lsp_status.capabilities +}) + +-- Go +local 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 + + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts) + buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts) + buf_set_keymap('n', 'ga', '<Cmd>lua vim.lsp.buf.code_action()<CR>', opts) + buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts) + buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts) + buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts) +-- buf_set_keymap('n', '\\wa', '<cmd>lua vim.lsp.buf.ad_workspace_folder()<CR>', opts) +-- buf_set_keymap('n', '\\wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) + buf_set_keymap('n', '\\wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) + buf_set_keymap('n', '\\d', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts) +-- buf_set_keymap('n', '\\rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) + buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts) + buf_set_keymap('n', '\\e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts) + buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts) + buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts) + buf_set_keymap('n', '\\q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts) +-- Original Keybinds + buf_set_keymap('n', '\\b', '<cmd>GoBuild<CR>', opts) + + -- Set some keybinds conditional on server capabilities + if client.resolved_capabilities.document_formatting then + buf_set_keymap("n", "ff", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts) + elseif client.resolved_capabilities.document_range_formatting then + buf_set_keymap("n", "ff", "<cmd>lua vim.lsp.buf.range_formatting()<CR>", opts) + end + + -- Set autocommands conditional on server_capabilities + if client.resolved_capabilities.document_highlight then + vim.api.nvim_exec([[ + hi LspReferenceRead cterm=bold ctermbg=DarkMagenta guibg=LightYellow + hi LspReferenceText cterm=bold ctermbg=DarkMagenta guibg=LightYellow + hi LspReferenceWrite cterm=bold ctermbg=DarkMagenta guibg=LightYellow + 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 + +nvim_lsp.gopls.setup{ + cmd = {'gopls'}, + -- for postfix snippets and analyzers + capabilities = capabilities, + settings = { + gopls = { + experimentalPostfixCompletions = true, + analyses = { + unusedparams = true, + shadow = true, + }, + staticcheck = true, + }, + }, + on_attach = on_attach, +} + + function goimports(timeoutms) + local context = { source = { organizeImports = true } } + vim.validate { context = { context, "t", true } } + + local params = vim.lsp.util.make_range_params() + params.context = context + + -- See the implementation of the textDocument/codeAction callback + -- (lua/vim/lsp/handler.lua) for how to do this properly. + local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, timeout_ms) + if not result or next(result) == nil then return end + local actions = result[1].result + if not actions then return end + local action = actions[1] + + -- textDocument/codeAction can return either Command[] or CodeAction[]. If it + -- is a CodeAction, it can have either an edit, a command or both. Edits + -- should be executed first. + if action.edit or type(action.command) == "table" then + if action.edit then + vim.lsp.util.apply_workspace_edit(action.edit) + end + if type(action.command) == "table" then + vim.lsp.buf.execute_command(action.command) + end + else + vim.lsp.buf.execute_command(action) + end + end + +--vim.lsp.set_log_level("debug")d diff --git a/.config/nvim/lua/settings.lua b/.config/nvim/lua/settings.lua index 01c0fa8..7f67280 100644 --- a/.config/nvim/lua/settings.lua +++ b/.config/nvim/lua/settings.lua @@ -66,3 +66,9 @@ vim.o.directory = '/.vim/tmp/swap//' -- swap files vim.o.wildmenu = true -- on TAB, complete options for system command vim.o.wildignore = 'deps,.svn,CVS,.git,.hg,*.o,*.a,*.class,*.mo,*.la,*.so,*.obj,*.swp,*.jpg,*.png,*.xpm,*.gif,.DS_Store,*.aux,*.out,*.toc' +-- Language Settings +-- Go +vim.cmd [[ +autocmd BufWritePre *.go lua vim.lsp.buf.formatting() +autocmd BufWritePre *.go lua goimports(1000) +]] |