ast-grep(sg) — это инструмент CLI для структурного поиска, проверки и переписывания кода.
ast-grep — это инструмент на основе AST для поиска кода по коду шаблона. Думайте об этом как о своем старом друге grep
, но вместо текста он соответствует узлам AST. Вы можете писать шаблоны, как если бы вы писали обычный код. Он будет соответствовать всему коду, имеющему одинаковую синтаксическую структуру. Вы можете использовать знак $
+ заглавные буквы в качестве подстановочного знака, например $MATCH
, для соответствия любому отдельному узлу AST. Думайте об этом как о точке REGEX .
, за исключением того, что он не текстовый.
Попробуйте онлайн-игровую площадку на вкус!
Больше скриншотов смотрите на сайте.
Вы можете установить его из npm, pip, Cargo, Homebrew, Scoop или MacPorts!
npm install --global @ast-grep/cli
pip install ast-grep-cli
cargo install ast-grep --locked
# install via homebrew, thank @henryhchchc
brew install ast-grep
# install via scoop, thank @brian6932
scoop install main/ast-grep
# install via MacPorts
sudo port install ast-grep
Или вы можете собрать ast-grep из исходного кода. Вам нужно установить Rustup, клонировать репозиторий и затем
cargo install --path ./crates/cli --locked
Пакеты доступны и на других платформах.
ast-grep имеет следующую форму.
sg --pattern 'var code = $PATTERN' --rewrite 'let code = new $PATTERN' --lang ts
sg -p ' $A && $A() ' -l ts -r ' $A?.() '
sg -p ' new Zodios($URL, $CONF as const,) ' -l ts -r ' new Zodios($URL, $CONF) ' -i
Если вы находите ast-grep интересным и полезным для вашей работы, купите мне кофе, чтобы я мог уделять больше времени проекту!
Ядро ast-grep — это алгоритм поиска и замены кода, основанный на абстрактном синтаксическом дереве, созданном Tree-Sitter. Это может помочь вам интуитивно выполнять легкий статический анализ и масштабные манипуляции с кодом.
Основные моменты:
Интуитивно понятный шаблон для поиска и замены AST. Шаблон ast-grep выглядит как обычный код, который вы пишете каждый день (можно сказать, что шаблон изоморфен коду).
jQuery-подобный API для обхода и манипулирования AST.
Конфигурация YAML для написания новых правил проверки или модификации кода.
Написан на компилируемом языке, с синтаксическим анализом на основе дерева и использованием нескольких ядер.
Красивый интерфейс командной строки :)
Цель ast-grep состоит в том, чтобы демократизировать магию абстрактного синтаксического дерева и освободить его от громоздкого программирования AST!