automutate
1.0.0
LinterやCodeModsなど、他のツールによって提供される変異の波を適用します。
そこには多くのリナーがあり、ほとんどの場合、ルール障害を自動的に--fix方法が含まれています。これは素晴らしいですが、いくつかの理由でやるのは難しいです:
automutate 、Lintersが標準化されたJSON形式を介してルールを修正する方法のみを提案することを提案しています。
突然変異を適用するために標準化されたソースと存在するプロジェクトを持つことは、いくつかの利点をもたらします。
automutateを使用してプロジェクトを切り替えるためのランプアップ時間は、共通コードで削減されます。一般に、ルールの障害を検出することは、それらの修正とは別の懸念事項です。 Linterは、多くの場合、構築されたプロセス中に読み取り専用のファイルセットをすばやく実行する必要がありますが、通常はゆっくりと実行され、ユーザーリクエストでファイルを変更する必要があります。
メインのautomutateアルゴリズムはautoMutator.tsで開始され、ほとんどがmutationsApplier.tsで適用されます。
while mutationsWave = getMutationsWave ( ) :
for ( file , fileMutations ) of groupMutationsByFile ( mutationsWave ) :
for mutation of getNonOverlappingMutationsInReverse ( fileMutations ) :
applyMutation ( file , mutation )getMutationsWave 、リナーなどの外部ツールに呼びかけ、提案された突然変異の波を受け取ります。groupMutationsByFile 、提案された変異をファイルごとに整理します。getNonOverlappingMutationsInReverse 、互いに競合する重複する変異を除去し、後の突然変異が以前の変異の文字位置を妨げないように、逆順序で残りを並べ替えます。applyMutation 、残りの変異を使用してディスク上のファイルを変更します。 単一の突然変異には、一意のtype識別子、適用する範囲の文字位置、およびオプションで他のロジックが含まれています。
次の基本的なテキスト操作が箱から出して提供されます。
multipleの変異のコンテナ。これは、これらを一度にすべて適用する必要があるか、まったく適用しなければならないことをautomutateことを示しています。これにより、組み込みの突然変異のオーバーラップ検出との一貫性が保証されます。text-deleteさまざまな文字を削除します。text-insertポイントに文字列を挿入します。text-replace範囲内の文字列または正規表現に一致する文字を置き換えます。text-swap新しい文字列でさまざまな文字を交換します。例えば:
{
"ugly-file.txt" : [
{
"range" : {
"begin" : 7 ,
"end" : 14
},
"type" : " text-delete "
},
{
"insertion" : " inconceivable! " ,
"range" : {
"begin" : 21
},
"type" : " text-insert "
}
]
}リナー固有のユーティリティは、独自の変異を定義する場合があります。たとえば、言語のリナーは、 text-swap変異を含むmultiple突然変異を使用するのではなく、 node-rename突然変異を定義する場合があります。
カスタムミューテーターの詳細については、Mutatorsを参照してください。
オンボーディングを参照してください。
automutateはnodejs> = 14が必要です。