Что такое tree-sitter-cli?
tree-sitter-cli — это инструмент командной строки для разработки парсеров Tree-sitter. Tree-sitter — генератор парсеров и библиотека инкрементального разбора: он строит конкретное синтаксическое дерево исходного файла и дёшево обновляет его по мере редактирования, поэтому Neovim, Helix, Zed и GitHub используют его для подсветки, сворачивания, текстовых объектов и навигации по коду. Грамматики создаются именно этой CLI: она создаёт репозиторий грамматики, генерирует парсер на C из grammar.js, компилирует его в разделяемую библиотеку или WebAssembly, запускает тесты корпуса, разбирает, опрашивает, подсвечивает и размечает тегами файлы, а также поднимает веб-playground. Это один бинарник на Rust, а команда, которую вы вводите, — tree-sitter.
tree-sitter.json, которую пишет tree-sitter init, и встроенная среда QuickJS за --js-runtime native появились позже версий, замороженных в архивах. Репозиторий грамматики, сгенерированный актуальной CLI, ждёт такую же или более новую версию на машине каждого участника и в CI. Версия 0.22.6 в Debian stable и 0.20.8 в Ubuntu 24.04 старше большей части этих изменений, а Linux-бинарники upstream требуют glibc 2.39 и попросту не запускаются в Debian 12 и Ubuntu 22.04.
⚡ Ключевые возможности tree-sitter-cli
🧱 Репозиторий грамматики одной командой
tree-sitter init задаёт несколько вопросов и записывает grammar.js, tree-sitter.json, а также файлы привязок и пакетов, так что грамматику можно публиковать для Node.js, Python, Rust, Go, Swift и C с первого дня.
⚙️ Генерация парсеров
tree-sitter generate превращает grammar.js в парсер на C без зависимостей в src/ и сообщает о конфликтах. Грамматика выполняется в node или, с --js-runtime native, во встроенной среде QuickJS.
🔨 Нативные сборки и WebAssembly
tree-sitter build компилирует парсер в разделяемую библиотеку, которую загружают редакторы, а --wasm создаёт модуль .wasm для web-tree-sitter и playground.
🧪 Тесты корпуса
tree-sitter test разбирает примеры из test/corpus, сравнивает деревья с ожидаемыми S-выражениями и заодно запускает тесты подсветки и тегов. --update переписывает ожидания после намеренного изменения.
🔍 Разбор, запросы, подсветка, теги
parse печатает синтаксическое дерево, query выполняет запрос .scm и перечисляет захваты, highlight выводит подсветку в терминал или HTML, а tags извлекает определения и ссылки.
🛝 Веб-playground
tree-sitter playground поднимает локальную страницу: вводите код, смотрите, как дерево обновляется при редактировании, и выполняйте на нём запросы. Это самый быстрый способ понять, почему правило не срабатывает.
apt upgrade держит вас на последней версии.
📦 Установка из deb.griffo.io
Шаг 1: Добавить репозиторий
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🆓 Есть вечно бесплатное зеркало. deb-free.griffo.io раздаёт пакеты бесплатно навсегда — без аккаунта, без подписки, не более 2 месяцев позади upstream, исправления безопасности сразу. Сейчас там cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud и Zed; tree-sitter-cli среди них нет, поэтому репозиторий выше — единственный способ установить его сегодня; попросите, и его можно добавить.
🧩 О варианте extrepo. extrepo — штатный инструмент Debian для внешних репозиториев: он создаёт файл sources и устанавливает ключ подписи, предварительно сверив его с подписанными метаданными. Этот репозиторий зарегистрирован в нём как griffo, а бесплатное навсегда зеркало — как griffo-free, поэтому в Debian (bookworm, trixie, forky и sid) команды выше и есть вся настройка.
extrepo настраивает только файл sources и ключ — учётные данные подписки по-прежнему прописываются в /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu не поддерживается, так как extrepo публикует метаданные только для выпусков Debian: там используйте команды с sudo или от root.
Шаг 2: Установить tree-sitter-cli
# Установить последнюю версию tree-sitter-cli
sudo apt install tree-sitter-cli
# Проверить установку: команда называется tree-sitter, а не tree-sitter-cli
tree-sitter --version# Установить последнюю версию tree-sitter-cli
apt install tree-sitter-cli
# Проверить установку: команда называется tree-sitter, а не tree-sitter-cli
tree-sitter --versionШаг 3: Создать первую грамматику
# Команда называется tree-sitter. Для сборки и тестов парсеров нужен компилятор C,
# а generate выполняет grammar.js в node, если не выбрать встроенную среду
sudo apt install build-essential nodejs
# Создать репозиторий грамматики, ответив на несколько вопросов
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# Сгенерировать парсер, скомпилировать его и запустить тесты корпуса
tree-sitter generate
tree-sitter build
tree-sitter test
# Автодополнение для bash, zsh, fish и nushell входит в пакет
tree-sitter --help# Команда называется tree-sitter. Для сборки и тестов парсеров нужен компилятор C,
# а generate выполняет grammar.js в node, если не выбрать встроенную среду
apt install build-essential nodejs
# Создать репозиторий грамматики, ответив на несколько вопросов
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# Сгенерировать парсер, скомпилировать его и запустить тесты корпуса
tree-sitter generate
tree-sitter build
tree-sitter test
# Автодополнение для bash, zsh, fish и nushell входит в пакет
tree-sitter --help🎯 Базовые примеры использования
Работа над грамматикой:
# Перегенерировать после каждой правки grammar.js, без node, на встроенном QuickJS
tree-sitter generate --js-runtime native
# Запустить только тесты с подходящим именем, затем принять новый вывод как ожидаемый
tree-sitter test --include 'function'
tree-sitter test --update
# Собрать разделяемую библиотеку или модуль WebAssembly для web-tree-sitter
tree-sitter build -o mylang.so
tree-sitter build --wasmРазбор файлов:
# Напечатать синтаксическое дерево файла
tree-sitter parse examples/hello.mylang
# Тихо разобрать много файлов и сообщить, сколько прошло успешно
tree-sitter parse examples/*.mylang --quiet --stat
# Замерить время разбора, полезно, когда правка грамматики всё замедлила
tree-sitter parse examples/big.mylang --timeЗапросы, подсветка и теги:
# Выполнить запрос к файлу и перечислить захваты
tree-sitter query queries/highlights.scm examples/hello.mylang
# Подсветить файл в терминале или отрисовать отдельную HTML-страницу
tree-sitter highlight examples/hello.mylang
tree-sitter highlight --html examples/hello.mylang > hello.html
# Извлечь определения и ссылки запросом тегов
tree-sitter tags examples/hello.mylangСуществующие грамматики и playground:
# Работать с существующей грамматикой
git clone https://github.com/tree-sitter/tree-sitter-json
cd tree-sitter-json
tree-sitter generate && tree-sitter test
# Создать файл конфигурации и перечислить в parser-directories каталоги с грамматиками
tree-sitter init-config
# Собрать в WebAssembly и открыть интерактивный playground в браузере
tree-sitter build --wasm
tree-sitter playground🔧 Интеграция с другими инструментами
CLI Tree-sitter стоит между грамматикой и инструментами, которые её загружают:
- Neovim: ветка main nvim-treesitter компилирует парсеры с помощью CLI
tree-sitterи требует свежий выпуск, новее, чем в Debian stable или Ubuntu LTS - Helix: подсветка, отступы и текстовые объекты — это запросы Tree-sitter; проверьте правку
highlights.scmчерезtree-sitter query, прежде чем пересобирать грамматики командойhx --grammar build - Zed: языковые расширения закрепляют репозиторий грамматики и коммит, поэтому сгенерируйте и протестируйте грамматику локально, прежде чем обновлять закрепление
- CI:
tree-sitter generate, а затемgit diff --exit-code src/проваливают pull request, в котором закоммиченный парсер устарел - Реестры пакетов: привязки, которые пишет
tree-sitter init, позволяют опубликовать одну грамматику в npm, PyPI и crates.io
🚀 Почему стоит выбрать deb.griffo.io?
- Официальный Debian: tree-sitter-cli есть, но в Debian 13 это 0.22.6, старше ABI парсеров и структуры
tree-sitter.jsonсовременных грамматик, а в Debian 12 пакета нет вовсе - Бинарник upstream: свежий, но готовые Linux-бинарники upstream собраны под glibc 2.39, поэтому не запускаются в Debian 12 и Ubuntu 22.04 и живут вне apt в
/usr/local/bin - cargo или npm:
cargo install tree-sitter-cliтребует тулчейн Rust и полной компиляции при каждом обновлении, а пакет npm скачивает тот же готовый бинарник с тем же требованием к glibc - deb.griffo.io: последняя версия с автоматическими обновлениями
- ✅ Тот же пакет, но новее: то же имя, что у собственного
tree-sitter-cliв Debian, и тот же путь/usr/bin/tree-sitter, поэтому apt считает его обновлением, а не второй установкой - ✅ Собран из тега upstream: скомпилирован cargo из исходников тега upstream на Ubuntu 22.04, потому что готовые Linux-бинарники upstream требуют glibc 2.39; этот работает на всех выпусках начиная с Bookworm и Jammy
- ✅ Автоматические обновления: пакеты обновляются в течение нескольких часов после релиза upstream
- ✅ Полный пакет: бинарник
tree-sitter, собранный из тега исходников upstream, автодополнение для bash, zsh, fish и nushell и никаких зависимостей, кромеlibc6иlibgcc-s1 - ✅ Четыре архитектуры: amd64, arm64, armhf и i386 — Raspberry Pi и старый 32-битный ноутбук получают один и тот же tree-sitter
- ✅ Много дистрибутивов: работает на Bookworm, Trixie, Forky и Sid
- ✅ Простое обслуживание: обновления обычными командами apt
📦 Репозиторий сборки пакета
Пакеты для Debian собираются и поддерживаются автоматически в этом репозитории GitHub:
- 🌲 tree-sitter-cli-debian - Сборки последних выпусков
🔗 Похожие пакеты
Также доступны в deb.griffo.io:
- Neovim - nvim-treesitter собирает парсеры этой CLI
- Helix - Редактор, у которого подсветка и текстовые объекты — запросы Tree-sitter
- Zed - Редактор, языковые расширения которого несут грамматики Tree-sitter
- difftastic - Структурный diff на парсерах Tree-sitter
