go.nvim icon indicating copy to clipboard operation
go.nvim copied to clipboard

Telescope lsp_definitions clashing with go.nvim first time it's called

Open asirago opened this issue 1 year ago • 20 comments

It works as expected when go.nvim is not installed or loaded (lazy.vim) however hen go.nvim is installed and loaded the first telescope lsp_definitions outside buffer yields the error under Actual Behaviour.

Since the error complained about codelens I tried setting lsp_codelens to false and got this error instead method textDocument/inlayHint is not supported by any of the servers registered for the current buffer

I'm relatively new to the world of neovim and custom configurations so something might be wrong with my configurations, however I thought it would still be worthwhile creating a new issue since there's a chance that might not be the case.

Expected behaviour

no error

Actual Behaviour

Error executing vim.schedule lua callback: ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: BufReadPost Autocommands for "*.go": Vim(append):E
rror executing lua callback: ...w/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1963: Vim:method textDocument/codeLens is not supported by any of the
servers registered for the current buffer
stack traceback:
        [C]: in function 'nvim_command'
        ...w/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1963: in function 'buf_request'
        ...neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/codelens.lua:293: in function 'refresh'
        .../.local/share/nvim/lazy/go.nvim/lua/go/codelens.lua:67: in function 'refresh'
        .../.local/share/nvim/lazy/go.nvim/lua/go/codelens.lua:20: in function <.../.local/share/nvim/lazy/go.nvim/lua/go/codelens.lua:17>
        [C]: in function 'nvim_win_set_buf'
        ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: in function 'jump_to_location'
        ...nvim/lazy/telescope.nvim/lua/telescope/builtin/__lsp.lua:176: in function 'handler'
        ...w/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1393: in function ''
        vim/_editor.lua: in function <vim/_editor.lua:0>
stack traceback:
        [C]: in function 'nvim_win_set_buf'
        ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: in function 'jump_to_location'
        ...nvim/lazy/telescope.nvim/lua/telescope/builtin/__lsp.lua:176: in function 'handler'
        ...w/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1393: in function ''
        vim/_editor.lua: in function <vim/_editor.lua:0>

This is my lsp_config.lua if it's relevant

return {
    "neovim/nvim-lspconfig",
    dependencies = {
        "hrsh7th/cmp-nvim-lsp",
        { "antosha417/nvim-lsp-file-operations", config = true }
    },
    config = function()
        local lspconfig = require("lspconfig")
        vim.api.nvim_create_autocmd('LspAttach', {
            callback = function(event)
                local map = function(mode, lhs, rhs, desc)
                    vim.keymap.set(mode, lhs, rhs, { buffer = event.buf,  desc = desc .. "[lsp]" })
                end

                map("n", "gd", "<cmd>Telescope lsp_definitions<CR>", "[g]o [t]o definition") -- see definition and make edits in window

                local client = vim.lsp.get_client_by_id(event.data.client_id)
                if client and client.server_capabilities.documentHighlightProvider then
                    vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
                        buffer = event.buf,
                        callback = vim.lsp.buf.document_highlight,
                    })

                    vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
                        buffer = event.buf,
                        callback = vim.lsp.buf.clear_references,
                    })
                end
            end,
        })

        local capabilities = vim.lsp.protocol.make_client_capabilities()
        capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())

        -- configure go server
        lspconfig["gopls"].setup({
            capabilities = capabilities,
            filetypes = { "go", "gomod", "gowork", "gotmpl" },
        })

        -- configure lua server (with special settings)
        lspconfig["lua_ls"].setup({
            capabilities = capabilities,
            settings = { -- custom settings for lua
                Lua = {
                    -- make the language server recognize "vim" global
                    diagnostics = {
                        globals = { "vim", "hs" },
                    },
                    workspace = {
                        -- make language server aware of runtime files
                        library = {
                            [vim.fn.expand("$VIMRUNTIME/lua")] = true,
                            [vim.fn.stdpath("config") .. "/lua"] = true,
                        },
                    },
                },
            },
        })
}

asirago avatar Mar 04 '24 00:03 asirago

Error executing vim.schedule lua callback: .../.config/nvim/plugged/glance.nvim/lua/glance/preview.lua:59: BufReadPost Autocommands for
 "*.go": Vim(append):Error executing lua callback: ...w/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1963: Vim:method textDoc
