Tiếng Việt

Công cụ dành cho nhà phát triển · So sánh văn bản

'Bỏ qua khoảng trắng' thực sự bỏ qua điều gì trong văn bản khác biệt từng dòng

· Cách thức hoạt động

text-diff developer-workflow khoảng trắng

Hai bản sửa đổi văn bản được căn chỉnh với các thay đổi thụt lề đã bị giảm bớt nhưng các chỉnh sửa nội dung vẫn được giữ nguyên
Hình minh họa vector ToolAcre gốc

Phân tích các loại khoảng trắng mà phép so sánh có thể bình thường hóa, từ thụt đầu dòng đến chạy nội bộ, đồng thời cảnh báo nơi khoảng trắng mang ý nghĩa và không nên bỏ qua.

Mọi dòng đều thay đổi, nhưng thực sự không có gì thay đổi - mở ra bằng một tệp được thụt lề lại từ các tab đến khoảng trắng hiển thị dưới dạng một bức tường khác biệt

Trình định dạng thay đổi thụt lề bốn dấu cách thành hai dấu cách và một dòng khác sẽ vẽ toàn bộ tệp như đã thay đổi. Thay đổi có thể gây nhiễu hình ảnh nên chế độ xem không nhạy cảm với khoảng trắng có thể giúp người đánh giá tìm thấy các chỉnh sửa thực tế. Nhưng “cùng một văn bản không có khoảng trắng” không giống với “cùng một chương trình”. So sánh các chế độ xem thông thường và chế độ xem chuẩn hóa với nhau trước khi phê duyệt cấu hình hoặc tệp nguồn.

Bốn loại khác biệt về khoảng trắng - phân tách thụt đầu dòng, khoảng trắng ở cuối, dòng chạy bên trong và dòng trống, vì mỗi loại được gây ra bởi một công cụ hoặc thói quen khác nhau

Thay đổi khoảng trắng xảy ra ở một số nơi. Thụt lề đầu thường xuất phát từ việc định dạng; dấu cách ở cuối từ copy/paste; dấu cách hoặc tab lặp lại bên trong một dòng có thể phân tách các từ hoặc cột; một dòng trống có thể chia khối. Tùy chọn Bỏ qua khoảng trắng của ToolAcre sẽ cắt từng dòng và thu gọn mọi khoảng trắng bên trong thành một khoảng trắng để so sánh. Nó không chỉ đơn giản là loại bỏ tất cả khoảng trắng hoặc coi số lượng dòng khác nhau là giống hệt nhau: hai dòng trống vẫn là hai đơn vị so sánh trừ khi một thao tác khác loại bỏ chúng.

Cách quá trình chuẩn hóa diễn ra trước khi so sánh - giải thích rằng tùy chọn sẽ chuyển đổi từng dòng thành dạng chuẩn để khớp trong khi văn bản gốc của bạn là nội dung bạn đọc

Khóa dòng được tính toán từ văn bản gốc trước khi khớp: Trim() xóa khoảng trắng ở đầu/trailing và biểu thức chính quy thay thế các dòng chạy bên trong bằng một khoảng trắng. Thuật toán tìm khác biệt so sánh các khóa nhưng giữ văn bản gốc ở các hàng được hiển thị. Các tiền tố và hậu tố phổ biến sẽ bị loại bỏ trước khi tạo bảng LCS, vì vậy những chỉnh sửa nhỏ trong tài liệu lớn không nhất thiết phải so sánh từng dòng với nhau. Có giới hạn dòng khác nhau 2,000 vì bảng lập trình động phát triển theo độ dài cả hai cạnh.

Ví dụ đã hoạt động: hàm Python được thụt lại và tệp YAML - hiển thị tùy chọn dọn dẹp chế độ xem Python, sau đó ẩn thay đổi thụt lề YAML thực sự làm thay đổi cấu trúc của tài liệu

Hãy tưởng tượng một hàm Python có toàn bộ nội dung thay đổi từ bốn khoảng trắng thành hai trong khi vẫn giữ nguyên mức độ lồng nhau. Bỏ qua thụt lề có thể che giấu tiếng ồn định dạng đó. Trong YAML, việc di chuyển một khóa từ bên dưới services.web sang bên dưới các dịch vụ sẽ thay đổi ánh xạ gốc của nó ngay cả khi các ký tự của mỗi dòng giống hệt nhau sau khi khoảng trắng được cắt bớt. Chạy tùy chọn trên cả hai đoạn mã: chế độ xem Python có thể trở nên dễ xem xét hơn, trong khi thay đổi YAML có thể biến mất mặc dù đã thay đổi cây dữ liệu. Không bao giờ chỉ sử dụng đầu ra không phân biệt khoảng trắng để phê duyệt các định dạng nhạy cảm thụt đầu dòng.

