Детская площадка | Учебное пособие | Документы
GritQL — это декларативный язык запросов для поиска и изменения исходного кода.
Прочтите документацию, интерактивное руководство или запустите grit --help
.
Установите Grit CLI:
curl -fsSL https://docs.grit.io/install | bash
Найдите все вызовы console.log
, поместив нужный шаблон в обратные кавычки:
grit apply '`console.log($_)`'
Замените console.log
на winston.log
, используя =>
для перезаписи:
grit apply '`console.log($msg)` => `winston.log($msg)`'
Сохраните шаблон в файле grit.yaml
и исключите тестовые примеры в предложенииwhere:
cat << 'EOF' > .grit/grit.yaml
patterns:
- name: use_winston
level: error
body: |
`console.log($msg)` => `winston.log($msg)` where {
$msg <: not within or { `it($_, $_)`, `test($_, $_)`, `describe($_, $_)` }
}
EOF
grit apply use_winston
Запустите grit check
чтобы применить ваши шаблоны как пользовательские проверки.
grit check
console.log
, если они не находятся внутри блока try-catch. `console.log($log)` => . where {
$log <: not within `try { $_ } catch { $_ }`
}
`$instance.oldMethod($args)` => `$instance.newMethod($args)` where {
$program <: contains `$instance = new TargetClass($_)`
}
Еще больше примеров можно найти в стандартной библиотеке GritQL.
Шаблоны можно комбинировать для создания сложных запросов, включая крупные рефакторинги.
GritQL основан на нашем опыте проведения крупномасштабных рефакторингов и миграций.
Обычно миграция начинается с исследовательской работы по выяснению масштаба проблемы — часто с использованием простого поиска с помощью grep. С этого легко начать, но большинство миграций в конечном итоге приводят к накоплению дополнительных требований, таких как обеспечение импорта правильных пакетов и исключение случаев, для которых нет жизнеспособного пути миграции.
В конце концов, любая сложная миграция превращается в полноценную программу codemod, написанную с помощью такого инструмента, как jscodeshift. Это связано со своими проблемами:
GritQL — это наша попытка разработать мощную золотую середину:
$metavariables
для дыр, которые вы хотите отобразить.GritQL использует Tree-sitter для всех парсеров языка и получает большую выгоду от экосистемы Rust.
GritQL выпускается под лицензией MIT.
Взносы приветствуются. Для начала ознакомьтесь с правилами участия .
Вы также можете присоединиться к нам в Discord .