ument/codeLens is not supported by any of the servers registered for the current buffer

Same error on github.com/DNLHC/glance.nvim.

icefed avatar Mar 04 '24 03:03 icefed

Same error here, quite annoying. Happens for each external dependency once, when I do a lua require('telescope.builtin').lsp_definitions()

Error executing vim.schedule lua callback: ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: BufReadPost Autokommandos für "*.go": Vim(append):Error executing lua callback: ...l/Cellar/neovim/0.9.5
/share/nvim/runtime/lua/vim/lsp.lua:1963: Vim:method textDocument/codeLens is not supported by any of the servers registered for the current buffer                                                                  
stack traceback:                                                                                                                                                                                                     
        [C]: in function 'nvim_command'                                                                                                                                                                              
        ...l/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1963: in function 'buf_request'                                                                                                                  
        ...neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/codelens.lua:293: in function 'refresh'                                                                                                                       
        ...re/nvim/site/pack/packer/opt/go.nvim/lua/go/codelens.lua:67: in function 'refresh'                                                                                                                        
        ...re/nvim/site/pack/packer/opt/go.nvim/lua/go/codelens.lua:20: in function <...re/nvim/site/pack/packer/opt/go.nvim/lua/go/codelens.lua:17>                                                                 
        [C]: in function 'nvim_win_set_buf'                                                                                                                                                                          
        ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: in function 'jump_to_location'                                                                                                             
        ...ker/start/telescope.nvim/lua/telescope/builtin/__lsp.lua:168: in function 'handler'                                                                                                                       
        ...l/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1393: in function ''                                                                                                                             
        vim/_editor.lua: in function <vim/_editor.lua:0>                                                                                                                                                             
stack traceback:                                                                                                                                                                                                     
        [C]: in function 'nvim_win_set_buf'                                                                                                                                                                          
        ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: in function 'jump_to_location'                                                                                                             
        ...ker/start/telescope.nvim/lua/telescope/builtin/__lsp.lua:168: in function 'handler'                                                                                                                       
        ...l/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1393: in function ''                                                                                                                             
        vim/_editor.lua: in function <vim/_editor.lua:0>                

jens1205 avatar Mar 04 '24 13:03 jens1205

@asirago @jens1205

go.nvim default configuration conflict with other lsp plugins, you can disable those options:

  require("go").setup({
    lsp_codelens = false,
    lsp_keymaps = false,
    lsp_inlay_hints = {
      enable = false,
    },
  })

icefed avatar Mar 08 '24 10:03 icefed

@icefed Thanks, that seems to do the trick!

jens1205 avatar Mar 11 '24 07:03 jens1205

I suggest using the LSP setup from go.nvim. As it turned on features that may not enabled by other LSP setup/plugins.

ray-x avatar Mar 12 '24 10:03 ray-x

Hi! I have the same issue

Error executing vim.schedule lua callback: ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: BufReadPost Autocommands for "*.go": Vim(append):Error executing lua callback: ...l/Cellar/neovim/0.9.5/share/nvim/runtime/lua/
vim/lsp.lua:1963: Vim:method textDocument/codeLens is not supported by any of the servers registered for the current buffer
stack traceback:
        [C]: in function 'nvim_command'
        ...l/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1963: in function 'buf_request'
        ...neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/codelens.lua:293: in function 'refresh'
        .../user/.local/share/nvim/lazy/go.nvim/lua/go/codelens.lua:67: in function 'refresh'
        .../user/.local/share/nvim/lazy/go.nvim/lua/go/codelens.lua:20: in function <.../user/.local/share/nvim/lazy/go.nvim/lua/go/codelens.lua:17>
        [C]: in function 'nvim_win_set_buf'
        ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: in function 'jump_to_location'
        ...nvim/lazy/telescope.nvim/lua/telescope/builtin/__lsp.lua:175: in function 'handler'
        ...l/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1393: in function ''
        vim/_editor.lua: in function <vim/_editor.lua:0>
