O que é o tree-sitter-cli?
O tree-sitter-cli é a ferramenta de linha de comando para desenvolver parsers do Tree-sitter. O Tree-sitter é um gerador de parsers e uma biblioteca de análise incremental: ele constrói a árvore sintática concreta de um arquivo-fonte e a atualiza com pouco custo enquanto você edita, e é por isso que Neovim, Helix, Zed e GitHub o usam para destaque de sintaxe, dobramento, objetos de texto e navegação de código. As gramáticas nascem nessa CLI: ela cria o repositório de uma gramática, gera um parser em C a partir do grammar.js, compila esse parser como biblioteca compartilhada ou WebAssembly, roda os testes de corpus, analisa, consulta, destaca e extrai tags de arquivos, e sobe um playground web. É um único binário em Rust, e o comando que você digita é tree-sitter.
tree-sitter.json que o tree-sitter init escreve e o runtime QuickJS embutido por trás de --js-runtime native chegaram todos depois das versões congeladas nos arquivos oficiais. Um repositório de gramática gerado com uma CLI atual espera a mesma versão ou uma mais nova na máquina de cada colaborador e na CI. O 0.22.6 do Debian stable e o 0.20.8 do Ubuntu 24.04 são anteriores a quase tudo isso, e os binários Linux do upstream exigem glibc 2.39, então nem chegam a iniciar no Debian 12 ou no Ubuntu 22.04.
⚡ Principais recursos do tree-sitter-cli
🧱 Repositório de gramática em um comando
O tree-sitter init faz algumas perguntas e escreve grammar.js, tree-sitter.json e os arquivos de bindings e de pacote, então a gramática já pode ser publicada para Node.js, Python, Rust, Go, Swift e C desde o primeiro dia.
⚙️ Geração de parsers
O tree-sitter generate transforma o grammar.js em um parser C sem dependências em src/ e aponta os conflitos. A gramática roda com node ou, com --js-runtime native, com o runtime QuickJS embutido.
🔨 Builds nativos e WebAssembly
O tree-sitter build compila o parser como biblioteca compartilhada que os editores carregam, e --wasm produz um módulo .wasm para o web-tree-sitter e o playground.
🧪 Testes de corpus
O tree-sitter test analisa os exemplos em test/corpus, compara as árvores com as S-expressions esperadas e roda também os testes de destaque e de tags. O --update reescreve o esperado depois de uma mudança intencional.
🔍 Analisar, consultar, destacar, extrair tags
parse imprime a árvore sintática, query executa uma consulta .scm e lista as capturas, highlight renderiza no terminal ou em HTML, e tags extrai definições e referências.
🛝 Playground web
O tree-sitter playground serve uma página local onde você digita código, vê a árvore se atualizar enquanto edita e roda consultas nela: o jeito mais rápido de entender por que uma regra não casa.
apt upgrade mantém você na versão mais recente.
📦 Instalação a partir do deb.griffo.io
Passo 1: Adicionar o repositório
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🆓 Existe um espelho grátis para sempre. deb-free.griffo.io distribui pacotes grátis para sempre — sem conta, sem assinatura, no máximo 2 meses atrás do upstream, correções de segurança imediatas. Hoje ele traz cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud e Zed; tree-sitter-cli não está entre elas, então o repositório acima é a única forma de instalar hoje — peça e ela pode ser adicionada.
🧩 Sobre a opção extrepo. extrepo é a ferramenta do próprio Debian para repositórios externos: ela escreve o arquivo de sources e instala a chave de assinatura para você, conferindo a chave contra metadados assinados antes de usá-la. Este repositório está registrado nela como griffo, e o espelho gratuito para sempre como griffo-free, então no Debian (bookworm, trixie, forky e sid) os comandos acima são toda a configuração.
O extrepo configura apenas o arquivo de sources e a chave: as credenciais de uma assinatura continuam indo em /etc/apt/auth.conf.d/deb.griffo.io.conf. O Ubuntu não é coberto, porque o extrepo publica metadados só para as suítes do Debian: lá, use os comandos com sudo ou como root.
Passo 2: Instalar o tree-sitter-cli
# Instalar o tree-sitter-cli mais recente
sudo apt install tree-sitter-cli
# Verificar a instalação, o comando é tree-sitter e não tree-sitter-cli
tree-sitter --version# Instalar o tree-sitter-cli mais recente
apt install tree-sitter-cli
# Verificar a instalação, o comando é tree-sitter e não tree-sitter-cli
tree-sitter --versionPasso 3: Criar sua primeira gramática
# O comando é tree-sitter. Compilar e testar parsers exige um compilador C,
# e o generate roda o grammar.js com node, a não ser que você escolha o runtime embutido
sudo apt install build-essential nodejs
# Criar o repositório de uma gramática respondendo a algumas perguntas
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# Gerar o parser, compilar e rodar os testes de corpus
tree-sitter generate
tree-sitter build
tree-sitter test
# Os autocompletes de bash, zsh, fish e nushell vêm no pacote
tree-sitter --help# O comando é tree-sitter. Compilar e testar parsers exige um compilador C,
# e o generate roda o grammar.js com node, a não ser que você escolha o runtime embutido
apt install build-essential nodejs
# Criar o repositório de uma gramática respondendo a algumas perguntas
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# Gerar o parser, compilar e rodar os testes de corpus
tree-sitter generate
tree-sitter build
tree-sitter test
# Os autocompletes de bash, zsh, fish e nushell vêm no pacote
tree-sitter --help🎯 Exemplos básicos de uso
Trabalhando em uma gramática:
# Regerar a cada mudança no grammar.js, sem node, com o QuickJS embutido
tree-sitter generate --js-runtime native
# Rodar só os testes cujo nome casa e aceitar a nova saída como esperada
tree-sitter test --include 'function'
tree-sitter test --update
# Compilar uma biblioteca compartilhada, ou um módulo WebAssembly para o web-tree-sitter
tree-sitter build -o mylang.so
tree-sitter build --wasmAnalisando arquivos:
# Imprimir a árvore sintática de um arquivo
tree-sitter parse examples/hello.mylang
# Analisar muitos arquivos em silêncio e informar quantos deram certo
tree-sitter parse examples/*.mylang --quiet --stat
# Cronometrar uma análise, útil quando uma mudança na gramática deixa tudo lento
tree-sitter parse examples/big.mylang --timeConsultas, destaque e tags:
# Rodar uma consulta sobre um arquivo e listar o que ela captura
tree-sitter query queries/highlights.scm examples/hello.mylang
# Destacar um arquivo no terminal, ou gerar uma página HTML independente
tree-sitter highlight examples/hello.mylang
tree-sitter highlight --html examples/hello.mylang > hello.html
# Extrair definições e referências com a consulta de tags
tree-sitter tags examples/hello.mylangGramáticas existentes e o playground:
# Trabalhar em uma gramática existente
git clone https://github.com/tree-sitter/tree-sitter-json
cd tree-sitter-json
tree-sitter generate && tree-sitter test
# Criar um arquivo de configuração e listar suas gramáticas em parser-directories
tree-sitter init-config
# Compilar para WebAssembly e abrir o playground interativo no navegador
tree-sitter build --wasm
tree-sitter playground🔧 Integrações com outras ferramentas
A CLI do Tree-sitter fica entre uma gramática e as ferramentas que a carregam:
- Neovim: o branch main do nvim-treesitter compila os parsers com a CLI
tree-sittere pede uma versão recente, mais nova que a do Debian stable ou do Ubuntu LTS - Helix: destaque, indentação e objetos de texto são consultas do Tree-sitter; confira uma mudança em
highlights.scmcomtree-sitter queryantes de recompilar as gramáticas comhx --grammar build - Zed: as extensões de linguagem fixam um repositório de gramática e um commit, então gere e teste a gramática localmente antes de atualizar essa referência
- CI:
tree-sitter generateseguido degit diff --exit-code src/reprova um pull request cujo parser commitado está desatualizado - Registros de pacotes: os bindings que o
tree-sitter initescreve permitem publicar a mesma gramática no npm, PyPI e crates.io
🚀 Por que escolher o deb.griffo.io?
- Debian oficial: traz o tree-sitter-cli, mas o Debian 13 tem a 0.22.6, anterior ao ABI de parsers e à estrutura de
tree-sitter.jsonque as gramáticas atuais usam, e o Debian 12 não tem pacote nenhum - Binário upstream: atual, mas os binários Linux pré-compilados do upstream são linkados contra a glibc 2.39, então não iniciam no Debian 12 nem no Ubuntu 22.04, e ficam fora do apt em
/usr/local/bin - cargo ou npm:
cargo install tree-sitter-cliexige uma toolchain Rust e uma compilação completa a cada atualização, e o pacote do npm baixa o mesmo binário pré-compilado, com a mesma exigência de glibc - deb.griffo.io: versão mais recente com atualizações automáticas
- ✅ O mesmo pacote, mais novo: mesmo nome do
tree-sitter-clido próprio Debian e o mesmo caminho/usr/bin/tree-sitter, então o apt trata como atualização e não como uma segunda instalação - ✅ Compilado a partir da tag upstream: compilado com cargo a partir do código-fonte com tag do upstream no Ubuntu 22.04, porque os binários Linux pré-compilados do upstream exigem glibc 2.39; este roda em todas as suítes a partir do Bookworm e do Jammy
- ✅ Atualizações automáticas: os pacotes são atualizados poucas horas após cada lançamento upstream
- ✅ Pacote completo: o binário
tree-sittercompilado a partir da tag de código-fonte do upstream, autocompletes de bash, zsh, fish e nushell, e nenhuma dependência além delibc6elibgcc-s1 - ✅ Quatro arquiteturas: amd64, arm64, armhf e i386, então o Raspberry Pi e o notebook antigo de 32 bits recebem o mesmo tree-sitter
- ✅ Multi-distribuição: funciona no Bookworm, Trixie, Forky e Sid
- ✅ Manutenção simples: atualizações com os comandos apt de sempre
📦 Repositório de build do pacote
Os pacotes Debian são construídos e mantidos automaticamente neste repositório do GitHub:
- 🌲 tree-sitter-cli-debian - Builds dos últimos lançamentos
🔗 Pacotes relacionados
Também disponíveis no deb.griffo.io:
- Neovim - O nvim-treesitter compila seus parsers com esta CLI
- Helix - Editor cujo destaque e objetos de texto são consultas do Tree-sitter
- Zed - Editor cujas extensões de linguagem trazem gramáticas do Tree-sitter
- difftastic - Diff estrutural construído sobre parsers do Tree-sitter
