3 คะแนน โดย GN⁺ 2024-03-22 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

Difftastic เครื่องมือหาความแตกต่างเชิงโครงสร้าง

  • Difftastic เป็นเครื่องมือ diff แบบ CLI ที่เข้าใจไวยากรณ์ โดยเปรียบเทียบไฟล์ตามโครงสร้างไวยากรณ์แทนการเทียบแบบรายบรรทัด
  • ให้ความแตกต่างที่แม่นยำและมนุษย์อ่านเข้าใจได้ง่าย

ทำความเข้าใจสิ่งที่เปลี่ยนไปจริง ๆ

  • Difftastic ใช้ tree-sitter เพื่อพาร์สโค้ด
  • ต่างจากการหาความต่างของข้อความแบบรายบรรทัด มันเข้าใจได้ว่าการแทนค่าเชิงภายในไม่ได้เปลี่ยนแปลง

มองข้ามการเปลี่ยนแปลงรูปแบบ

  • เมื่อ code formatter ตัดสินใจแยกเป็นหลายบรรทัด จะแสดงเฉพาะสิ่งที่เปลี่ยนจริงเท่านั้น

แสดงภาพการเปลี่ยนแปลงของการห่อครอบ

  • เมื่อมีการเพิ่ม wrapper, Difftastic จะจับคู่ตัวคั่นได้อย่างแม่นยำ
  • แม้จะมีการเปลี่ยนเนื้อหาภายใน ก็ยังสามารถแสดง wrapper ที่ถูกเพิ่มเข้ามาได้

หมายเลขบรรทัดจริง

  • แสดงหมายเลขบรรทัดจริงของไฟล์ทั้งก่อนและหลังการเปลี่ยนแปลง

เดโม 60 วินาที

รองรับภาษาโปรแกรม

  • รองรับหลายภาษา เช่น C++, C#, Clojure, Dart, Erlang เป็นต้น
  • ดูรายการภาษาโปรแกรมที่รองรับโดยละเอียดได้ในคู่มือ

รองรับรูปแบบไฟล์

  • รองรับรูปแบบไฟล์หลากหลาย เช่น HCL, HTML, JSON, YAML เป็นต้น
  • ดูรายการรูปแบบไฟล์ที่รองรับโดยละเอียดได้ในคู่มือ

ใช้งานร่วมกับ Git ได้

  • ดูคำแนะนำการตั้งค่า Git ได้ในคู่มือ

โอเพนซอร์สเต็มรูปแบบ

  • Difftastic ใช้สัญญาอนุญาต MIT
  • ดาวน์โหลด แก้ไข และแชร์กับเพื่อนได้

ผู้สร้าง

  • Wilfred Hughes สร้างขึ้นระหว่างใช้ Emacs และดื่มกาแฟ

ความเห็นของ GN⁺

  • Difftastic ช่วยให้นักพัฒนาเข้าใจการเปลี่ยนแปลงได้ชัดเจนขึ้น ด้วยการจับความแตกต่างเชิงโครงสร้างของโค้ด
  • เมื่อเทียบกับเครื่องมือ diff แบบรายบรรทัดเดิม ๆ Difftastic สามารถเปรียบเทียบได้ละเอียดกว่า ด้วยความสามารถอย่างการเข้าใจไวยากรณ์ของโค้ดและการมองข้ามการเปลี่ยนแปลงด้านรูปแบบ
  • ในฐานะเครื่องมือโอเพนซอร์ส มันมีโอกาสพัฒนาอย่างต่อเนื่องผ่านการมีส่วนร่วมของชุมชน และผู้ใช้ยังมีข้อดีตรงที่สามารถแก้ไขและขยายความสามารถได้อย่างอิสระตามต้องการ
  • เครื่องมืออื่นที่มีความสามารถคล้ายกัน ได้แก่ git diff ซึ่งเป็นเครื่องมือในตัวของ Git หรือเครื่องมือเปรียบเทียบใน IDE อย่าง JetBrains IntelliJ IDEA แต่ Difftastic นำเสนอแนวทางที่โดดเด่นด้วยการเปรียบเทียบบนพื้นฐานของไวยากรณ์
  • เมื่อนำ Difftastic มาใช้ ควรตรวจสอบภาษาโปรแกรมและรูปแบบไฟล์ที่รองรับ รวมถึงอาจต้องมีข้อตกลงร่วมกันภายในทีมเกี่ยวกับการใช้งานเครื่องมือ ข้อดีของการใช้เครื่องมือนี้คือช่วยเพิ่มประสิทธิภาพของ code review และลดความเข้าใจผิดระหว่างการทำงานร่วมกัน