stack traceback:
        [C]: in function 'nvim_win_set_buf'
        ...lar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp/util.lua:1146: in function 'jump_to_location'
        ...nvim/lazy/telescope.nvim/lua/telescope/builtin/__lsp.lua:175: in function 'handler'
        ...l/Cellar/neovim/0.9.5/share/nvim/runtime/lua/vim/lsp.lua:1393: in function ''
        vim/_editor.lua: in function <vim/_editor.lua:0>

and @icefed method works(Thank you!)

  require("go").setup({
    lsp_codelens = false,
  })

I'm using lsp-zero. How to use go.nvim and lsp-zero at the same time? @ray-x

i-vrnv avatar Mar 22 '24 23:03 i-vrnv

I am not familar with lsp-zero You can get gopls dynamicity with

     require('go.lsp').config()

And passing it to lsp-zero config Something like

require('lspconfig').gopls.setup(require('go.lsp').config())

ray-x avatar Mar 23 '24 23:03 ray-x

Hello! I faced the same issue.

I found that codelense causes error here: https://github.com/ray-x/go.nvim/blob/d748e79011437d5b080006b896b3c296656641d7/lua/go/codelens.lua#L52

Every time we open a new dependency, we open a new gopls instance.

 Client: gopls (id: 4, bufnr: [129])
 	filetypes:       go, gomod, gosum, gotmpl, gohtmltmpl, gotexttmpl
 	autostart:       true
 	root directory:  Running in single file mode.
 	cmd:             /Users/iilinykh/.local/share/nvim/mason/bin/gopls -remote=auto

seems like we have this call failing because we use wrong gopls.

IlyasYOY avatar Mar 25 '24 16:03 IlyasYOY

In my case problem was solved by this fix: https://github.com/ray-x/go.nvim/pull/445

IlyasYOY avatar Mar 25 '24 16:03 IlyasYOY

After plugin update the problem is gone. @ray-x thanks for your efforts!

@IlyasYOY FYI. I assume this commit have fixed the issue.

i-vrnv avatar Mar 25 '24 21:03 i-vrnv

I guess you are right @i-vrnv. I've just checked one more time and everything looks fine.

closed the PR. @ray-x +1, you did a great job, thanks for the plugin!

IlyasYOY avatar Mar 25 '24 21:03 IlyasYOY

@i-vrnv How did you actually fix the issue? For me it still shows that error (but codeLens initially works, without errors), but then after using glance.nvim, ctrl-q to move the results to quickfix, and then browsing the result from quickfix, things start to break. It's interesting that GoCodeLensAct still works, despite saying that method textDocument/codeLens is not supported by any of the servers registered for the current buffer and it runs test or whatever action is on that line. Here's my config https://github.com/gcollura/dotfiles/tree/main/.config/nvim

gcollura avatar Apr 30 '24 20:04 gcollura

Hi @gcollura! I didn't make any adjustments. I just updated the packages via Lazy. I don't use glance.nvim. It might be worth trying to disable it and see if the behavior changes. Here is my config, maybe it will help.

i-vrnv avatar Apr 30 '24 21:04 i-vrnv

I do not think default gopls setup from other plugins will enable all required gopls features of go.nvim. you can either require('lspconfig').gopls.setup(require('go.lsp').config()) or check what are the differences between go.nvim gopls config and the setup in other plugins and update the gopls setup accordingly.

ray-x avatar May 01 '24 02:05 ray-x

I do not think default gopls setup from other plugins will enable all required gopls features of go.nvim. you can either require('lspconfig').gopls.setup(require('go.lsp').config()) or check what are the differences between go.nvim gopls config and the setup in other plugins and update the gopls setup accordingly.

Right, I'm doing that, and everything actually works fine, but doing :copen, even without going through Glance, seems to throwing things off:

Error detected while processing BufReadPost Autocommands for "*.go":
method textDocument/codeLens is not supported by any of the servers registered for the current buffer

I wonder if maybe there's an issue (in my config probably) in reattaching the LSP after opening a buffer without any LSP attached to it?

gcollura avatar May 01 '24 04:05 gcollura

I have the same issue as gcollura. I launch neovim, run :GoLint and the quickfix appears. The first time I hit enter on an item in quickfix, I get this codeLens not supported error. It comes up the first time a buffer is loaded from quickfix. Selecting further lines in quickfix on the same buffer doesn't trigger the codeLens error.

