La kromaĵo de LSP-kliento disponigas multajn lingvajn funkciojn kiel kodkompletigon, kodnavigadon aŭ trovi referencojn bazitajn sur la Language Server Protocol.
Post kiam vi ebligis la LSP-klienton en la krompaĝo, nova paĝo nomata LSP-kliento aperos en via Kate agorda dialogo.
Se konvene, responda LSP-komando ankaŭ estas menciita en la klarigo malsupre, kies dokumentado tiam povas disponigi kroman fonon kaj interpreton, kvankam ĝi povas varii dependi de la fakta lingvo. La frazo 'nuna simbolo' rilatas al la simbolo egalrilatanta al la nuna kursorpozicio, kiel tiel determinite per la lingvo kaj servila efektivigo.
- →
[textDocument/difino] Iru al la aktuala simboldifino.
- →
[textDocument/declaration] Iru al aktuala simbola deklaro.
- →
[textDocument/typeDefinition] Iru al aktuala simboltipdifino.
- →
[textDocument/references] Trovu referencojn al aktuala simbolo.
- →
[textDocument/implementation] Trovi efektivigojn de aktuala simbolo.
- →
[textDocument/documentHighlight] Marki nunajn simbolreferencojn en aktuala dokumento.
- →
[textDocument/hover] Ŝveb-informoj por aktuala simbolo.
- →
[textDocument/formatting] [textDocument/rangeFormatting] Formatu la aktualan dokumenton aŭ aktualan elekton.
- →
[textDocument/rename] Alinomi aktualan simbolon.
- →
[textDocument/codeAction, workspace/executeCommand] Komputilas kaj aplikas rapidan solvon por diagnozo pri aktuala pozicio (aŭ linio).
- →
Montru dokumentadon por elektita elemento en la kompletigolisto.
- →
Ankaŭ montru subskriban helpon en la kompletigolisto.
- →
Peto inkluzivi la deklaron de simbolo kiam oni petas referencojn.
- →
Aŭtomate aldonu paron da krampoj post kompletigo de funkcio.
- →
Montri informojn pri ŝvebado sur (muskursoro) ŝvebado. Sendepende de ĉi tiu agordo, la peto ĉiam povas esti mane iniciatita.
- →
[document/onTypeFormatting] Formati partojn de dokumento dum tajpado de certaj ekigilsignoj. Ekzemple, ĉi tio povus apliki indentaĵon sur novlinio, aŭ kiel alie determinite de LSP-Servilo. Notu, ke redaktaj indentskriptoj eble provas fari la samon (depende de la reĝimo) kaj do eble ne estas konsilinde havi ambaŭ ebligitaj samtempe.
- →
Sendi partajn dokumentajn redaktojn por ĝisdatigi la servilon prefere ol tuta dokumentteksto (se subtenata).
- →
Provizi paseman vidan signalon post plenumo de goto al loko (de difino, deklaro, ktp).
- →
[textDocument/publishDiagnostics] Procesi kaj montri diagnozajn sciigojn senditajn de servilo.
- →
Aldonu tekststaraĵojn por intervaloj indikitaj en diagnozo.
- →
Aldonu dokumentmarkojn por linioj indikitaj en diagnozo.
- →
Ŝanĝi al la diagnoza langeto en la kromprograma ilvido.
- →
Fermi ĉiujn langetojn ne-diagnozajn (ekz. referencojn) en kromprograma ilvido.
- →
Rekomenci la LSP-Servilon de aktuala dokumento.
- →
Halti ĉiujn LSP-Servilojn, kiuj tiam estos (re)komencitaj laŭbezone.
LSP Kliento povas helpi vin salti al ajna simbolo en via projekto aŭ aktuala dosiero. Por salti al iu ajn simbolo en la dosiero, uzu la ilovidon "LSP Klienta Simbolo Skizo" ĉe la dekstra rando de kate. Ĉi tiu ilvido listigas ĉiujn simbolojn trovitajn de la servilo en aktuala dokumento.
Defaŭlte la simboloj estas ordigitaj laŭ sia apero en la dokumento sed vi povas ŝanĝi la ordigon por esti alfabeta. Por fari tion, dekstre alklaku en la ilovido kaj marku "Ordigi Alfabete".
La ilvido montras la simbolojn en arbreĝimo defaŭlte, tamen vi povas ŝanĝi ĝin al listo uzante la kuntekstan menuon.
Por salti al iu ajn simbolo en via projekto, vi povas malfermi la dialogon de iri simbolo uzante Ctrl+Alt+p. La dialogo estas malplena kiam ĝi malfermiĝas, sed tuj kiam vi tajpas ion, la dialogo komencos montri al vi kongruajn simbolojn. La kvalito de kongruoj kaj ankaŭ filtraj kapabloj dependas de la servilo, kiun vi uzas. Ekzemple, clangd subtenas neklaran filtradon sed iu alia servilo eble ne.
Clangd-ŝanĝa fontokapa komando estas subtenata. Por ŝanĝi fontan kaplinion en projekto C aŭ C++ aŭ uzu la opcion "Switch Source Header" de la kunteksta menuo aŭ la ŝparvojo F12 .
Vi povas rapide salti al simbolo metante vian muson super la simbolon kaj poste premante Ctrl + maldekstran musbutonon.
La agorda paĝo de la kromaĵo plejparte ebligas konstantan agordon de iuj el ĉi-supraj menueroj. Tamen, ekzistas unu plia eniro por specifi la servilan agordan dosieron. Ĉi tio estas JSON dosiero kiu povas esti uzata por specifi la LSP-servilon por komenci (kaj poste por komuniki kun super stdin/stdout). Por komforto, iu defaŭlta agordo estas inkluzivita, kiu povas esti inspektita en la agorda paĝo de la kromaĵo. Por helpi en la klarigo malsupre, eltiraĵo de tiu agordo estas donita ĉi tie:
{
"servers": {
"bibtex": {
"use": "latex",
"highlightingModeRegex": "^BibTeX$"
},
"c": {
"command": ["clangd", "-log=error", "--background-index"],
"commandDebug": ["clangd", "-log=verbose", "--background-index"],
"url": "https://clang.llvm.org/extra/clangd/",
"highlightingModeRegex": "^(C|ANSI C89|Objective-C)$"
},
"cpp": {
"use": "c",
"highlightingModeRegex": "^(C\\+\\+|ISO C\\+\\+|Objective-C\\+\\+)$"
},
"d": {
"command": ["dls", "--stdio"],
"url": "https://github.com/d-language-server/dls",
"highlightingModeRegex": "^D$"
},
"fortran": {
"command": ["fortls"],
"rootIndicationFileNames": [".fortls"],
"url": "https://github.com/hansec/fortran-language-server",
"highlightingModeRegex": "^Fortran.*$"
},
"javascript": {
"command": ["typescript-language-server", "--stdio"],
"rootIndicationFileNames": ["package.json", "package-lock.json"],
"url": "https://github.com/theia-ide/typescript-language-server",
"highlightingModeRegex": "^JavaScript.*$",
"documentLanguageId": false
},
"latex": {
"command": ["texlab"],
"url": "https://texlab.netlify.com/",
"highlightingModeRegex": "^LaTeX$"
},
"go": {
"command": ["go-langserver"],
"commandDebug": ["go-langserver", "-trace"],
"url": "https://github.com/sourcegraph/go-langserver",
"highlightingModeRegex": "^Go$"
},
"python": {
"command": ["python3", "-m", "pyls", "--check-parent-process"],
"url": "https://github.com/palantir/python-language-server",
"highlightingModeRegex": "^Python$"
},
"rust": {
"command": ["rls"],
"path": ["%{ENV:HOME}/.cargo/bin", "%{ENV:USERPROFILE}/.cargo/bin"],
"rootIndicationFileNames": ["Cargo.lock", "Cargo.toml"],
"url": "https://github.com/rust-lang/rls",
"highlightingModeRegex": "^Rust$"
},
"ocaml": {
"command": ["ocamlmerlin-lsp"],
"url": "https://github.com/ocaml/merlin",
"highlightingModeRegex": "^Objective Caml.*$"
}
}
}
Notu, ke ĉiu "komando" povas esti tabelo aŭ ĉeno (tiam ĝi estas dividita en tabelon). Ankaŭ, altnivela "ĉiea" enskribo (apud "servilo") estas konsiderata ankaŭ (vidu pli sube). La specifita duumaro estas serĉata laŭ la kutima maniero, ekz. uzante PATH. Se ĝi estas instalita en iu propra loko, tiam ĉi-lasta eble devos esti etendita. Aŭ alternative, (sim)ligo aŭ envolvaĵskripto povas esti uzata en loko kiu estas ene de la kutima PATH. Kiel ĉi-supre ilustrite, oni povas ankaŭ specifi "vojo" kiun oni serĉos post la normaj lokoj.
Ĉiuj enskriboj en "komando", "radiko" kaj "pado" estas submetataj al varia ekspansio.
La "highlightingModeRegex" estas uzata por mapi la reliefan reĝimon kiel uzatan de Kate al la lingvoid de la servilo. Se neniu regula esprimo estas donita, la lingvo-id mem estas uzata. Se "documentLanguageId" eniro estas agordita kiel malvera, tiam neniu lingvo-identigilo estas provizita al la servilo dum malfermado de la dokumento. Ĉi tio povas havi pli bonajn rezultojn por iuj serviloj, kiuj estas pli precizaj por determini la dokumentspecon ol fari tion surbaze de kate-reĝimo.
De la supra ekzemplo, la esenco estas supozeble klara. Krome, ĉiu servila enira objekto ankaŭ povas havi "initializationOptions" eniron, kiu estas transdonita al la servilo kiel parto de la 'initialize' metodo. Se ĉeestas, "agordoj" eniro estas transdonita al la servilo per la sciigo 'workspace/didChangeConfiguration'. Aŭ de "completionTriggerCharacters" aŭ "signatureTriggerCharacters" povas esti specifita kiel JSON-objekto kun ĉenoj "exclude" kaj/aŭ "include". Ĉi tiuj estos uzataj por respektive ekskludi aŭ aldoni kelkajn signojn al la respektiva ekigilaro kiel provizita de la servilo.
Diversaj stadioj de superregado/kunfandi estas aplikataj;
uzanta agordo (ŝargita el dosiero) superregas (internan) defaŭltan agordon
"lspclient" eniro en
.kateprojectprojektagordo anstataŭas ĉi-supranla rezulta enskribo "global" estas uzata por kompletigi (ne anstataŭi) ajnan servilan eniron
Unu servila instanco estas uzata per (radiko, servilospeco) kombinaĵo. Se "root" estas specifita kiel absoluta vojo, tiam ĝi uzis kiel-estas, alie ĝi estas relative al la “projectBase” (kiel determinite de la Projekta kromaĵo) se aplikebla, aŭ alie rilate al la dosierujo de la dokumento. Se ne specifita kaj "rootIndicationFileNames" estas tabelo kiel dosiernomoj, tiam gepatra dosierujo de aktuala dokumento enhavanta tian dosieron estas elektita. Alternative, se "root" ne estas specifita kaj "rootIndicationFilePatterns" estas tabelo de dosierŝablonoj, tiam gepatra dosierujo de la nuna dokumento kongrua kun la dosierŝablono estas elektita. Kiel lasta rezerva, la hejma dosierujo estas elektita kiel "radiko". Por iu ajn dokumento, la rezulta "root" tiam determinas ĉu aŭ ne aparta kazo estas necesa. Se jes, la "root" estas transdonita kiel rootUri/rootPath.
Ĝenerale, oni rekomendas lasi radikon nespecifita, ĉar ĝi ne estas tiom grava por servilo (via kilometraĵo tamen povas varii). Pli malmultaj servilaj instancoj estas evidente pli efikaj, kaj ili ankaŭ havas "pli larĝan" vidon ol la vido de multaj apartaj okazoj.
Kiel menciite supre, pluraj eniroj estas submetataj al varia ekspansio. Taŭga apliko de tio kombinita kun aliroj de "envolvaĵo-skripto" permesas personigon al multaj cirkonstancoj. Ekzemple, konsideru python-disvolvan scenaron kiu konsistas el pluraj projektoj (ekz. git repos), ĉiu kun sia propra virtualenv-aranĝo. Uzante la defaŭltan agordon, la pitona lingvoservilo ne konscios pri la virtuala env. Tamen, tio povas esti riparita per la sekva aliro. Unue, la sekva fragmento povas esti enigita en la "Uzanto-Servilo-Agordoj" de LSPClient:
{
"servers":
{
"python":
{
"command": ["pylsp_in_env", "%{Project:NativePath}"],
"root": "."
}
}
}
La radika eniro supre estas relativa al la projekta dosierujo kaj certigas ke aparta lingvoservilo estas komencita por ĉiu projekto, kio estas necesa en ĉi tiu kazo ĉar ĉiu havas apartan virtualan medion.
pylsp_in_env estas malgranda "envolvaĵa skripto" kiu devus esti metita en PATH kun la sekva (alĝustigota) enhavo:
#!/bin/bash cd $1 # rulu la servilon (python-lsp-server) ene de la virtualenv # (t.e. kun agordo de virtualenv-variabloj) # do fontu la virtualenv source XYZ # servilaj postuloj aŭ argumentoj povas varii exec miaservilo
Ĉiu aparta LSP-servilo havas sian propran manieron de personigo kaj povas uzi specifajn rimedojn de lingvo/ilo por agordo, ekz. tox.ini (a.a. por python), .clang-format por C++-stila formato. Tia agordo povas tiam ankaŭ esti uzata de aliaj (ne-LSP) iloj (kiel tiam tox aŭ clang-format). Krom tio, iuj LSP-serviloj ankaŭ ŝargas agordon de propraj dosieroj (ekz. .ccls). Krome, laŭmenda servila agordo ankaŭ povas esti trapasita per LSP (protokolo), vidu la menciitajn "initializationOptions" kaj "settings" enskribojn en servila agordo.
Ĉar diversaj niveloj de superregado/kunfandiĝo estas aplikata, la sekva ekzemplo de uzanto-specifita kliento-agordo ĝustigas iun python-lingvo-servila agordo.
{
"servers": {
"python": {
"settings": {
"pyls": {
"plugins": {
"pylint": {
"enable": true
}
}
}
}
}
}
}
Bedaŭrinde, LSP-servila agordo/personigo ofte ne estas tiel bone dokumentita, tiel ke nur ekzamenado de la fontkodo montras agordaalirojn kaj la aron de disponeblaj agordaj elektoj. Aparte, la servilo de ĉi-supra ekzemplo subtenas multajn pliajn opciojn en "agordoj". Vidu dokumentaron de alia LSP-kliento por diversaj aliaj lingvoservilaj ekzemploj kaj respondaj agordoj, kiuj povas facile; kaj facile esti transformita al la JSON agordo kiu estas uzata ĉi tie kaj skizita supre.
Vi povas ebligi "formati dum konservado" de LSP-agordoj en agorda dialogo.
Povas okazi, ke oni raportas diagnozojn, kiuj ne estas tute utilaj. Ĉi tio povas esti sufiĉe ĝena, precipe se estas multaj (ofte de la sama speco). En iuj kazoj, ĉi tio povas esti tajlita per specifaj rimedoj de lingvo (servilo). Ekzemple, la agorda mekanismo de clangd permesas ĝustigi iujn diagnozajn aspektojn. Ĝenerale, tamen, eble ne ĉiam estas evidente kiel fari tion, aŭ eble eĉ tute ne eblas laŭ dezirataj manieroj pro servilaj limigoj aŭ cimo.
Kiel tia, la kromaĵo subtenas diagnozsubpremadon simila al ekz. valgrind-subpremoj. La plej fajngrajna agordo povas esti liverita en ŝlosilo "suppressions" en la (kunfandita) JSON agordo.
{
"servers": {
"c": {
"suppressions": {
"rulename": ["filename", "foo"],
"clang_pointer": ["", "clang-tidy", "clear_pointer"],
}
}
}
}
Ĉiu (valida) regulo havas arbitran nomon kaj estas difinita per tabelo de longo 2 aŭ 3 kiu provizas regex por kongrui kun la (plena) dosiernomo, regex por kongrui kun la diagnoza (teksto) kaj laŭvola regex kongrua kun la (fontokodo gamo de) teksto al kiu la diagnozo validas.
Krom ĉi-supra fajngrajna agordo, la kunteksta menuo en la diagnoza langeto ankaŭ subtenas aldoni/forigi subpremojn, kiuj kongruas precize kun aparta diagnozo (teksto), ĉu ĉie (iu ajn dosiero) ĉu loke (la specifa dosiero koncerna). Ĉi tiuj subpremoj estas konservitaj kaj ŝargitaj de seanc-agordo.
Unu afero estas priskribi kiel agordi (personan) LSP-servilon por iu ajn aparta lingvo, alia estas fini, ke la servilo funkcias glate. Kutime, ĉi-lasta estas feliĉe la kazo. Kelkfoje, tamen, problemoj povas aperi pro aŭ iu "stulta" misagordo aŭ pli fundamenta problemo kun la servilo mem. Ĉi-lasta povus kutime manifesti sin kiel kelkaj provoj komenci la servilon, kiel tiel raportite en Kate Eligo langeto. Ĉi-lasta tamen nur intencas transdoni altnivelajn mesaĝojn aŭ progresi prefere ol disponigi detalajn diagnozojn, kaj eĉ malpli por kio estas fakte alia procezo (la LSP-servilo).
La kutima maniero por diagnozi tion estas aldoni iun flago(j)n al la startkomando (de la lingvoservilo) kiu ebligas (aldonan) ensalutadon (al iu dosiero aŭ norma eraro), tiom kiom ĝi ne faras tion defaŭlte. . Se Kate tiam estas komencita sur la komandlinio, tiam oni povus akiri pli da (en)vido pri kio eble misfunkcias.
Povas ankaŭ esti informi ekzameni la protokolan interŝanĝon inter la LSP-kliento de Kate kaj la LSP-servilo. Denove, ĉi-lasta kutime havas manierojn spuri tion. La LSP-kliento ankaŭ disponigas kroman sencimigan spuradon (al stderr) kiam Kate estas alvokita per la jena QT_LOGGING_RULES=katelspclientplugin=true taŭge eksporto'ed.