Совместимость с sg
vendor/bin/sg — оболочка совместимости в стиле ast-grep. Она поддерживает наиболее часто используемые флаги ast-grep и использует тот же движок Greph\Ast\AstSearcher, что и vendor/bin/greph -p. Подтвержденный набор возможностей составлен по результатам проверок исходного исполняемого файла sg и опубликован в разделе Дополнительно / Матрица возможностей.
Когда использовать
Используйте оболочку, если:
- У вас уже есть инструмент, агент или скрипт, который вызывает
sg. - Вам нужна готовая замена, работающая в средах, где нельзя установить сам
ast-grep. - Вам нужен удобный интерфейс ast-grep при установке только Composer.
Используйте нативный vendor/bin/greph -p, если:
- Вы пишете новый код, и вам не нужен формат ast-grep CLI.
- Вам нужен тот же набор флагов, что и в текстовом режиме (в нативной версии оба режима объединены).
Использование
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run — каноническая команда ast-grep. scan и rewrite — псевдонимы только для оболочек, повторяющие распространенный способ использования. Запуск без аргументов выполняет поиск за один проход:
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
Паттерны
Синтаксис шаблонов идентичен нативному поиску по AST. Полный справочник см. в разделе Режимы / Поиск по AST.
./vendor/bin/sg run --pattern 'array($$$ITEMS)' src
./vendor/bin/sg run --pattern '$obj->$method($$$ARGS)' src
./vendor/bin/sg run --pattern 'new $CLASS()' src
Переписывание
Оболочка поддерживает тот же процесс пробного запуска, интерактивного подтверждения и записи, что и нативное переписывание, с именами флагов ast-grep:
# Preview only (default)
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' src
# Apply without confirmation
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --update-all src
# Confirm each match
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --interactive src
# Wrapper-only aliases
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --interactive src
Вывод JSON
--json выводит ast-grep в формате JSON. Поддерживаются три стиля:
./vendor/bin/sg run --json --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=stream --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=compact --pattern 'dispatch($EVENT)' src
| Стиль | Формат |
|---|---|
--json (по умолчанию pretty) |
Один красиво отформатированный массив JSON |
--json=stream |
Одно совпадение на строку, разделенные символами новой строки JSON |
--json=compact |
Один компактный массив JSON |
Проверенный набор возможностей
Следующие флаги проверены на исходном исполняемом файле sg и включены в матрицу возможностей. Если у флага есть две формы записи (-p и --pattern, --glob и --globs), проверка использует одну из них, а оболочка разбирает обе как один и тот же параметр.
Флаги шаблонов
--pattern PATTERN(на верхнем уровне и внутриrun)-p PATTERN(псевдоним)--rewrite TEMPLATE-r TEMPLATE--lang NAME,-l NAME
Флаги совпадений
--files-with-matches--json(pretty,stream,compact)--update-all,-U
Флаги обхода
--no-ignore hidden(объединенная форма)--glob GLOB,--globs GLOB
Флаги исполнителей
-j N,--threads N
Принятые без проверки
Оболочка также принимает следующие флаги, но их проверка пока не включена в матрицу возможностей:
--no-ignoreсамо по себе или со значением, отличным отhidden--type NAME,--type-not NAME
Дополнительные параметры оболочки
Оболочка предоставляет несколько вспомогательных возможностей, которых нет в самом ast-grep:
- Псевдонимы
scanиrewriteдляrun - Флаг
--hidden(ast-grep включает его в--no-ignore hidden) - Псевдоним
--dry-runдля предварительного просмотра переписываний - Процесс подтверждения переписываний с помощью
--interactive
Ограничения
Оболочка sg для Greph охватывает возможности структурного поиска и переписывания, используемые большинством инструментов и агентов. Сейчас в ней недоступны следующие функции ast-grep:
- Файлы правил YAML (
--rule,--config) - Сканирование на нескольких языках, кроме PHP
- Преобразователи без шаблонов (
--debug-query,--inspect) - Интеграция с LSP
Если нужного флага нет, создайте задачу и приложите проверку, выполненную на исходном sg, а также ожидаемый результат.
Соответствие поведению
Оболочка стремится соответствовать поведению, а не байтовому представлению. Семантика вывода совпадает, но отдельные визуальные детали могут различаться. Проверки для матрицы возможностей сравнивают поля, важные для парсера (путь к файлу, номер строки, захваченный код, захваты, формат JSON), а не поток байтов.