tree-sitter

FrontendЧастота употребления: высокая· Сложность: 3/5· Актуальность: 5/5· Тренд: растёт

tree-sitter — библиотека инкрементального парсинга, которая строит конкретное синтаксическое дерево исходного кода и обновляет его за время, пропорциональное изменённому фрагменту.

Подробно

tree-sitter — генератор парсеров и runtime-библиотека (написанная на C, с биндингами для Rust, Python, Node.js, WASM и др.), которая строит concrete syntax tree с сохранением всех токенов, комментариев и даже синтаксически некорректного кода благодаря механизму error recovery. Ключевое свойство — инкрементальность: при редактировании файла дерево перестраивается только для изменённых узлов, что позволяет подсвечивать синтаксис и обновлять структуру кода с задержкой в единицы миллисекунд даже в больших файлах. Парсеры генерируются из грамматики, описанной в grammar.js, и существуют для сотен языков. На tree-sitter построены подсветка синтаксиса и структурное редактирование в Neovim, Helix, Zed, Emacs, Atom (где он и появился), навигация по коду на GitHub и GitLab, а также инструменты статического анализа, линтеры и парсеры в IDE-плагинах. Дополнительно к дереву можно задавать queries на S-expression для поиска узлов, что используется для highlights, injections, folds и локальных правил линтинга.

Примеры употребления

  • tree-sitter generate && tree-sitter parse example.js — сборка грамматики и вывод дерева разбора
  • В Neovim: require('nvim-treesitter.configs').setup({ highlight = { enable = true } })
  • Python: import tree_sitter_python; parser = Parser(Language(tree_sitter_python.language())); tree = parser.parse(source_bytes)
  • Запрос на S-expression для поиска функций: (function_declaration name: (identifier) @name)
#парсинг #инкрементальный парсер #редакторы кода #Neovim

Источники