Menerapkan gelombang mutasi yang disediakan oleh alat lain, seperti linter atau codemods.
Ada banyak linter di luar sana dan sebagian besar termasuk cara --fix aturan kegagalan secara otomatis. Ini bagus tapi sulit dilakukan karena beberapa alasan:
automutate mengusulkan agar Linters hanya mengusulkan cara memperbaiki aturan, melalui format JSON terstandarisasi.
Memiliki proyek sumber-agnostik standar untuk menerapkan mutasi membawa beberapa manfaat:
automutate dikurangi dengan kode umum.Secara umum, mendeteksi kegagalan aturan adalah masalah terpisah dari memperbaikinya . Linters perlu dijalankan dengan cepat melalui satu set file baca saja, seringkali selama proses yang dibangun, sementara fixer biasanya berjalan perlahan dan memodifikasi file berdasarkan permintaan pengguna.
Algoritma automutate Utama dimulai di autoMutator.ts dan sebagian besar diterapkan di mutationsApplier.ts :
while mutationsWave = getMutationsWave ( ) :
for ( file , fileMutations ) of groupMutationsByFile ( mutationsWave ) :
for mutation of getNonOverlappingMutationsInReverse ( fileMutations ) :
applyMutation ( file , mutation )getMutationsWave panggilan ke alat eksternal, seperti linter, untuk menerima gelombang mutasi yang disarankan.groupMutationsByFile mengatur mutasi yang disarankan dengan file.getNonOverlappingMutationsInReverse menghilangkan mutasi yang tumpang tindih yang akan saling bertentangan, dan mengurutkan sisanya dalam urutan terbalik sehingga mutasi kemudian tidak mengganggu posisi karakter mutasi sebelumnya.applyMutation memodifikasi file pada disk menggunakan mutasi yang tersisa. Mutasi tunggal berisi pengidentifikasi type yang unik, berbagai posisi karakter untuk diterapkan ke, dan secara opsional logika lainnya.
Manipulasi teks dasar berikut disediakan di luar kotak:
multiple - wadah untuk beberapa mutasi. Ini menunjukkan untuk automutate bahwa ini harus diterapkan sekaligus atau tidak sama sekali, yang menjamin konsistensi dengan deteksi tumpang tindih mutasi bawaan.text-delete - Menghapus berbagai karakter.text-insert - menyisipkan string pada suatu titik.text-replace - Mengganti karakter yang cocok dengan string atau ekspresi reguler dalam rentang.text-swap - Menukar berbagai karakter dengan string baru.Misalnya:
{
"ugly-file.txt" : [
{
"range" : {
"begin" : 7 ,
"end" : 14
},
"type" : " text-delete "
},
{
"insertion" : " inconceivable! " ,
"range" : {
"begin" : 21
},
"type" : " text-insert "
}
]
} Utilitas khusus linter dapat menentukan mutasi mereka sendiri. Misalnya, linter bahasa dapat menentukan mutasi node-rename daripada menggunakan mutasi multiple yang mengandung mutasi text-swap .
Lihat mutator untuk lebih lanjut tentang mutator khusus.
Lihat Onboarding.
automutate membutuhkan nodejs> = 14.