Coc.nvim: CocAction ('codeLens') => No se encontró el ID de origen de codelens

Creado en 24 nov. 2018  ·  3Comentarios  ·  Fuente: neoclide/coc.nvim

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"]
    }
  }
}
  1. cd /tmp/d; git init
  2. echo 'int a;' > a.cc
  3. nvim a.cc
  4. Ejecutar :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
bug

Comentario más útil

Coc usará set_virtual_text de neovim para la función codeLenes.

Todos 3 comentarios

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:

  • El usuario invoca textDocument/codeLens
  • Devuelve el servidor:
{"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.
  • El usuario hace clic en el botón 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.

¿Fue útil esta página
0 / 5 - 0 calificaciones