Wendet Wellen von Mutationen an, die von anderen Tools wie Lintern oder Codemoden bereitgestellt werden.
Es gibt viele Linter da draußen und die meisten enthalten Wege zu --fix Regelfehler automatisch. Dies ist großartig, aber aus mehreren Gründen schwer zu tun:
automutate schlägt vor, dass Linter nur vorschlagen , Regeln über ein standardisiertes JSON -Format zu beheben.
Ein standardisiertes Quell-agnostisches Projekt zur Anwendung von Mutationen bringt ein paar Vorteile:
automutate wird mit gemeinsamem Code reduziert.Im Allgemeinen ist die Erkennung von Regelfehlern ein separates Anliegen davon, sie zu beheben . Linter müssen schnell über eine schreibgeschützte Dateien ausführen, häufig während erstellten Prozessen, während Fixierer normalerweise langsam ausgeführt werden und Dateien auf Benutzeranforderung ändern.
Der Hauptautomutatalgorithmus wird in automutate gestartet und hauptsächlich in mutationsApplier.ts angewendet autoMutator.ts
while mutationsWave = getMutationsWave ( ) :
for ( file , fileMutations ) of groupMutationsByFile ( mutationsWave ) :
for mutation of getNonOverlappingMutationsInReverse ( fileMutations ) :
applyMutation ( file , mutation )getMutationsWave -Anrufe zu einem externen Tool wie einem Linter, um eine Welle vorgeschlagener Mutationen zu erhalten.groupMutationsByFile organisiert die vorgeschlagenen Mutationen nach Datei.getNonOverlappingMutationsInReverse entfernt überlappende Mutationen, die miteinander in Konflikt stehen, und sortiert den Rest in umgekehrter Reihenfolge, damit spätere Mutationen die Charakterpositionen früherer Mutationen nicht beeinträchtigen.applyMutation modifiziert Dateien auf der Festplatte mithilfe der verbleibenden Mutationen. Eine einzelne Mutation enthält eine eindeutige type , einen Bereich von Zeichenpositionen (en) und optional eine andere Logik.
Die folgenden grundlegenden Textmanipulationen finden Sie außerhalb des Feldes:
multiple für mehrere Mutationen. Dies weist automutate hin, dass diese auf einmal oder gar nicht auf einmal oder gar nicht angewendet werden müssen, was die Konsistenz mit der eingebauten Mutation-Überlappungserkennung garantiert.text-delete - Löscht eine Reihe von Zeichen.text-insert - Fügt eine Zeichenfolge an einem Punkt ein.text-replace - Ersetzt Zeichen, die einem String oder einem regulären Ausdruck innerhalb eines Bereichs entsprechen.text-swap - Swaps eine Reihe von Zeichen mit einer neuen Zeichenfolge.Zum Beispiel:
{
"ugly-file.txt" : [
{
"range" : {
"begin" : 7 ,
"end" : 14
},
"type" : " text-delete "
},
{
"insertion" : " inconceivable! " ,
"range" : {
"begin" : 21
},
"type" : " text-insert "
}
]
} Linterspezifische Dienstprogramme können ihre eigenen Mutationen definieren. Beispielsweise kann der Verlinken einer Sprache eine node-rename -Mutation definieren, anstatt eine multiple Mutation zu verwenden, die text-swap -Mutationen enthält.
Weitere Informationen zu benutzerdefinierten Mutatoren finden Sie unter Mutatoren.
Siehe Onboarding.
automutate benötigt NodeJS> = 14.