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"]
}
}
}
cd /tmp/d; git init
echo 'int a;' > a.cc
nvim a.cc
: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
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:
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
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.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.
Hilfreichster Kommentar
Coc verwendet
set_virtual_text
von neovim für die codeLenes-Funktion.