Obsah
1. Lapce: kombinace Vimu, Helixu a Visual Studio Code
2. Technologie, na níž je Lapce postaven
3. Krátké zopakování: LSP (Language Server Protocol)
4. Instalace textového editoru Lapce
5. Grafické uživatelské rozhraní editoru Lapce
8. Instalace pluginů do editoru Lapce
9. Podpora práce se systémem pro správu verzí
10. Spouštění a ladění programů
11. Podpora editace využívající větší množství kurzorů
1. Lapce: kombinace Vimu, Helixu a Visual Studio Code
V dnešním článku se ve stručnosti seznámíme s projektem nazvaným Lapce. Jedná se o programátorský textový editor, který svým vzhledem a základním chováním připomíná známé a populární Visual Studio Code. Navíc ovšem umožňuje, a to zcela na přání uživatele, přepnout ovládání do režimu, který se podobá Vimu (či NeoVimu). Lapce díky tomu můžeme zařadit mezi modální textové editory. Navíc dokáže pracovat s větším množstvím dokumentů zobrazených typicky v jednotlivých tabech (v rámci plochy okna editoru) a samozřejmě podporuje zarovnání zdrojových kódů i zvýraznění syntaxe a v neposlední míře je podporován i Language Server Protokol, jenž umožňuje realizovat například automatické doplňování kódu, refaktoring atd. Pro zvýraznění syntaxe je použit TreeSitter, což je opět technologie, s níž jsme se již na Rootu seznámili (a to konkrétně v souvislosti s textovým editorem Helix).
Obrázek 1: Prostředí programátorského textového editoru Lapce.
Již v úvodní části dnešního článku je však nutné zdůraznit, že Lapce není (i přes použité modální ovládání a mnohdy podobné klávesové zkratky) „pouhým“ dalším klonem textového editoru Vi či Vim (zkratka „Vim“ původně znamenala „Vi iMitation“, dnes již pochopitelně „Vi iMproved“). Ve skutečnosti se jedná o zcela novou aplikaci (jak na úrovni zdrojového kódu, tak i vnitřních datových struktur a rozdělení ovládání), které přebírají dobré myšlenky modálního editoru a současně používají i některé klávesové zkratky Vimu, popř. Vimovské příkazy. Příkladem rozšíření editačních schopností Lapce je podpora pro větší množství kurzorů (tu lze do Vimu přidat formou pluginu, ovšem není tak dobře integrovaná do rozhraní Vimu).
Obrázek 2: Prostředí známého textového editoru Vim v případě jeho spuštění v terminálu. O rozdělení plochy terminálu do oken se stará Vim ve vlastní režii.
2. Technologie, na níž je Lapce postaven
V nadpisu dnešního článku je zmíněn i textový editor Helix (který byl již na stránkách Roota popsán, viz poslední kapitolu s odkazy). Je tomu tak z toho důvodu, že jak Helix, tak i Lapce je naprogramován v programovacím jazyku Rust. I pro grafické uživatelské rozhraní jsou použity knihovny Rustu, konkrétně knihovna floem (a nikoli řešení založené na webových technologiích). Výsledkem je velmi snadno instalovatelný a taktéž velmi rychlý program, což lze ocenit při editaci obrovských souborů, k čemuž se dnes ještě dostaneme.
Pro zpracování editovaných zdrojových textů, jejich formátování, refaktoring atd. se používá technologie LSP (Language Server Protocol), podobně jako v prakticky všech moderních programátorských editorech. To znamená, že je pouze nutné nainstalovat plugin pro příslušný programovací jazyk a mít k dispozici LSP pro něj. Poté je již daný jazyk integrován do Lapce.
Obrázek 3: Editace zdrojového kódu napsaného v jazyce C v editoru Lapce.
3. Krátké zopakování: LSP (Language Server Protocol)
Language Server Protocol je otevřený standard navržený takovým způsobem, aby umožňoval komunikaci mezi textovými editory, popř. mezi integrovanými vývojovými prostředími (IDE) na jedné straně a různými typy programátorských nástrojů na straně druhé. Mezi nástroje, které je díky existenci LSP možné z editoru/IDE použít, mohou patřit zejména různé lintery, statické analyzátory kódu, programy pro kontrolu stylu zápisu programů, nástroje umožňující refaktoring zdrojového kódu, teoreticky i profilery atd. Nesmíme samozřejmě zapomenout na dnes již všemi programátory očekávané nástroje pro automatické doplňování jmen funkcí, metod, objektů atd., „inteligentní“ vyhledávání ve zdrojovém kódu, doskoky na definici funkce, objektu nebo proměnné apod. Všechny tyto nástroje mohou komunikovat s editorem/IDE přímo (pokud obsahují podporu pro LSP), nebo je možné využít nějaký obecnější nástroj, který je většinou nazývaný Language Server a který podporuje větší množství funkcí (typicky vyhledání definic, refaktoring a automatické doplňování; samozřejmě v závislosti na konkrétní implementaci).
Obrázek 4: Textový editor Emacs ve funkci integrovaného vývojového prostředí.
Myšlenka, na které je language server protocol postaven, samozřejmě není nijak nová ani převratná, protože se podobný princip využíval již dříve, například v textových editorech Vim a Emacs, které takto mohly komunikovat s nástroji běžícími na pozadí (daemons), viz též https://github.com/Microsoft/language-server-protocol/wiki/Protocol-History. Příkladem může být integrace nástroje Jedi do Vimu, o níž jsme se relativně nedávno zmínili v článku Knihovna Jedi: doplňování kódu a statická analýza kódu v Pythonu.
Obrázek 5: Dnes již historické IDE Turbo Pascalu určené pouze pro jediný jazyk. Prakticky všechny nástroje jsou nedílnou součástí tohoto IDE (s výjimkou externích nástrojů grep a Turbo Debugger).
4. Instalace textového editoru Lapce
Jak již bylo zmíněno v úvodních kapitolách, je textový editor Lapce naprogramován v Rustu. To mj. znamená, že je možné celou aplikaci přeložit do jediného binárního souboru (pro danou platformu a operační systém), takže celá instalace spočívá v pouhém stažení jediného (i když objemného) souboru. Pro získání onoho binárního souboru postačuje navštívit stránku https://lapce.dev/, která nabídne stažení verze pro detekovaný operační systém. Alternativně je možné si stáhnout variantu editoru Lapce pro odlišný operační systém, popř. pro odlišnou architekturu z adresy https://github.com/lapce/lapce/releases.
Získaný soubor je poměrně objemný, má cca 62 megabajtů (včetně všech potřebných knihoven, včetně GUI knihovny atd.):
$ ls -la lapce -rwxr-xr-x. 1 ptisnovs ptisnovs 63101368 Dec 4 16:32 lapce
Ve skutečnosti samozřejmě Lapce závisí na několika základních knihovnách, které si lze snadno nechat vypsat nástrojem ldd (nejedná se tedy o zcela přenositelný binární soubor, což je ale při pohledu na závislosti pochopitelné):
$ ldd lapce linux-vdso.so.1 (0x00007ffee476f000) libz.so.1 => /lib64/libz.so.1 (0x00007f4a00c29000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f49fd200000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f4a00c24000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f4a00c00000) librt.so.1 => /lib64/librt.so.1 (0x00007f4a00bfb000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4a00bf6000) libm.so.6 => /lib64/libm.so.6 (0x00007f49fd51f000) libc.so.6 => /lib64/libc.so.6 (0x00007f49fd022000) /lib64/ld-linux-x86-64.so.2 (0x00007f4a00c59000)
Obrázek 6: Lapce přepnutý do tmavého režimu.
5. Grafické uživatelské rozhraní editoru Lapce
Po prvním spuštění textového editoru Lapce se zobrazí (nebo by se alespoň mělo zobrazit) okno s obsahem, jaký byl již zobrazen na prvním screenshotu:
Obrázek 7: Prostředí programátorského textového editoru Lapce.
Můžeme zde vidět určitou podobnost s populárním textovým editorem (resp. dnes již s integrovaným vývojovým prostředím) Visual Studio Code. Jednotlivé části grafického uživatelského rozhraní je možné skrýt či znovu zobrazit s využitím trojice ikonek v dolní části okna:
Obrázek 8: Ikony určené pro skrytí a opětovné zobrazení jednotlivých částí grafického uživatelského rozhraní.
V levé horní části okna editoru nalezneme čtveřici důležitých ikon, které přepínají operace nabízené v levé části grafického uživatelského rozhraní:
Obrázek 9: Ikony pro výběr operací nabízených v levé části grafického uživatelského rozhraní.
Jedná se o tyto operace:
- Zobrazení struktury projektu a seznamu souborů.
- Zobrazení seznamu nainstalovaných přídavných modulů a nabízených přídavných modulů.
- Operace se systémem pro správu verzí (tedy dnes většinou s Gitem).
- Spouštění a ladění aplikace, zobrazení viditelných proměnných atd.
6. Editace souborů
Primárním úkolem textového editoru je pochopitelně zajištění editace souborů se zdrojovými texty i s konfigurací aplikace. Nejprve je nutné otevřít buď jeden soubor nebo celý adresář. Tyto operace jsou „schovány“ v menu zobrazeném po výběru ikony se třemi horizontálními řádky. Výchozí režim editoru je nemodální a připomíná tak již zmíněný Visual Studio Code:
Obrázek 10: Editace zdrojového souboru v editoru Lapce.
Relativně snadno je možné si nastavit režim částečné emulace textového editoru Vim. Postačuje kliknout na ikonu konfigurace (známé ozubené kolo) a ze zobrazeného menu vybrat položku Open Settings. V novém tabu s konfiguračními volbami se nachází výběr režimu editoru hned nahoře:
Obrázek 11: Nastavení režimu (částečné) emulace textového editoru Vim.
V nemodálním (výchozím) režimu je k dispozici i poměrně velké množství klávesových zkratek odvozených od Visual Studia Code. Pokud nastavení klávesových zkratek nevyhovuje, popř. chybí nějaká zkratka (vazba na příkaz), je možné si nastavení zkratek změnit, a to opět kliknutím na ikonu ozubeného kola (konfigurace):
Obrázek 12: Konfigurace klávesových zkratek.
7. Využití LSP
V případě, že je nainstalován LSP pro programovací jazyk, v němž jsou napsány zdrojové kódy, a pokud je navíc nainstalován i příslušný plugin (viz navazující kapitolu), bude editor Lapce v průběhu editace přes LSP volat analytické nástroje, nástroje pro doplnění symbolu atd. To například umožní zobrazení (potenciálních) chyb a varování přímo v době editace, a to bez nutnosti explicitního spouštění linterů z příkazové řádky:
Obrázek 13: Zobrazení chyb a varování nalezených v editovaném souboru.
Většina LSP umožní i zobrazení nápovědy k symbolu, na kterém se nachází kurzor. V případě editoru Lapce se nápověda zobrazí následujícím způsobem:
Obrázek 14: Zobrazení nápovědy, zde konkrétně nápovědy k importovanému modulu.
A pochopitelně je většinou (opět v závislosti na LSP) dostupné i automatické doplnění symbolu podle kontextu, v němž se nachází textový kurzor:
Obrázek 15: Automatické doplnění symbolu.
Obrázek 16: Automatické doplnění symbolu.
Operace pro změnu názvu symbolu i pro vyhledání definice symbolu, jsou dostupné přes kontextové menu nebo přes menu příkazů.
8. Instalace pluginů do editoru Lapce
Samotný editor Lapce je sice ihned po svém nainstalování plně funkční, ovšem při editaci zdrojových kódů je vhodné Lapce propojit přes LSP s lintery a dalšími nástroji, které dokážou analyzovat a zpracovávat zdrojové kódy na vyšší úrovni, než je pouhá sekvence znaků. Pro tyto účely nabízí Lapce podporu pluginů, jež je možné nainstalovat stejně snadno, jako pluginy do Visual Studia Code. Pro zobrazení seznamu nainstalovaných pluginů i pro instalaci nových pluginů slouží levá část GUI zobrazená po výběru druhého tlačítka v levém horním rohu.
Obrázek 17: Informace o dostupném pluginu.
Po instalaci vybraného pluginu se tento plugin zobrazí v horní polovině:
Obrázek 18: Informace o nainstalovaném pluginu.
Kromě pluginů zajišťujících podporu LSP pro různé programovací jazyky již existují i další pluginy, například pro změnu barvového tématu, pluginy s fonty atd. Pluginy se programují odlišně než je tomu ve Visual Studio Code, takže nejsou zaměnitelné.
9. Podpora práce se systémem pro správu verzí
Do editoru Lapce je integrována i podpora práce se systémem pro správu verzí (což dnes znamená Git). V současné verzi jsou podporovány jen základní operace, které by však měly pro běžné potřeby postačovat – zvýraznění provedených změn v projektu (přidané řádky, smazané řádky, modifikované řádky), commit změn do repositáře atd.:
Obrázek 19: Zobrazení seznamu změn, zobrazení změny v jednom vybraném souboru a možnost zápisu změny do systému pro správu verzí.
10. Spouštění a ladění programů
Textový editor Lapce podporuje i přímé spouštění a popř. i ladění programů. Nejprve je však nutné vyplnit konfigurační soubor nazvaný run.toml, ve kterém je nastaveno, jakým způsobem se program spouští a popř. jakým debuggerem se ladí (tento soubor bude uložen v podadresáři .lapce):
Obrázek 20: Nastavení konfiguračního souboru pro spuštění, popř. ladění programu, jehož zdrojový kód je editován.
11. Podpora editace využívající větší množství kurzorů
Další technologií, kterou nalezneme v textovém editoru Lapce, je podpora pro editaci založené na nastavení většího množství kurzorů (takzvaný multicursor). Nejprve je nutné k tomu určenými klávesovými zkratkami (Ctrl+L apod.) do editovaného souboru vložit větší množství kurzorů. Následně se všechny operace, což je typicky smazání textu, změna textu či vložení nového textu, budou provádět na všech místech, na nichž jsou tyto kurzory umístěny. Tyto operace jsou naznačeny na další dvojici screenshotů:
Obrázek 21: Vytvoření takzvaného multikurzoru na několika místech editovaného souboru.
Obrázek 22: Editační operace se bude týkat všech textových řádků, na nichž byl multikurzor definován.
12. Konfigurace editoru Lapce
Pro konfiguraci editoru Lapce je určen dialog (zobrazený přímo v ploše editoru). Konfigurační volby jsou rozděleny podle své funkce a zahrnují i případné parametry pluginů, které jsou nainstalovány. A jak je dnes u aplikací s mnoha desítkami až stovkami voleb zvykem, lze jednotlivé volby rychle vyhledávat podle jejich jména:
Obrázek 23: Okno s konfigurací editoru Lapce.
Konfigurace je uložena v souboru ~/.config/lapce-stable/settings.toml a může vypadat například následovně:
[core] color-theme = "Lapce Dark" modal = false [color-theme] [color-theme.ui] [lapce-cpp-clangd] "volt.serverPath" = """ /usr/bin/clangd """ [editor] code-lens-font-size = 5
13. Vzdálený přístup
Poslední vlastností textového editoru Lapce, o níž se v dnešním článku zmíníme, je podpora pro vzdálený přístup. Editor v takovém případě běží lokálně, ovšem umožňuje práci s projektem, který běží na jiném počítači popř. ve virtuálním stroji (což je taktéž vlastně vzdálený přístup). Na vzdáleném počítači poběží ovšem i všechny potřebné LSP servery, tedy například lintery atd. Výsledkem bude, že z pohledu uživatele-programátora se bude jednat o lokální operace, ovšem ve skutečnosti se budou tyto operace provádět na vzdáleném počítači. Pro navázání připojení a pro komunikaci se používá SSH.
Obrázek 24: Konfigurace vzdáleného přístupu.
14. Závěrečné zhodnocení
Textový editor Lapce může být v budoucnosti velmi užitečným projektem, který může být dobrou alternativou k dalším programátorským textovým editorům. Použitelný je i v současnosti, ovšem stále je na něm patrné, že ještě obsahuje ne zcela odladěné části. Často se například stane, že textové okno nebo nějaký vstupní dialog nedostane fokus, takže je nutné na něj explicitně klikat myší. Plně odladěno není ani rozhraní pro systémy pro správu verzí a mnohým programátorům mohou chybět pokročilejší funkce nabízené (či naopak nenabízené) dostupnými LSP servery. Taktéž není zcela funkční code lens (zmenšení těch částí kódu, která se právě needituje), takže jsem popis této zajímavé alternativy k foldingu v článku vynechal. Dále je v porovnání s Visual Studio Code k dispozici menší množství pluginů (což je pochopitelné). Pro plnohodnotné nasazení tedy ještě – alespoň podle mého názoru – čas nenadešel, ovšem situaci okolo Lapce budeme dále sledovat.
15. Odkazy na Internetu
- Lapce (home page)
https://lapce.dev/ - Float (GUI knihovna)
https://github.com/lapce/floem - Lapce na GitHubu
https://github.com/lapce/lapce - Lapce – Fast and Powerful Code Editor written in Rust
https://news.ycombinator.com/item?id=29549173 - Thoughts on some of the actively developed text editors written in Rust?
https://www.reddit.com/r/rust/comments/rfx8az/thoughts_on_some_of_the_actively_developed_text/ - The New Kids on the Block
https://dev.to/eidellev/the-new-kids-on-the-block-295i - Lapce – open source code editor inspired by Xi-editor
https://www.reddit.com/r/rust/comments/t550wy/lapce_open_source_code_editor_inspired_by_xieditor/ - 10 Best Text Editors for Modern Programming Teams in 2024 (Features & Pricing Reviewed)
https://www.taskade.com/blog/best-text-editors/ - What are the best programming text editors?
https://www.slant.co/topics/12/~best-programming-text-editors - Helix: nový modální textový editor inspirovaný Vimem a Kakoune
https://www.root.cz/clanky/helix-novy-modalni-textovy-editor-inspirovany-vimem-a-kakoune/ - Představení Helixu
https://helix-editor.com/ - Helix: A post-modern modal text editor
https://githubplus.com/helix-editor/helix - Helix na GitHubu
https://github.com/helix-editor/helix - Helix: dokumentace
https://docs.helix-editor.com/ - Helix: troubleshooting
https://github.com/helix-editor/helix/wiki/Troubleshooting - Klávesové zkratky Helixu
https://docs.helix-editor.com/keymap.html - How to install the default language servers
https://github.com/helix-editor/helix/wiki/How-to-install-the-default-language-servers - Taking a look at the Helix editor (Nov 5th, 2022)
https://www.youtube.com/watch?v=8L308PdmhMY - Helix – the Rust Powered Development Environment
https://www.youtube.com/watch?v=xHebvTGOdH8 - Python LSP setups for productive coding
https://www.reddit.com/r/HelixEditor/comments/13wpa72/python_lsp_setups_for_productive_coding/ - Helix documentation: Configuration
https://docs.helix-editor.com/configuration.html - Helix documentation: Languages
https://docs.helix-editor.com/master/languages.html - Looking to try Helix. How is support for Python?
https://www.reddit.com/r/HelixEditor/comments/119mhch/looking_to_try_helix_how_is_support_for_python/ - Python LSP Server (GitHub)
https://github.com/python-lsp/python-lsp-server#configuration - (dot file): Helix
https://github.com/gerlacdt/dotfiles/blob/e50ea089dbfd5e71e2cb6c10abfde305bf4a5b6e/helix/.config/helix/languages.toml#L2 - gopls
https://www.getman.io/posts/gopls/ - Kakoune: A Better Code Editor Heavily Inspired by Vim
https://www.tecmint.com/kakoune-better-code-editor-for-linux/ - Kakoune demo
https://vimeo.com/82711574 - 6 Best Vi/Vim-Inspired Code Editors for Linux
https://www.tecmint.com/vi-vim-inspired-code-editors-for-linux/ - Why Kakoune — The quest for a better code editor
https://kakoune.org/why-kakoune/why-kakoune.html - Kakoune design
https://github.com/mawww/kakoune/blob/master/doc/design.asciidoc - Kakoune (modální textový editor)
http://kakoune.org/ - Kakoune: Selections
https://github.com/mawww/kakoune/wiki/Selections - Migrating from Vim
https://github.com/mawww/kakoune/wiki/Migrating-from-Vim - kakoune-vertical-selections
https://github.com/occivink/kakoune-vertical-selection - Langserver.org
https://langserver.org/ - Language Server Protocol
https://microsoft.github.io/language-server-protocol/ - Language Server Protocol Specification
https://microsoft.github.io/language-server-protocol/specification - Implementations Language Servers
https://microsoft.github.io/language-server-protocol/implementors/servers - JSON-RPC 2.0 Specification
https://www.jsonrpc.org/specification - Why You Should Know the Language Server Protocol
https://tomassetti.me/what-is-the-language-server-protocol/ - Language Server Protocol: A Language Server For DOT With Visual Studio Code
https://tomassetti.me/language-server-dot-visual-studio/ - Python Language Server
https://github.com/palantir/python-language-server - Jedi – an awesome autocompletion/static analysis library for Python
https://github.com/davidhalter/jedi - What is lsp
https://www.reddit.com/r/vim/comments/7lnhrt/which_lsp_plugin_should_i_use/ - Evil (Emacs Wiki)
https://www.emacswiki.org/emacs/Evil - Evil (na GitHubu)
https://github.com/emacs-evil/evil - Evil (na stránkách repositáře MELPA)
https://melpa.org/#/evil - Evil Mode: How I Switched From VIM to Emacs
https://blog.jakuba.net/2014/06/23/evil-mode-how-to-switch-from-vim-to-emacs.html - Vrapper aneb spojení možností Vimu a Eclipse
https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse/ - Vrapper aneb spojení možností Vimu a Eclipse (část 2: vyhledávání a nahrazování textu)
https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse-cast-2-vyhledavani-a-nahrazovani-textu/ - Emacs/Evil-mode – A basic reference to using evil mode in Emacs
http://www.aakarshnair.com/posts/emacs-evil-mode-cheatsheet - From Vim to Emacs+Evil chaotic migration guide
https://juanjoalvarez.net/es/detail/2014/sep/19/vim-emacsevil-chaotic-migration-guide/ - Introduction to evil-mode {video)
https://www.youtube.com/watch?v=PeVQwYUxYEg - Vim-style keybinding in Emacs/Evil-mode
https://gist.github.com/troyp/6b4c9e1c8670200c04c16036805773d8 - Evil-surround
https://github.com/emacs-evil/evil-surround - Spacemacs
http://spacemacs.org/ - Neovim: literally the future of vim
https://neovim.io/ - AMP – A Vi/Vim Inspired Text Editor for Linux Terminal
https://www.tecmint.com/amp-vi-vim-inspired-text-editor-for-linux/ - Amp: A text editor for your terminal
https://github.com/jmacdonald/amp - Stránky projektu Amp.rs
https://amp.rs/ - Dokumentace k editoru Amp
https://amp.rs/docs/ - Vis: a vi-like editor based on Plan 9's structural regular expressions
https://github.com/martanne/vis - Very opinionated Node.JS VI clone
https://github.com/mikesmullin/nvi - PyVim: Pure Python Vim clone
https://github.com/prompt-toolkit/pyvim - pyvim 2.0.24 na PyPi
https://pypi.org/project/pyvim/ - vim2elvis (1)
https://www.root.cz/clanky/vim2elvis-1/ - vim2elvis (2)
https://www.root.cz/clanky/vim2elvis-2/ - Seriál Textový editor Vim jako IDE
https://www.root.cz/serialy/textovy-editor-vim-jako-ide/ - Obsah Rootu označený nálepkou Vim
https://www.root.cz/n/vim/ - Atom: moderní textový editor
https://www.root.cz/clanky/atom-moderni-textovy-editor/ - Atom: moderní textový editor (dokončení)
https://www.root.cz/clanky/atom-moderni-textovy-editor-dokonceni/ - Why I switched to VIM from Visual Studio Code
https://freshman.tech/from-vscode-to-vim/ - VSCodeVim
https://marketplace.visualstudio.com/items?itemName=vscodevim.vim - VSCodeVim/Vim na GitHubu
https://github.com/VSCodeVim/Vim - How Vim killed Atom and VSCode on my Machine
https://medium.com/@aswinmohanme/how-vim-killed-atom-and-vscode-723a68ad59dc - tree-sitter
https://github.com/tree-sitter/tree-sitter - Introduction: tree-siter
https://tree-sitter.github.io/tree-sitter/ - tree-siter: Queries
https://tree-sitter.github.io/tree-sitter/syntax-highlighting#queries - Textový editor Vim jako IDE
https://www.root.cz/clanky/textovy-editor-vim-jako-ide/ - Textový editor Vim jako IDE (2.část)
https://www.root.cz/clanky/textovy-editor-vim-jako-ide-2-cast/ - Textový editor Vim jako IDE (3.část)
https://www.root.cz/clanky/textovy-editor-vim-jako-ide-3-cast/ - Textový editor Vim jako IDE (4.část)
https://www.root.cz/clanky/textovy-editor-vim-jako-ide-4-cast/ - Textový editor Vim jako IDE (5.část)
https://www.root.cz/clanky/textovy-editor-vim-jako-ide-5-cast/ - A Comprehensive Introduction to Tree-sitter
https://derek.stride.host/posts/comprehensive-introduction-to-tree-sitter - Guide to your first Tree-sitter grammar
https://gist.github.com/Aerijo/df27228d70c633e088b0591b8857eeef - LR parser (Wikipedia)
https://en.wikipedia.org/wiki/LR_parser - GLR Parser (Wikipedia)
https://en.wikipedia.org/wiki/GLR_parser