Coc.nvim: CocAction('codeLens') => Quell-ID von codelens nicht gefunden

Erstellt am 24. Nov. 2018  ·  3Kommentare  ·  Quelle: neoclide/coc.nvim

Beschreibe den Fehler
:call CocAction('codeLens') zeigt eine Fehlermeldung an [coc.nvim] Source id of codelens not found"

Fortpflanzen
~/.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. Ausführen von :call CocAction('codeLens')

Erwartetes Verhalten
textDocument/codeLen Ergebnis wird irgendwo gerendert

Zusätzlicher Kontext

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\"}"]}}]}

Beachten Sie, dass es einen JSON-String als einziges Element von "arguments" codiert (um VSCode glücklich zu machen):

"arguments":["{\"usr\":16721564935990383768,\"kind\":4,\"field\":\"uses\"}"]

/tmp/coc-nvim.log Log-Eintrag:

2018-11-23T21:19:51.601 ERROR (pid:17076) [codelens] - Cannot read property 'command' of null
bug

Hilfreichster Kommentar

Coc verwendet set_virtual_text von neovim für die codeLenes-Funktion.

Alle 3 Kommentare

Der Befehl existiert nicht, eine Erweiterung könnte helfen, benutzerdefinierten Befehl zu registrieren.

Ist es sinnvoll, die Fehlermeldung auf den Zeitpunkt zu verschieben, an dem der Benutzer tatsächlich auf die Schaltfläche klickt (den Befehl austrickst)?

Meine vermeintliche Interaktion ist:

  • Benutzer ruft textDocument/codeLens
  • Server-Rückgaben:
{"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 und command.title werden gerendert, auch wenn der Server die tatsächlichen command nicht kennt. In diesem speziellen Fall bedeutet "title": "0 ref" dass die Deklaration 0 Referenzen hat. Der Titel ist wichtiger, als ob der Befehl als anklickbare Schaltfläche gerendert wird.
  • Der Benutzer klickt auf die Schaltfläche 0 refs (Code-Linse). Da es keine Erweiterung für den Befehl ccls.xref , kann coc.nvim in diesem Schritt aussteigen und eine Fehlermeldung ausgeben, anstatt zu senden
{"title":"0 ref","command":"ccls.xref","arguments":["{\"usr\":16721564935990383768,\"kind\":4,\"field\":\"uses\"}"]}

So wird CodeLens in vscode-ccls gerendert. Diese "* refs" sind anklickbare Schaltflächen, aber ob sie anklickbar sind, spielt keine große Rolle. coc.nvim kann eine Fehlermeldung ausgeben, da der Befehl von einer Erweiterung nicht unterstützt wird.

Ich habe das Gefühl, dass es ablenkt, da es zu viel vertikalen Raum benötigt. emacs-ccls setzt standardmäßig alle Linsen am Zeilenende.

Coc verwendet set_virtual_text von neovim für die codeLenes-Funktion.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen