summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTyler Davis <tydavis@gmail.com>2022-01-25 18:27:13 +0000
committerTyler Davis <tydavis@gmail.com>2022-01-25 18:27:13 +0000
commit26391c23fafb940de1e13641589e1cbc3ea71969 (patch)
tree0566890e7068f609c05b8955a7cb1194c4902919
parenta183750f2111a1a9844c8c8d47e12a1b51e32a75 (diff)
downloaddotfiles-26391c23fafb940de1e13641589e1cbc3ea71969.tar.gz
dotfiles-26391c23fafb940de1e13641589e1cbc3ea71969.zip
nvim: Working lua config for Go
-rw-r--r--.config/nvim/init.lua2
-rw-r--r--.config/nvim/lua/lsp_cfg.lua120
-rw-r--r--.config/nvim/lua/settings.lua6
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)
+]]