Zona de juegos | Tutoría | Documentos
GritQL es un lenguaje de consulta declarativo para buscar y modificar código fuente.
Lea la documentación, el tutorial interactivo o ejecute grit --help
.
Instale la CLI de Grit:
curl -fsSL https://docs.grit.io/install | bash
Busque todas sus llamadas console.log
poniendo el patrón deseado entre comillas invertidas:
grit apply '`console.log($_)`'
Reemplace console.log
con winston.log
, usando =>
para crear reescrituras:
grit apply '`console.log($msg)` => `winston.log($msg)`'
Guarde el patrón en un archivo grit.yaml
y excluya los casos de prueba en una cláusula donde:
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
Ejecute grit check
para hacer cumplir sus patrones como pelusas personalizadas.
grit check
console.log
, a menos que estén dentro de un bloque try-catch `console.log($log)` => . where {
$log <: not within `try { $_ } catch { $_ }`
}
`$instance.oldMethod($args)` => `$instance.newMethod($args)` where {
$program <: contains `$instance = new TargetClass($_)`
}
Se pueden encontrar muchos más ejemplos en la biblioteca estándar GritQL.
Los patrones se pueden combinar para crear consultas complejas, incluidos grandes refactores.
GritQL proviene de nuestra experiencia en la realización de migraciones y refactorizaciones a gran escala.
Por lo general, las migraciones comienzan con un trabajo exploratorio para determinar el alcance del problema, a menudo mediante búsquedas grep simples. Es fácil empezar con ellos, pero la mayoría de las migraciones terminan acumulando requisitos adicionales, como garantizar que se importen los paquetes correctos y excluir los casos que no tienen una ruta de migración viable.
Al final, cualquier migración compleja termina siendo un programa codemod completo escrito con una herramienta como jscodeshift. Esto viene con sus propios problemas:
GritQL es nuestro intento de desarrollar un punto medio poderoso:
$metavariables
para los agujeros que desee representar.GritQL utiliza tree-sitter para todos los analizadores de idiomas y se beneficia enormemente del ecosistema Rust.
GritQL se publica bajo la licencia MIT.
Las contribuciones son bienvenidas. Para comenzar, consulte las pautas de contribución .
También puedes unirte a nosotros en Discord .