Here's my config: https://github.com/luv2code/nvim/blob/e7c79617a9f93b8949ebc84d9cbee3bc0aa0b595/after/plugin/lsp.lua

require('mason-lspconfig').setup({
	ensure_installed = {
		'tsserver',
		'eslint',
		'rust_analyzer',
		'gopls',
		'tailwindcss',
		'html',
		'htmx',
		'clangd',
		'cssls',
		'templ',
	},
	handlers = {
		function(server_name)
			require('lspconfig')[server_name].setup({})
		end,
		gopls = function ()
			require('lspconfig').gopls.setup(require('go.lsp').config())
		end,
		tailwindcss = function ()
			require('lspconfig').tailwindcss.setup({
					filetypes = { "templ", "javascript", "typescript", "react" },
					init_options = { userLanguages = { templ = "html" } },
			})
		end,
	},
})

edit: Once this codelens error is triggered from quickfix. I start getting it on other events too. Like if I exit insert mode into normal mode, it pops up on InsertLeave instead of BufReadPost. Or if I write the file, it pops up with BufWritePre.

Also, it doesn't matter from where the quickfix was launched. I can grep into a quickfix buffer and the same error starts popping up.

The behavior persists even after the quickfix window is closed. The codelens error persists until neovim is restarted.

luv2code avatar May 06 '24 21:05 luv2code

When opened file in quickfix, did gopls attach to the file just opened? You can check it with LspInfo

ray-x avatar May 09 '24 23:05 ray-x

 Press q or <Esc> to close this window. Press <Tab> to view server doc.
 
 Language client log: /home/matt/.local/state/nvim/lsp.log
 Detected filetype:   go
 
 2 client(s) attached to this buffer: 
 
 Client: copilot (id: 1, bufnr: [1, 30, 43, 51, 29])
 	filetypes:       
 	autostart:       false
 	root directory:  /home/matt/projects/[redacted]
 	cmd:             node /home/matt/.local/share/nvim/site/pack/packer/start/copilot.lua/copilot/index.js
 
 Client: gopls (id: 2, bufnr: [43, 30, 29])
 	filetypes:       go, gomod, gosum, gotmpl, gohtmltmpl, gotexttmpl
 	autostart:       true
 	root directory:  /home/matt/projects/[redacted]
 	cmd:             /home/matt/.local/share/nvim/mason/bin/gopls -remote=auto
 
 Configured servers list: tailwindcss, html, gopls, clangd, lua_ls, htmx, templ, cssls, eslint, rust_analyzer, tsserver

It looks like it attached; though I know how to run LspInfo until after I dismiss the errors.

luv2code avatar May 13 '24 14:05 luv2code

If check the bufnr gopls and copilot attached. seems 1 and 51 were not attached. Not sure those are go files though.

ray-x avatar May 13 '24 22:05 ray-x

1 was the makefile, and 51 was the quickfix buffer.

Here it is again. I opened neovim fresh, and ran :grep "func main\(" which loads a quickfix list without opening a qf buffer, and then opens the first result in the list into a new buffer.

 Press q or <Esc> to close this window. Press <Tab> to view server doc.
 
 Language client log: /home/matt/.local/state/nvim/lsp.log
 Detected filetype:   go
 
 2 client(s) attached to this buffer: 
 
 Client: copilot (id: 1, bufnr: [1])
 	filetypes:       
 	autostart:       false
 	root directory:  /home/matt/projects/[redacted]
 	cmd:             node /home/matt/.local/share/nvim/site/pack/packer/start/copilot.lua/copilot/index.js
 
 Client: gopls (id: 2, bufnr: [1])
 	filetypes:       go, gomod, gosum, gotmpl, gohtmltmpl, gotexttmpl
 	autostart:       true
 	root directory:  /home/matt/projects/[redacted]
 	cmd:             /home/matt/.local/share/nvim/mason/bin/gopls -remote=auto
 
 Configured servers list: tailwindcss, html, markdown_oxide, clangd, lua_ls, htmx, templ, tflint, eslint, cssls, tsserver, rust_analyzer, gopls

luv2code avatar May 13 '24 23:05 luv2code