ใช้คลื่นของการกลายพันธุ์ที่จัดทำโดยเครื่องมืออื่น ๆ เช่น Linters หรือ Codemods
มีผ้าลินินมากมายและส่วนใหญ่มีวิธีการที่จะ --fix ความล้มเหลวของกฎการแก้ไขโดยอัตโนมัติ มันยอดเยี่ยม แต่ยากที่จะทำด้วยเหตุผลสองประการ:
automutate เสนอว่า Linters เสนอ วิธี การแก้ไขกฎผ่านรูปแบบ JSON ที่ได้มาตรฐานเท่านั้น
การมีโครงการแหล่งที่มามาตรฐานเพื่อใช้การกลายพันธุ์ทำให้เกิดประโยชน์สองประการ:
automutate จะลดลงด้วยรหัสทั่วไปโดยทั่วไป การตรวจจับ ความล้มเหลวของกฎเป็นข้อกังวลแยกต่างหากจาก การแก้ไข Linters จำเป็นต้องทำงานอย่างรวดเร็วผ่านชุดไฟล์แบบอ่านอย่างเดียวบ่อยครั้งในระหว่างกระบวนการที่สร้างขึ้นในขณะที่ตัวแก้ไขมักจะทำงานช้าและแก้ไขไฟล์ตามคำขอของผู้ใช้
อัลกอริทึม automutate หลักเริ่มต้นใน autoMutator.ts และส่วนใหญ่นำไปใช้ใน mutationsApplier.ts :
while mutationsWave = getMutationsWave ( ) :
for ( file , fileMutations ) of groupMutationsByFile ( mutationsWave ) :
for mutation of getNonOverlappingMutationsInReverse ( fileMutations ) :
applyMutation ( file , mutation )getMutationsWave เรียกใช้เครื่องมือภายนอกเช่น linter เพื่อรับคลื่นของการกลายพันธุ์ที่แนะนำ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 "
}
]
} ยูทิลิตี้เฉพาะ linter อาจกำหนดการกลายพันธุ์ของตนเอง ตัวอย่างเช่น linter ของภาษาอาจกำหนดการกลายพันธุ์ของ node-rename แทนที่จะใช้การกลายพันธุ์ multiple ที่มีการกลายพันธุ์ของ text-swap
ดู Mutators สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Mutators ที่กำหนดเอง
ดูการขึ้นเครื่องบิน
automutate ต้องการ nodejs> = 14