Khi khoảng trắng là dữ liệu — liệt kê các định dạng trong đó khoảng trắng mang ý nghĩa: YAML, Makefiles, khối mã Markdown, xuất có chiều rộng cố định và chuỗi ký tự

Dấu cách là dữ liệu ở dạng thụt lề YAML, công thức Makefile, khối mã Markdown và xuất theo chiều rộng cố định. Bên trong các chuỗi ký tự, việc thay thế nhiều khoảng trắng có thể thay đổi văn bản hiển thị cho người dùng hoặc một giá trị được ký hoặc băm. Ngay cả mã có định dạng nói chung linh hoạt cũng có các ngữ cảnh trong đó khoảng trắng rất quan trọng: các khối Python và tài liệu shell ở đây là những ví dụ rõ ràng. Tùy chọn không thể suy ra những ngữ cảnh đó vì nó nhìn thấy những dòng đơn giản chứ không nhìn thấy ngữ pháp ngôn ngữ. Chỉ chọn nó khi bạn hiểu tệp được so sánh.

Kết hợp các tùy chọn khoảng trắng và viết hoa - mô tả cách cho phép cả hai thu hẹp so sánh với các chữ cái giống nhau theo cùng một thứ tự và những gì ẩn giấu

Việc kết hợp Bỏ qua khoảng trắng với Bỏ qua chữ hoa chữ thường sẽ thu hẹp việc khớp các dòng có các chữ cái và dấu câu còn lại giống nhau mà không phân biệt chữ hoa chữ thường hoặc khoảng cách. Điều đó có thể làm cho tài liệu nặng về định dạng trở nên im lặng, nhưng nó cũng có thể che giấu mã định danh phân biệt chữ hoa chữ thường, khóa tiêu đề hoặc đường dẫn hệ thống tệp đã thay đổi. ToolAcre chỉ viết thường khóa so sánh khi bạn bật tùy chọn thứ hai đó; nó vẫn hiển thị văn bản dòng gốc. Chuyển đổi từng tùy chọn một để bạn có thể xem từng thay đổi nào đã bị xóa.

Điều này không bao gồm những gì - tùy chọn so sánh các dòng sau khi chuẩn hóa; nó không chỉnh lại các đoạn văn, phát hiện các khối đã di chuyển hoặc so sánh định dạng trong các tài liệu có định dạng phong phú

Tính năng này không chỉnh lại các đoạn văn, phát hiện các khối đã di chuyển, so sánh kết xuất HTML hoặc quyết định xem hai AST chương trình có tương đương nhau hay không. Khác biệt của ToolAcre là lập trình động LCS dựa trên dòng với việc cắt xén tiền tố chung/suffix chứ không phải thuật toán Myers được mô tả trong một số hướng dẫn khác biệt chung. Trên các tệp được dán lớn, nó sẽ dừng thay vì phân bổ một ma trận không giới hạn. Sử dụng trình phân tích cú pháp nhận biết ngôn ngữ hoặc đánh giá kiểm soát phiên bản cho các xác nhận quyền sở hữu cấu trúc.

Bài học rút ra: chuyển đổi nó, không mặc định nó - khuyên bạn nên chạy cả hai phép so sánh và cho biết cách so sánh Văn bản của ToolAcre cho phép bạn bật và tắt tùy chọn khoảng trắng cho cùng một cặp văn bản

Chuyển đổi Bỏ qua khoảng trắng dưới dạng chế độ xem, không phải là sự thật mặc định. So sánh văn bản giữ lại mọi thứ bạn dán trong trình duyệt, cho phép bạn so sánh cả hai chế độ xem của cùng một bản sửa đổi mà không cần tải lên hợp đồng hoặc tệp cấu hình. Nếu một thay đổi biến mất trong chế độ xem chuẩn hóa, hãy hỏi xem định dạng cơ bản có mang ý nghĩa khoảng trắng hay không trước khi quyết định rằng thay đổi đó vô hại.