Describe el error
:call CocAction('codeLens')
muestra un mensaje de error [coc.nvim] Source id of codelens not found"
Reproducir
~/.config/nvim/coc-settings.json
:
{
"languageserver": {
"ccls": {
"command": "ccls",
"filetypes": ["c", "cpp", "objc", "objcpp"]
}
}
}
cd /tmp/d; git init
echo 'int a;' > a.cc
nvim a.cc
:call CocAction('codeLens')
Comportamiento esperado
textDocument/codeLen
resultado se representa en alguna parte
Contexto adicional
sysdig -As9999 --unbuffered -p '%evt.buffer' "proc.exe contains ccls and fd.type=unix"
:
Content-Length: 113
{"jsonrpc":"2.0","id":16,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file:///tmp/d/a.cc"}}}
Content-Length: 239
{"jsonrpc":"2.0","id":16,"result":[{"range":{"start":{"line":0,"character":4},"end":{"line":0,"character":5}},"command":{"title":"0 ref","command":"ccls.xref","arguments":["{\"usr\":16721564935990383768,\"kind\":4,\"field\":\"uses\"}"]}}]}
Tenga en cuenta que codifica una cadena JSON como el único elemento de "arguments"
(para hacer feliz a VSCode):
"arguments":["{\"usr\":16721564935990383768,\"kind\":4,\"field\":\"uses\"}"]
/tmp/coc-nvim.log
entrada de registro:
2018-11-23T21:19:51.601 ERROR (pid:17076) [codelens] - Cannot read property 'command' of null
El comando no existe, una extensión podría ayudar a registrar un comando personalizado.
¿Tiene sentido posponer el informe de errores hasta que el usuario realmente haga clic en el botón (engañe al comando)?
Mi supuesta interacción es:
textDocument/codeLens
{"jsonrpc":"2.0","id":16,"result":[{"range":{"start":{"line":0,"character":4},"end":{"line":0,"character":5}},"command":{"title":"0 ref","command":"ccls.xref","arguments":["{\"usr\":16721564935990383768,\"kind\":4,\"field\":\"uses\"}"]}}]}
range
y command.title
se procesan incluso si el servidor no conoce el command
real. En este caso particular, "title": "0 ref"
significa que la declaración tiene 0 referencias. El título es más importante que si el comando se representa como un botón en el que se puede hacer clic.0 refs
(lente de código). Como no hay una extensión para manejar el comando ccls.xref
, coc.nvim puede rescatar e imprimir un mensaje de error en este paso, en lugar de enviar{"title":"0 ref","command":"ccls.xref","arguments":["{\"usr\":16721564935990383768,\"kind\":4,\"field\":\"uses\"}"]}
Así es como se representa CodeLens
en vscode-ccls. Estos "* refs"
son botones en los que se puede hacer clic, pero no importa demasiado si se puede hacer clic en ellos. coc.nvim puede imprimir un mensaje de error ya que el comando no es compatible con una extensión.
Siento que me distrae porque ocupa demasiado espacio vertical. emacs-ccls coloca todas las lentes al final de la línea de forma predeterminada.
Coc usará set_virtual_text
de neovim para la función codeLenes.
Comentario más útil
Coc usará
set_virtual_text
de neovim para la función codeLenes.