update lspconfig setup; add sample vimrc, add codelens config

pull/25/head
ray-x 3 years ago
parent 1dce1155ed
commit 989be3f213

@ -234,7 +234,8 @@ LSP supported by nvim-lsp is good enough for a gopher. If you looking for a bett
[navigator](https://github.com/ray-x/navigator.lua), or lspsaga, and lsp-utils etc. [navigator](https://github.com/ray-x/navigator.lua), or lspsaga, and lsp-utils etc.
## LSP CodeLens ## LSP CodeLens
Gopls support code lens. To run gopls code lens action `GoCodeLenAct` Gopls supports code lens. To run gopls code lens action `GoCodeLenAct`
Note: codelens need to be enabled in gopls, check default config in
## Lint ## Lint
@ -284,7 +285,7 @@ The plugin will setup debugger. But you need to install
Also you can check telescope dap extension : nvim-telescope/telescope-dap.nvim Also you can check telescope dap extension : nvim-telescope/telescope-dap.nvim
Sample vimrc Sample vimrc for DAP
```viml ```viml
Plug 'mfussenegger/nvim-dap' Plug 'mfussenegger/nvim-dap'
Plug 'rcarriga/nvim-dap-ui' Plug 'rcarriga/nvim-dap-ui'
@ -302,7 +303,7 @@ Check [go.lua](https://github.com/ray-x/go.nvim/blob/master/lua/go.lua) on all t
Configure from lua suggested, The default setup: Configure from lua suggested, The default setup:
```lua ```lua
require('go').setup(cfg = { require('go').setup({
goimport='gofumports', -- goimport command goimport='gofumports', -- goimport command
gofmt = 'gofumpt', --gofmt cmd, gofmt = 'gofumpt', --gofmt cmd,
max_line_len = 120, -- max line length in goline format max_line_len = 120, -- max line length in goline format
@ -316,10 +317,12 @@ require('go').setup(cfg = {
lsp_on_attach = true, -- if a on_attach function provided: attach on_attach function to gopls lsp_on_attach = true, -- if a on_attach function provided: attach on_attach function to gopls
-- true: will use go.nvim on_attach if true -- true: will use go.nvim on_attach if true
-- nil/false do nothing -- nil/false do nothing
lsp_codelens = true, -- set to false to disable codelens, true by default
gopls_remote_auto = true, -- add -remote=auto to gopls
gopls_cmd = nil, -- if you need to specify gopls path and cmd, e.g {"/home/user/lsp/gopls", "-logfile", gopls_cmd = nil, -- if you need to specify gopls path and cmd, e.g {"/home/user/lsp/gopls", "-logfile",
"/var/log/gopls.log" } "/var/log/gopls.log" }
lsp_diag_hdlr = true, -- hook lsp diag handler lsp_diag_hdlr = true, -- hook lsp diag handler
dap_debug = false, -- set to true to enable dap dap_debug = true, -- set to false to disable dap
dap_debug_keymap = true, -- set keymaps for debugger dap_debug_keymap = true, -- set keymaps for debugger
dap_debug_gui = true, -- set to true to enable dap gui, highly recommand dap_debug_gui = true, -- set to true to enable dap gui, highly recommand
dap_debug_vt = true, -- set to true to enable dap virtual text dap_debug_vt = true, -- set to true to enable dap virtual text

@ -13,8 +13,10 @@ _GO_NVIM_CFG = {
lsp_gofumpt = false, -- true: set default gofmt in gopls format to gofumpt lsp_gofumpt = false, -- true: set default gofmt in gopls format to gofumpt
lsp_on_attach = nil, -- provides a on_attach function to gopls, will use go.nvim on_attach if nil lsp_on_attach = nil, -- provides a on_attach function to gopls, will use go.nvim on_attach if nil
lsp_diag_hdlr = true, -- hook lsp diag handler lsp_diag_hdlr = true, -- hook lsp diag handler
dap_debug = false, lsp_codelens = true,
dap_debug_gui = false, gopls_remote_auto = true,
dap_debug = true,
dap_debug_gui = true,
dap_vt = true, -- false, true and 'all frames' dap_vt = true, -- false, true and 'all frames'
gopls_cmd = nil --- you can provide gopls path and cmd if it not in PATH, e.g. cmd = { "/home/ray/.local/nvim/data/lspinstall/go/gopls" } gopls_cmd = nil --- you can provide gopls path and cmd if it not in PATH, e.g. cmd = { "/home/ray/.local/nvim/data/lspinstall/go/gopls" }
} }
@ -99,12 +101,14 @@ function go.setup(cfg)
end end
if _GO_NVIM_CFG.lsp_cfg then if _GO_NVIM_CFG.lsp_cfg then
require 'go.lsp' require 'go.lsp'.setup()
if _GO_NVIM_CFG.lsp_diag_hdlr then if _GO_NVIM_CFG.lsp_diag_hdlr then
require 'go.lsp_diag' require 'go.lsp_diag'
end end
end end
require'go.codelens'.setup() if _GO_NVIM_CFG.lsp_codelens then
require'go.codelens'.setup()
end
end end
return go return go

@ -1,4 +1,5 @@
local log = require"go.utils".log local utils = require "go.utils"
local log = utils.log
local codelens = require "vim.lsp.codelens" local codelens = require "vim.lsp.codelens"
local api = vim.api local api = vim.api
@ -35,7 +36,7 @@ function M.setup()
vim.cmd('augroup go.codelenses') vim.cmd('augroup go.codelenses')
vim.cmd(' autocmd!') vim.cmd(' autocmd!')
vim.cmd('autocmd BufEnter,CursorHold,InsertLeave <buffer> lua vim.lsp.codelens.refresh()') vim.cmd('autocmd BufEnter,CursorHold,InsertLeave <buffer> lua require("go.codelens").refresh()')
vim.cmd('augroup end') vim.cmd('augroup end')
end end
@ -62,4 +63,16 @@ function M.run_action()
end end
end end
function M.refresh()
if _GO_NVIM_CFG.lsp_codelens == false then
return
end
if not utils.check_capabilities("code_lens") then
-- _GO_NVIM_CFG.lsp_codelens = false
log("code lens not supported by your gopls")
return
end
vim.lsp.codelens.refresh()
end
return M return M

@ -59,7 +59,6 @@ local gopls = {
message_level = vim.lsp.protocol.MessageType.Error, message_level = vim.lsp.protocol.MessageType.Error,
cmd = { cmd = {
"gopls", -- share the gopls instance if there is one already "gopls", -- share the gopls instance if there is one already
"-remote=auto", --[[ debug options ]] --
"-remote.debug=:0" "-remote.debug=:0"
}, },
@ -72,7 +71,9 @@ local gopls = {
analyses = {unusedparams = true, unreachable = false}, analyses = {unusedparams = true, unreachable = false},
codelenses = { codelenses = {
generate = true, -- show the `go generate` lens. generate = true, -- show the `go generate` lens.
gc_details = true -- // Show a code lens toggling the display of gc's choices. gc_details = true, -- // Show a code lens toggling the display of gc's choices.
test = true,
tidy = true
}, },
usePlaceholders = true, usePlaceholders = true,
completeUnimported = true, completeUnimported = true,
@ -89,21 +90,30 @@ local gopls = {
} }
} }
if _GO_NVIM_CFG.lsp_on_attach then local M = {}
if _GO_NVIM_CFG.lsp_on_attach == true then
gopls.on_attach = on_attach function M.setup()
else if _GO_NVIM_CFG.lsp_on_attach then
gopls.on_attach = _GO_NVIM_CFG.lsp_on_attach if _GO_NVIM_CFG.lsp_on_attach == true then
gopls.on_attach = on_attach
else
gopls.on_attach = _GO_NVIM_CFG.lsp_on_attach
end
end end
else
print("gopls on_attach not set")
end
if _GO_NVIM_CFG.gopls_cmd then if _GO_NVIM_CFG.gopls_cmd then
gopls.cmd = _GO_NVIM_CFG.gopls_cmd gopls.cmd = _GO_NVIM_CFG.gopls_cmd
end end
if _GO_NVIM_CFG.lsp_gofumpt then if _GO_NVIM_CFG.lsp_gofumpt then
gopls.settings.gopls.gofumpt = true gopls.settings.gopls.gofumpt = true
end
if _GO_NVIM_CFG.gopls_remote_auto then
table.insert(gopls.cmd, "-remote=auto")
end
require'lspconfig'.gopls.setup(gopls)
end end
require'lspconfig'.gopls.setup(gopls)
return M

@ -75,7 +75,10 @@ end
util.log = function(...) util.log = function(...)
local arg = {...} local arg = {...}
local log_path = _GO_NVIM_CFG.log_path or "/tmp/gonvim.log" local log_default = string.format("%s/%s.log", vim.api.nvim_call_function("stdpath", {"data"}),
"gonvim")
local log_path = _GO_NVIM_CFG.log_path or log_default
if _GO_NVIM_CFG.verbose == true then if _GO_NVIM_CFG.verbose == true then
local str = "" local str = ""
for i, v in ipairs(arg) do for i, v in ipairs(arg) do
@ -208,4 +211,29 @@ function util.load_plugin(name, modulename)
return plugin return plugin
end end
function util.check_capabilities(feature, client_id)
local clients = vim.lsp.buf_get_clients(client_id or 0)
local supported_client = false
for _, client in pairs(clients) do
util.log(client.resolved_capabilities)
supported_client = client.resolved_capabilities[feature]
if supported_client then
goto continue
end
end
::continue::
if supported_client then
return true
else
if #clients == 0 then
print("LSP: no client attached")
else
log("LSP: server does not support " .. feature)
end
return false
end
end
return util return util

@ -0,0 +1,42 @@
call plug#begin('~/.vim/plugged')
Plug 'neovim/nvim-lspconfig'
" Plug 'ray-x/go.nvim'
Plug '~/github/go.nvim'
Plug 'mfussenegger/nvim-dap'
Plug 'rcarriga/nvim-dap-ui'
Plug 'theHamsta/nvim-dap-virtual-text'
" Plug 'hrsh7th/nvim-compe' and other plugins you commenly use...
" optional, if you need treesitter symbol support
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
call plug#end()
" No need for rquire('lspconfig'), navigator will configure it for you
lua <<EOF
require('go').setup({
goimport='gofumports', -- goimport command
gofmt = 'gofumpt', --gofmt cmd,
max_line_len = 120, -- max line length in goline format
tag_transform = false, -- tag_transfer check gomodifytags for details
verbose = true, -- output loginf in messages
log_path = vim.fn.expand("$HOME") .. "/tmp/gonvim.log",
lsp_cfg = true, -- true: apply go.nvim non-default gopls setup
lsp_gofumpt = false, -- true: set default gofmt in gopls format to gofumpt
lsp_on_attach = true, -- if a on_attach function provided: attach on_attach function to gopls
-- true: will use go.nvim on_attach if true
-- nil/false do nothing
lsp_codelens = true,
-- gopls_remote_auto = true, -- set to false is you do not want to pass -remote=auto to gopls(enable share)
-- gopls_cmd = nil,
-- if you need to specify gopls path and cmd, e.g {"/home/user/lsp/gopls", "-logfile", "/var/log/gopls.log" }
lsp_diag_hdlr = true, -- hook lsp diag handler
dap_debug = true, -- set to true to enable dap
dap_debug_keymap = true, -- set keymaps for debugger
dap_debug_gui = true, -- set to true to enable dap gui, highly recommand
dap_debug_vt = true, -- set to true to enable dap virtual text
})
EOF
Loading…
Cancel
Save