개발자 도구 · 텍스트 비교
라인별 텍스트 차이에서 '공백 무시'가 실제로 무시하는 것
· 작동 원리
텍스트 차이 개발자 워크플로 공백
선행 들여쓰기부터 내부 실행까지 비교를 통해 정규화할 수 있는 공백의 종류를 분석하고 공백이 의미를 전달하며 무시해서는 안 되는 부분을 경고합니다.
모든 줄이 변경되었지만 실제로는 아무것도 변경되지 않았습니다. 탭에서 차이의 벽으로 표시되는 공백으로 다시 들여쓰기된 파일로 열립니다.
포맷터는 공백 4개 들여쓰기를 공백 2개로 변경하고 줄 차이는 변경된 대로 전체 파일을 그립니다. 변경 사항은 시각적으로 방해가 될 수 있으므로 공백을 구분하지 않는 보기는 검토자가 실제 편집 내용을 찾는 데 도움이 될 수 있습니다. 그러나 "공백 없는 동일한 텍스트"는 "동일한 프로그램"과 동일하지 않습니다. 구성이나 소스 파일을 승인하기 전에 일반 보기와 정규화된 보기를 함께 비교하세요.
네 가지 종류의 공백 차이 - 선행 들여쓰기, 후행 공백, 내부 실행 및 빈 줄을 구분합니다. 각 공백은 서로 다른 도구나 습관으로 인해 발생하기 때문입니다.
공백 변경은 여러 위치에서 발생합니다. 선행 들여쓰기는 종종 서식 지정에서 비롯됩니다. 복사/붙여넣기 후행 공백; 줄 안의 반복되는 공백이나 탭은 단어나 열을 분리할 수 있습니다. 빈 줄은 블록을 나눌 수 있습니다. ToolAcre의 공백 무시 옵션은 각 줄을 자르고 비교를 위해 모든 내부 공백 실행을 하나의 공백으로 축소합니다. 단순히 모든 공백을 제거하거나 다른 줄 수를 동일하게 처리하지 않습니다. 두 개의 빈 줄은 다른 작업에서 제거하지 않는 한 두 개의 비교 단위로 유지됩니다.
비교하기 전에 정규화가 수행되는 방식 - 원본 텍스트가 읽은 내용인 동안 옵션이 일치를 위해 각 줄을 표준 형식으로 변환한다고 설명합니다.
줄 키는 일치하기 전에 원본 텍스트에서 계산됩니다. Trim()은 선행/후행 공백을 제거하고 정규식은 내부 실행을 하나의 공백으로 바꿉니다. diff 알고리즘은 키를 비교하지만 표시된 행에 원본 텍스트를 유지합니다. 공통 접두사와 접미사는 LCS 테이블을 작성하기 전에 삭제되므로 큰 문서의 작은 편집에서는 모든 줄을 서로 비교할 필요가 없습니다. 동적 프로그래밍 테이블은 양쪽 측면 길이에 따라 커지기 때문에 2,000개의 서로 다른 라인 캡이 있습니다.
작업된 예: 다시 들여쓰기된 Python 함수 및 YAML 파일 — Python 보기를 정리한 다음 실제로 문서 구조를 변경하는 YAML 들여쓰기 변경 사항을 숨기는 옵션을 보여줍니다.
동일한 중첩 수준을 유지하면서 전체 본문이 공백 4개에서 공백 2개로 변경되는 Python 함수를 상상해 보세요. 들여쓰기를 무시하면 해당 서식 지정 노이즈를 숨길 수 있습니다. YAML에서 services.web 아래에서 서비스 아래로 키를 이동하면 공백이 잘린 후 각 줄의 문자가 동일하더라도 상위 매핑이 변경됩니다. 두 스니펫 모두에서 옵션을 실행하세요. Python 보기는 검토하기가 더 쉬워지는 반면, 데이터 트리 변경에도 불구하고 YAML 변경 사항은 사라질 수 있습니다. 들여쓰기에 민감한 형식을 승인하기 위해 공백을 구분하지 않는 출력만 사용하지 마십시오.
공백이 데이터인 경우 — 공백이 의미를 전달하는 형식(YAML, Makefile, Markdown 코드 블록, 고정 너비 내보내기 및 문자열 리터럴)을 나열합니다.
공백은 YAML 들여쓰기, Makefile 레시피, Markdown 코드 블록 및 고정 너비 내보내기의 데이터입니다. 문자열 리터럴 내에서 여러 공백을 바꾸면 사용자에게 표시되는 텍스트나 서명되거나 해시되는 값이 변경될 수 있습니다. 일반적으로 유연한 형식을 사용하는 코드에도 공백이 중요한 컨텍스트가 있습니다. Python 블록 및 쉘 문서는 확실한 예입니다. 옵션은 언어 문법이 아닌 일반 행을 보기 때문에 해당 컨텍스트를 추론할 수 없습니다. 비교되는 파일을 이해한 경우에만 선택하세요.
공백과 대소문자 옵션 결합 — 두 가지를 모두 활성화하면 동일한 순서의 동일한 문자로 비교 범위가 좁아지고 무엇을 숨기는지 설명합니다.
공백 무시와 대소문자 무시를 결합하면 대소문자나 공백에 관계없이 나머지 문자와 구두점이 일치하는 줄로 일치 범위가 좁아집니다. 서식이 많은 문서를 조용하게 만들 수 있지만 변경된 대소문자 구분 식별자, 헤더 키 또는 파일 시스템 경로를 숨길 수도 있습니다. ToolAcre는 두 번째 옵션을 켤 때만 비교 키를 소문자로 만듭니다. 여전히 원래 줄 텍스트를 표시합니다. 옵션을 한 번에 하나씩 전환하여 각 옵션이 제거된 변경 사항을 확인할 수 있습니다.
이것이 다루지 않는 것 - 옵션은 정규화 후 라인을 비교합니다. 단락을 리플로우하거나 이동된 블록을 감지하거나 리치 문서의 서식을 비교하지 않습니다.
이 기능은 단락 리플로우, 이동된 블록 감지, HTML 렌더링 비교 또는 두 프로그램 AST가 동일한지 여부를 결정하지 않습니다. ToolAcre의 diff는 일부 일반 diff 튜토리얼에 설명된 Myers 알고리즘이 아닌 공통 접두사/접미사 트리밍을 사용하는 라인 기반 LCS 동적 프로그래밍입니다. 붙여넣은 대용량 파일에서는 제한되지 않은 행렬을 할당하는 대신 중지됩니다. 구조적 주장에 대해서는 언어 인식 파서 또는 버전 제어 검토를 사용하십시오.
요약: 전환하고 기본값으로 설정하지 마세요. 두 비교를 모두 실행하도록 권장하고 ToolAcre의 텍스트 비교를 통해 동일한 텍스트 쌍에 대해 공백 옵션을 켜고 끄는 방법을 보여줍니다.
기본 진실이 아닌 공백 무시를 뷰로 전환합니다. 텍스트 비교는 브라우저에 붙여넣은 모든 내용을 유지하므로 계약이나 구성 파일을 업로드하지 않고도 동일한 개정의 두 보기를 비교할 수 있습니다. 정규화된 보기에서 변경 사항이 사라지면 무해하다고 결정하기 전에 기본 형식이 공백 의미를 제공하는지 물어보세요.