1 ความคิดเห็น

 
GN⁺ 2024-03-22
ความคิดเห็นบน Hacker News
  • แนะนำเทคโนโลยีที่อิงกับ Tree-sitter

    • Tree-sitter แปลงโค้ดเป็น AST (Abstract Syntax Tree, ต้นไม้ไวยากรณ์เชิงนามธรรม) และมีอินเทอร์เฟซมาตรฐานสำหรับส่งต่อให้ไคลเอนต์อย่างเอดิเตอร์หรือเครื่องมือ diff
    • ด้วยสิ่งนี้ เครื่องมือต่าง ๆ ไม่จำเป็นต้องรองรับหลายสิบภาษาโดยตรง เพราะเพียงรองรับ Tree-sitter ก็สามารถจัดการได้อัตโนมัติกับทุกภาษาที่ Tree-sitter รองรับ
    • เมื่อพัฒนาภาษาใหม่ หากสร้าง parser สำหรับ Tree-sitter แล้ว เครื่องมือทั้งหมดที่รองรับ Tree-sitter ก็จะรองรับภาษานั้นด้วย
    • นวัตกรรมนี้กำลังช่วยลดงานที่ซ้ำซ้อนในการพัฒนาเครื่องมือที่รองรับหลายภาษา และสร้าง ecosystem ของเครื่องมือที่ดีขึ้น
  • วิธีติดตั้งและอัปเดตโปรเจ็กต์กับเครื่องมือ Rust

    • มีการเสนอวิธีติดตั้งและอัปเดตโปรเจ็กต์ที่พัฒนาด้วย Rust ผ่าน cargo
    • mise-en-place เป็นตัวแทนของ asdf ที่ทั้งเร็วและยืดหยุ่น
    • zoxide เป็นตัวแทนของคำสั่ง cd โดยจดจำไดเรกทอรีที่ผู้ใช้เคยย้ายไป และช่วยให้ย้ายได้รวดเร็วผ่านการค้นหาแบบตรงบางส่วน
    • dust เป็นเครื่องมือเสริมของ du ที่แสดงไดเรกทอรีที่ใช้พื้นที่ดิสก์มากที่สุด
  • ประสบการณ์และความเห็นต่อการใช้ Difftastic

    • มีการแชร์ประสบการณ์การใช้ Difftastic พร้อมระบุว่าเมื่อใช้เครื่องมือ diff อื่นจะรู้สึกไม่สะดวก
    • มีการสำรวจความเป็นไปได้ของเครื่องมือ diff แบบ 'semantic' ที่สามารถเปรียบเทียบกรณีซึ่งไวยากรณ์เปลี่ยนไปแต่ความหมายยังเหมือนเดิม
  • ความสะดวกของ Difftastic

    • มีการเน้นฟีเจอร์ที่ Difftastic แสดงเลขบรรทัดของไฟล์จริง และบอกว่ามีประโยชน์มากเมื่อใช้ร่วมกับ git diff
  • เครื่องมือที่เกี่ยวข้อง: diff2html

    • diff2html เป็นเครื่องมือที่แสดง diff ในรูปแบบ HTML บนแท็บเบราว์เซอร์ผ่าน CLI (Command Line Interface)
  • ประสบการณ์การใช้ไลบรารี Augeas

    • มีการแชร์ประสบการณ์การใช้ไลบรารี Augeas เพื่อตรวจจับความแตกต่างของไฟล์คอนฟิก และช่วยให้ผู้ใช้เขียน allowlist แบบละเอียดที่ไม่ไวต่อไวยากรณ์ได้
  • เปรียบเทียบกับ Semantic Merge

    • แม้ Semantic Merge จะไม่ใช่โอเพนซอร์ส แต่ Difftastic เป็นโอเพนซอร์สและให้ diff ที่ดีกว่า
    • มีการตั้งคำถามว่าวางแผนจะขยาย Difftastic ให้มีความสามารถด้าน merge หรือไม่
  • การกลับไปใช้ icdiff

    • มีความเห็นว่าหลังจากลอง Difftastic แล้ว ก็กลับไปใช้ icdiff เนื่องจากปัญหาอย่างการจัดรูปแบบแปลก ๆ กับส่วนที่ไม่ได้เปลี่ยนแปลง
  • ปัญหาด้านการมองเห็นของ Difftastic

    • มีการชี้ว่าตอนตรวจไฟล์ XML ขนาดใหญ่ แยกความต่างระหว่างบรรทัดที่แก้ไขกับแอตทริบิวต์ได้ยากในเชิงภาพ และระบุว่าควรมีเอกสารอธิบายวิธีเปลี่ยนสไตล์
  • ขนาดการติดตั้งของ Difftastic

    • มีการระบุว่าขนาดแพ็กเกจบน Arch Linux คือ 7MB แต่เมื่อติดตั้งแล้วเพิ่มเป็น 80MB และไบนารี difft เองมีขนาด 78MB
    • บน ZFS dataset ที่ใช้การบีบอัด LZ4 จะแสดงเป็น 17MB และมีการตั้งข้อสงสัยว่าทำไมถึงไม่หลีกเลี่ยงการใส่เนื้อหาที่บีบอัดได้ลงไปในไบนารี