Aire de jeux | Tutoriel | Documents
GritQL est un langage de requête déclaratif permettant de rechercher et de modifier le code source.
Lisez la documentation, le didacticiel interactif ou exécutez grit --help
.
Installez la CLI Grit :
curl -fsSL https://docs.grit.io/install | bash
Recherchez tous vos appels console.log
en mettant le modèle souhaité entre les backticks :
grit apply '`console.log($_)`'
Remplacez console.log
par winston.log
, en utilisant =>
pour créer des réécritures :
grit apply '`console.log($msg)` => `winston.log($msg)`'
Enregistrez le modèle dans un fichier grit.yaml
et excluez les cas de test dans une clause 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
Exécutez grit check
pour appliquer vos modèles en tant que charpies personnalisées.
grit check
console.log
, sauf s'ils se trouvent dans un bloc try-catch `console.log($log)` => . where {
$log <: not within `try { $_ } catch { $_ }`
}
`$instance.oldMethod($args)` => `$instance.newMethod($args)` where {
$program <: contains `$instance = new TargetClass($_)`
}
De nombreux autres exemples peuvent être trouvés dans la bibliothèque standard GritQL.
Les modèles peuvent être combinés pour créer des requêtes complexes, y compris de grands refactors.
GritQL est issu de nos expériences en matière de refactorisations et de migrations à grande échelle.
Habituellement, les migrations commencent par un travail exploratoire visant à déterminer l'étendue du problème, souvent à l'aide de simples recherches grep. Il est facile de démarrer ces opérations, mais la plupart des migrations finissent par accumuler des exigences supplémentaires, comme s'assurer que les bons packages sont importés et exclure les cas qui ne disposent pas d'un chemin de migration viable.
Finalement, toute migration complexe finit par être un programme codemod complet écrit avec un outil comme jscodeshift. Cela vient avec ses propres problèmes :
GritQL est notre tentative de développer un terrain d'entente puissant :
$metavariables
pour les trous que vous souhaitez représenter.GritQL utilise Tree-Sitter pour tous les analyseurs de langage et bénéficie grandement de l'écosystème Rust.
GritQL est publié sous licence MIT.
Les contributions sont les bienvenues. Pour commencer, consultez les directives de contribution .
Vous pouvez également nous rejoindre sur Discord .