3 điểm bởi GN⁺ 2024-03-22 | 1 bình luận | Chia sẻ qua WhatsApp

Công cụ khác biệt có cấu trúc Difftastic

  • Difftastic là công cụ khác biệt CLI hiểu cú pháp, so sánh tệp dựa trên cú pháp thay vì theo từng dòng.
  • Cung cấp khác biệt chính xác, dễ đọc với con người.

Hiểu nội dung thực sự đã thay đổi

  • Difftastic sử dụng tree-sitter để phân tích mã.
  • Không giống khác biệt văn bản theo dòng, nó hiểu rằng biểu diễn bên trong không hề thay đổi.

Bỏ qua thay đổi định dạng

  • Khi bộ định dạng mã quyết định tách thành nhiều dòng, nó chỉ hiển thị những gì thực sự đã thay đổi.

Trực quan hóa thay đổi bao bọc

  • Khi thêm wrapper, Difftastic khớp chính xác các dấu phân cách.
  • Ngay cả khi thay đổi nội dung bên trong, nó vẫn có thể hiển thị wrapper được thêm vào.

Số dòng thực tế

  • Hiển thị số dòng thực tế của tệp cả trước và sau khi thay đổi.

Demo 60 giây

Hỗ trợ ngôn ngữ lập trình

  • Hỗ trợ nhiều ngôn ngữ như C++, C#, Clojure, Dart, Erlang, v.v.
  • Có thể xem danh sách ngôn ngữ được hỗ trợ chi tiết trong tài liệu hướng dẫn.

Hỗ trợ định dạng tệp

  • Hỗ trợ nhiều định dạng tệp như HCL, HTML, JSON, YAML, v.v.
  • Có thể xem danh sách định dạng tệp được hỗ trợ chi tiết trong tài liệu hướng dẫn.

Tương thích với Git

  • Có thể xem hướng dẫn cấu hình Git trong tài liệu hướng dẫn.

Hoàn toàn mã nguồn mở

  • Difftastic sử dụng giấy phép MIT.
  • Có thể tải xuống, sửa đổi và chia sẻ với bạn bè.

Tác giả

  • Được Wilfred Hughes tạo ra cùng với Emacs và cà phê.

Ý kiến của GN⁺

  • Difftastic giúp các nhà phát triển hiểu rõ hơn những thay đổi bằng cách nắm bắt khác biệt cấu trúc của mã.
  • So với các công cụ diff theo dòng truyền thống, Difftastic cho phép so sánh tinh vi hơn nhờ khả năng hiểu cú pháp mã và bỏ qua thay đổi định dạng.
  • Là một công cụ mã nguồn mở, nó có tiềm năng được cải thiện liên tục thông qua đóng góp từ cộng đồng, đồng thời mang lại lợi thế là người dùng có thể tự do sửa đổi và mở rộng theo nhu cầu.
  • Các công cụ khác cung cấp chức năng tương tự gồm có công cụ tích hợp git diff của Git hoặc công cụ so sánh tích hợp trong các IDE như IntelliJ IDEA của JetBrains, nhưng Difftastic mang đến một cách tiếp cận độc đáo là so sánh dựa trên cú pháp.
  • Khi áp dụng Difftastic, cần kiểm tra các ngôn ngữ lập trình và định dạng tệp được hỗ trợ, đồng thời có thể cần sự đồng thuận trong nhóm về việc sử dụng công cụ. Việc dùng công cụ này có thể nâng cao hiệu quả code review và giảm hiểu lầm trong quá trình cộng tác.

1 bình luận

 
GN⁺ 2024-03-22
Ý kiến trên Hacker News
  • Giới thiệu công nghệ dựa trên Tree-sitter

    • Tree-sitter chuyển mã thành AST (Abstract Syntax Tree, cây cú pháp trừu tượng) và cung cấp một giao diện tiêu chuẩn để chuyển nó cho các client như trình soạn thảo hoặc công cụ diff.
    • Nhờ đó, các công cụ không cần phải tự hỗ trợ trực tiếp hàng chục ngôn ngữ; chỉ cần hỗ trợ Tree-sitter là có thể tự động xử lý tất cả các ngôn ngữ mà Tree-sitter hỗ trợ.
    • Khi phát triển một ngôn ngữ mới, chỉ cần tạo parser Tree-sitter thì mọi công cụ hỗ trợ Tree-sitter cũng sẽ hỗ trợ ngôn ngữ đó.
    • Đổi mới này đang giúp giảm công việc trùng lặp trong phát triển công cụ hỗ trợ nhiều ngôn ngữ và tạo ra một hệ sinh thái công cụ tốt hơn.
  • Cách cài đặt và cập nhật các dự án, công cụ Rust

    • Bài viết đưa ra cách cài đặt và cập nhật các dự án viết bằng Rust thông qua cargo.
    • mise-en-place là lựa chọn thay thế cho asdf, nhanh và linh hoạt.
    • zoxide là lựa chọn thay thế cho lệnh cd, ghi nhớ các thư mục người dùng đã di chuyển tới và cho phép chuyển nhanh bằng tìm kiếm khớp một phần.
    • dust là công cụ bổ trợ cho du, hiển thị những thư mục đang chiếm nhiều dung lượng đĩa nhất.
  • Trải nghiệm và ý kiến khi dùng Difftastic

    • Có người chia sẻ rằng sau khi dùng Difftastic thì cảm thấy bất tiện khi phải quay lại các công cụ diff khác.
    • Bình luận cũng khám phá khả năng của một công cụ diff mang tính "semantic", có thể so sánh các thay đổi mà cú pháp khác đi nhưng ý nghĩa vẫn giữ nguyên.
  • Sự tiện lợi của Difftastic

    • Difftastic được nhấn mạnh ở khả năng hiển thị số dòng của tệp thực tế, rất hữu ích khi dùng cùng git diff.
  • Công cụ liên quan: diff2html

    • diff2html là công cụ hiển thị diff ở dạng HTML trong tab trình duyệt thông qua CLI (Command Line Interface).
  • Trải nghiệm sử dụng thư viện Augeas

    • Có người chia sẻ kinh nghiệm dùng thư viện Augeas để phát hiện khác biệt trong file cấu hình, đồng thời cho phép người dùng viết danh sách cho phép chi tiết mà không quá nhạy với cú pháp.
  • So sánh với Semantic Merge

    • Semantic Merge không phải mã nguồn mở, trong khi Difftastic là mã nguồn mở và cung cấp diff tốt hơn.
    • Có ý kiến bày tỏ tò mò liệu Difftastic có kế hoạch mở rộng sang tính năng merge hay không.
  • Quay lại với icdiff

    • Có ý kiến cho biết đã thử Difftastic nhưng quay lại dùng icdiff do một số vấn đề như áp dụng định dạng lạ cho cả những phần không thay đổi.
  • Vấn đề hiển thị của Difftastic

    • Có ý kiến chỉ ra rằng khi kiểm tra các tệp XML lớn, rất khó phân biệt bằng mắt các dòng và thuộc tính đã sửa đổi, đồng thời cho rằng cần có tài liệu về cách thay đổi style.
  • Kích thước cài đặt của Difftastic

    • Có ý kiến cho biết gói Arch Linux có kích thước 7MB nhưng sau khi cài đặt tăng lên 80MB, và bản thân binary difft đã là 78MB.
    • Trên dataset ZFS dùng nén LZ4, kích thước được hiển thị là 17MB, từ đó đặt câu hỏi vì sao lại đưa nội dung có thể nén tốt vào trong binary.