automutate
1.0.0
应用其他工具提供的突变波,例如衬里或codemods。
那里有许多衬里,大多数包括--fix规则失败的方法。这很棒,但是很难做,原因有两个:
automutate建议Linter仅通过标准化的JSON格式提出如何修复规则。
拥有一个标准化的源不足项目以应用突变会带来一些好处:
automutate在项目之间切换的升级时间会减少常见代码。通常,检测规则失败与修复它们是一个单独的关注点。 Linters通常需要在构建过程中通常快速运行一组只读的文件集,而Fixer通常会缓慢运行并根据用户请求修改文件。
主要的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 "
}
]
}特异性公用事业可能会定义自己的突变。例如,语言的衬里可能会定义node-rename突变,而不是使用包含text-swap突变的multiple突变。
有关自定义突变器的更多信息,请参见突变器。
请参阅入门。
automutate需要nodejs> = 14。