Aplica ondas de mutaciones proporcionadas por otras herramientas, como linters o CodeMods.
Existen muchas líneas y la mayoría incluyen formas de --fix las fallas de reglas automáticamente. Esto es genial pero difícil de hacer por un par de razones:
automutate propone que los revestimientos solo propongan cómo arreglar las reglas, a través de un formato JSON estandarizado.
Tener un proyecto estandarizado de origen-agnóstico para aplicar mutaciones trae un par de beneficios:
automutate se reduce con el código común.En general, la detección de fallas de reglas es una preocupación separada de arreglarlas . Los revestimientos deben ejecutarse rápidamente sobre un conjunto de archivos de solo lectura, a menudo durante los procesos creados, mientras que los fijadores generalmente se ejecutan lentamente y modifican los archivos en la solicitud del usuario.
El algoritmo automutate principal se inicia en autoMutator.ts y se aplica principalmente en mutationsApplier.ts :
while mutationsWave = getMutationsWave ( ) :
for ( file , fileMutations ) of groupMutationsByFile ( mutationsWave ) :
for mutation of getNonOverlappingMutationsInReverse ( fileMutations ) :
applyMutation ( file , mutation )getMutationsWave llama a una herramienta externa, como un enlace, para recibir una ola de mutaciones sugeridas.groupMutationsByFile organiza las mutaciones sugeridas por archivo.getNonOverlappingMutationsInReverse Elimina mutaciones superpuestas que entrarían en conflicto entre sí, y clasifica el resto en orden inverso para que las mutaciones posteriores no interfieran con las posiciones de los caracteres de mutaciones anteriores.applyMutation modifica los archivos en el disco utilizando las mutaciones restantes. Una sola mutación contiene un identificador type único, una gama de posición (s) de caracteres para aplicar y opcionalmente otra lógica.
Las siguientes manipulaciones de texto básicas se proporcionan fuera del cuadro:
multiple - contenedor para múltiples mutaciones. Esto indica automutate que se deben aplicar a la vez o no, lo que garantiza la consistencia con la detección de superposición de mutación incorporada.text-delete : elimina una variedad de caracteres.text-insert : inserta una cadena en un punto.text-replace : reemplaza los caracteres que coinciden con una cadena o expresión regular dentro de un rango.text-swap : intercambia una gama de caracteres con una nueva cadena.Por ejemplo:
{
"ugly-file.txt" : [
{
"range" : {
"begin" : 7 ,
"end" : 14
},
"type" : " text-delete "
},
{
"insertion" : " inconceivable! " ,
"range" : {
"begin" : 21
},
"type" : " text-insert "
}
]
} Las utilidades específicas de los pines pueden definir sus propias mutaciones. Por ejemplo, el enlace de un lenguaje puede definir una mutación node-rename en lugar de usar una mutación multiple que contiene mutaciones text-swap .
Ver mutadores para obtener más información sobre mutadores personalizados.
Ver Onboarding.
automutate requiere NodeJS> = 14.