Aplica ondas de mutações fornecidas por outras ferramentas, como linters ou códigos de codas.
Existem muitos liners por aí e a maioria inclui maneiras de --fix falhas de regras automaticamente. Isso é ótimo, mas difícil de fazer por alguns motivos:
automutate propõe que os liners propõem apenas como corrigir regras, por meio de um formato JSON padronizado.
Ter um projeto agnóstico de origem padronizado para aplicar mutações traz alguns benefícios:
automutate é reduzido com o código comum.Em geral, a detecção de falhas das regras é uma preocupação separada de corrigi -las. Os linheiros precisam ser executados rapidamente em um conjunto de arquivos somente leitura, geralmente durante os processos construídos, enquanto os fixadores normalmente são executados lentamente e modificam arquivos na solicitação do usuário.
O algoritmo principal automutate é iniciado no autoMutator.ts e aplicado principalmente em mutationsApplier.ts :
while mutationsWave = getMutationsWave ( ) :
for ( file , fileMutations ) of groupMutationsByFile ( mutationsWave ) :
for mutation of getNonOverlappingMutationsInReverse ( fileMutations ) :
applyMutation ( file , mutation )getMutationsWave chama para uma ferramenta externa, como um linhador, para receber uma onda de mutações sugeridas.groupMutationsByFile organiza as mutações sugeridas por arquivo.getNonOverlappingMutationsInReverse remove mutações sobrepostas que se confundem entre si e classificariam o restante em ordem inversa para que mutações posteriores não interfiram nas posições de caráter de mutações anteriores.applyMutation Modifica os arquivos no disco usando as mutações restantes. Uma única mutação contém um identificador type exclusivo, uma variedade de caráter (s) para aplicar e opcionalmente outra lógica.
As seguintes manipulações básicas de texto são fornecidas fora da caixa:
multiple - contêiner para múltiplas mutações. Isso indica para automutate que eles devem ser aplicados de uma só vez ou não, o que garante consistência com a detecção de sobreposição de mutação interna.text-delete - exclui uma variedade de caracteres.text-insert - Insira uma string em um ponto.text-replace - Substitui os caracteres que correspondem a uma string ou expressão regular dentro de um intervalo.text-swap - Swaps uma variedade de caracteres com uma nova string.Por exemplo:
{
"ugly-file.txt" : [
{
"range" : {
"begin" : 7 ,
"end" : 14
},
"type" : " text-delete "
},
{
"insertion" : " inconceivable! " ,
"range" : {
"begin" : 21
},
"type" : " text-insert "
}
]
} Os utilitários específicos do Linter podem definir suas próprias mutações. Por exemplo, o linhador de um idioma pode definir uma mutação node-rename em vez de usar uma mutação multiple contendo mutações text-swap .
Veja os mutadores para obter mais informações sobre mutadores personalizados.
Veja a integração.
automutate requer nodejs> = 14.