Qu'est-ce que tree-sitter-cli ?
tree-sitter-cli est l'outil en ligne de commande pour développer des parseurs Tree-sitter. Tree-sitter est un générateur de parseurs et une bibliothèque d'analyse incrémentale : il construit l'arbre syntaxique concret d'un fichier source et le met à jour à moindre coût pendant l'édition, ce qui explique pourquoi Neovim, Helix, Zed et GitHub s'en servent pour la coloration, le repliement, les objets textuels et la navigation dans le code. Les grammaires se fabriquent avec cette CLI : elle crée le dépôt d'une grammaire, génère un parseur C à partir de grammar.js, le compile en bibliothèque partagée ou en WebAssembly, lance les tests de corpus, analyse, interroge, colore et étiquette des fichiers, et sert un playground web. C'est un binaire Rust unique, et la commande que vous tapez est tree-sitter.
tree-sitter.json qu'écrit tree-sitter init et le runtime QuickJS intégré derrière --js-runtime native sont tous arrivés après les versions figées dans les archives. Un dépôt de grammaire généré avec une CLI récente attend la même version ou une plus récente sur la machine de chaque contributeur et dans la CI. La 0.22.6 de Debian stable et la 0.20.8 d'Ubuntu 24.04 précèdent l'essentiel de ces changements, et les binaires Linux d'upstream exigent glibc 2.39 : ils ne démarrent même pas sur Debian 12 ni sur Ubuntu 22.04.
⚡ Fonctions clés de tree-sitter-cli
🧱 Un dépôt de grammaire en une commande
tree-sitter init pose quelques questions et écrit grammar.js, tree-sitter.json ainsi que les fichiers de bindings et de paquets : la grammaire est publiable pour Node.js, Python, Rust, Go, Swift et C dès le premier jour.
⚙️ Génération de parseurs
tree-sitter generate transforme grammar.js en un parseur C sans dépendance dans src/ et signale les conflits. La grammaire s'exécute avec node ou, via --js-runtime native, avec le runtime QuickJS intégré.
🔨 Builds natifs et WebAssembly
tree-sitter build compile le parseur en bibliothèque partagée que chargent les éditeurs, et --wasm produit un module .wasm pour web-tree-sitter et le playground.
🧪 Tests de corpus
tree-sitter test analyse les exemples de test/corpus, compare les arbres aux S-expressions attendues et lance aussi les tests de coloration et de tags. --update réécrit les attentes après un changement voulu.
🔍 Analyser, interroger, colorer, étiqueter
parse affiche l'arbre syntaxique, query exécute une requête .scm et liste ses captures, highlight produit une sortie terminal ou HTML, et tags extrait définitions et références.
🛝 Playground web
tree-sitter playground sert une page locale où vous tapez du code, voyez l'arbre se mettre à jour pendant l'édition et lancez des requêtes dessus : le moyen le plus rapide de comprendre pourquoi une règle ne correspond pas.
apt upgrade vous maintient à jour.
📦 Installation depuis deb.griffo.io
Étape 1 : ajouter le dépôt
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Il existe un miroir gratuit pour toujours. deb-free.griffo.io distribue des paquets gratuitement pour toujours — sans compte, sans abonnement, au plus 2 mois derrière l'upstream, correctifs de sécurité immédiats. Il contient aujourd'hui cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud et Zed ; tree-sitter-cli n'en fait pas partie, le dépôt ci-dessus reste donc le seul moyen de l'installer — demandez-le et il pourra y être ajouté.
🧩 À propos de l'option extrepo. extrepo est l'outil de Debian pour les dépôts externes : il écrit le fichier de sources et installe la clé de signature à votre place, après l'avoir vérifiée face à des métadonnées signées. Ce dépôt y est enregistré sous le nom griffo, et le miroir gratuit à vie sous griffo-free ; sur Debian (bookworm, trixie, forky et sid), les commandes ci-dessus constituent donc toute l'installation.
extrepo ne met en place que le fichier de sources et la clé : les identifiants d'un abonnement vont toujours dans /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu n'est pas couvert, car extrepo ne publie de métadonnées que pour les suites Debian : utilisez-y les commandes avec sudo ou en root.
Étape 2 : installer tree-sitter-cli
# Installer le dernier tree-sitter-cli
sudo apt install tree-sitter-cli
# Vérifier l'installation, la commande est tree-sitter et non tree-sitter-cli
tree-sitter --version# Installer le dernier tree-sitter-cli
apt install tree-sitter-cli
# Vérifier l'installation, la commande est tree-sitter et non tree-sitter-cli
tree-sitter --versionÉtape 3 : créer votre première grammaire
# La commande est tree-sitter. Compiler et tester des parseurs demande un compilateur C,
# et generate exécute grammar.js avec node, sauf si vous choisissez le runtime intégré
sudo apt install build-essential nodejs
# Créer le dépôt d'une grammaire en répondant à quelques questions
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# Générer le parseur, le compiler et lancer les tests de corpus
tree-sitter generate
tree-sitter build
tree-sitter test
# Les complétions bash, zsh, fish et nushell sont livrées avec le paquet
tree-sitter --help# La commande est tree-sitter. Compiler et tester des parseurs demande un compilateur C,
# et generate exécute grammar.js avec node, sauf si vous choisissez le runtime intégré
apt install build-essential nodejs
# Créer le dépôt d'une grammaire en répondant à quelques questions
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# Générer le parseur, le compiler et lancer les tests de corpus
tree-sitter generate
tree-sitter build
tree-sitter test
# Les complétions bash, zsh, fish et nushell sont livrées avec le paquet
tree-sitter --help🎯 Exemples d'utilisation de base
Travailler sur une grammaire :
# Régénérer après chaque modification de grammar.js, sans node, avec le QuickJS intégré
tree-sitter generate --js-runtime native
# Lancer uniquement les tests dont le nom correspond, puis accepter la nouvelle sortie comme attendue
tree-sitter test --include 'function'
tree-sitter test --update
# Compiler une bibliothèque partagée, ou un module WebAssembly pour web-tree-sitter
tree-sitter build -o mylang.so
tree-sitter build --wasmAnalyser des fichiers :
# Afficher l'arbre syntaxique d'un fichier
tree-sitter parse examples/hello.mylang
# Analyser de nombreux fichiers sans bruit et indiquer combien ont réussi
tree-sitter parse examples/*.mylang --quiet --stat
# Chronométrer une analyse, utile quand un changement de grammaire ralentit tout
tree-sitter parse examples/big.mylang --timeRequêtes, coloration et tags :
# Exécuter une requête sur un fichier et lister ce qu'elle capture
tree-sitter query queries/highlights.scm examples/hello.mylang
# Colorer un fichier dans le terminal, ou produire une page HTML autonome
tree-sitter highlight examples/hello.mylang
tree-sitter highlight --html examples/hello.mylang > hello.html
# Extraire définitions et références avec la requête de tags
tree-sitter tags examples/hello.mylangGrammaires existantes et playground :
# Travailler sur une grammaire existante
git clone https://github.com/tree-sitter/tree-sitter-json
cd tree-sitter-json
tree-sitter generate && tree-sitter test
# Créer un fichier de configuration, puis y lister vos grammaires dans parser-directories
tree-sitter init-config
# Compiler en WebAssembly et ouvrir le playground interactif dans le navigateur
tree-sitter build --wasm
tree-sitter playground🔧 Intégrations avec d'autres outils
La CLI Tree-sitter se place entre une grammaire et les outils qui la chargent :
- Neovim : la branche main de nvim-treesitter compile les parseurs avec la CLI
tree-sitteret demande une version récente, plus récente que celle de Debian stable ou d'Ubuntu LTS - Helix : coloration, indentation et objets textuels sont des requêtes Tree-sitter ; vérifiez une modification de
highlights.scmavectree-sitter queryavant de recompiler les grammaires avechx --grammar build - Zed : les extensions de langage épinglent un dépôt de grammaire et un commit, donc générez et testez la grammaire en local avant de mettre à jour l'épinglage
- CI :
tree-sitter generatesuivi degit diff --exit-code src/fait échouer une pull request dont le parseur commité n'est plus à jour - Registres de paquets : les bindings qu'écrit
tree-sitter initpermettent de publier la même grammaire sur npm, PyPI et crates.io
🚀 Pourquoi choisir deb.griffo.io ?
- Debian officiel : fournit tree-sitter-cli, mais Debian 13 en est à 0.22.6, antérieure à l'ABI des parseurs et à la structure
tree-sitter.jsondes grammaires actuelles, et Debian 12 n'a aucun paquet - Binaire upstream : à jour, mais les binaires Linux précompilés d'upstream sont liés à glibc 2.39 : ils ne démarrent pas sur Debian 12 ni Ubuntu 22.04, et vivent hors d'apt dans
/usr/local/bin - cargo ou npm :
cargo install tree-sitter-cliexige une toolchain Rust et une compilation complète à chaque mise à jour, et le paquet npm télécharge le même binaire précompilé avec la même exigence glibc - deb.griffo.io : dernière version avec mises à jour automatiques
- ✅ Le même paquet, en plus récent : même nom que le
tree-sitter-clide Debian et même chemin/usr/bin/tree-sitter: apt le traite comme une mise à jour, pas comme une seconde installation - ✅ Construit depuis le tag upstream : compilé avec cargo à partir des sources taguées d'upstream sur Ubuntu 22.04, parce que les binaires Linux précompilés d'upstream exigent glibc 2.39 ; celui-ci tourne sur toutes les suites à partir de Bookworm et Jammy
- ✅ Mises à jour automatiques : les paquets sont mis à jour quelques heures après chaque version upstream
- ✅ Paquet complet : le binaire
tree-sitterconstruit depuis le tag des sources upstream, les complétions bash, zsh, fish et nushell, et aucune dépendance hormislibc6etlibgcc-s1 - ✅ Quatre architectures : amd64, arm64, armhf et i386 : le Raspberry Pi et le vieux portable 32 bits reçoivent le même tree-sitter
- ✅ Multi-distribution : fonctionne sur Bookworm, Trixie, Forky et Sid
- ✅ Maintenance simple : des mises à jour avec les commandes apt habituelles
📦 Dépôt de construction du paquet
Les paquets Debian sont construits et maintenus automatiquement dans ce dépôt GitHub :
- 🌲 tree-sitter-cli-debian - Constructions des dernières versions
🔗 Paquets associés
Également disponibles sur deb.griffo.io :
- Neovim - nvim-treesitter compile ses parseurs avec cette CLI
- Helix - Éditeur dont la coloration et les objets textuels sont des requêtes Tree-sitter
- Zed - Éditeur dont les extensions de langage embarquent des grammaires Tree-sitter
- difftastic - Diff structurel construit sur les parseurs Tree-sitter
