GN⁺: 구문을 이해하는 구조적 차이 분석 도구 'Difftastic'
(difftastic.wilfred.me.uk)Difftastic 구조적 차이 도구
- Difftastic은 구문을 이해하는 CLI 차이 도구로, 파일을 줄 단위가 아닌 구문 기반으로 비교함.
- 사람이 읽기 쉬운 정확한 차이점을 제공함.
실제 변경된 내용 이해
- Difftastic은 tree-sitter를 사용하여 코드를 파싱함.
- 줄 기반 텍스트 차이와 달리, 내부 표현이 변경되지 않았음을 이해함.
서식 변경 무시
- 코드 포매터가 여러 줄로 나누기로 결정했을 때, 실제로 변경된 내용만을 보여줌.
감싸기 변경 시각화
- 래퍼를 추가했을 경우, Difftastic은 정확히 구분자를 일치시킴.
- 내부 내용을 변경하더라도 추가된 래퍼를 보여줄 수 있음.
실제 줄 번호
- 파일의 실제 줄 번호를 변경 전후로 모두 보여줌.
60초 데모
프로그래밍 언어 지원
- C++, C#, Clojure, Dart, Erlang 등 다양한 언어 지원.
- 자세한 지원 언어 목록은 매뉴얼에서 확인 가능.
파일 형식 지원
- HCL, HTML, JSON, YAML 등 다양한 파일 형식 지원.
- 자세한 지원 파일 형식 목록은 매뉴얼에서 확인 가능.
Git과 호환
- Git 설정 지침은 매뉴얼에서 확인 가능.
완전 오픈 소스
- Difftastic은 MIT 라이선스를 가짐.
- 다운로드, 수정, 친구들과 공유 가능.
제작자
- Wilfred Hughes가 Emacs와 커피를 마시며 만듦.
GN⁺의 의견
- Difftastic은 코드의 구조적 차이를 파악하여 개발자들이 변경 사항을 더 명확하게 이해할 수 있게 도와줌.
- 기존의 줄 기반 diff 도구들과 비교했을 때, Difftastic은 코드의 구문을 이해하고 서식 변경을 무시하는 등의 기능으로 더 정교한 비교가 가능함.
- 오픈소스 도구로서, 커뮤니티의 기여를 통해 지속적으로 개선될 가능성이 있으며, 사용자가 필요에 따라 자유롭게 수정하고 확장할 수 있는 장점이 있음.
- 비슷한 기능을 제공하는 다른 도구로는 Git의 내장 도구인
git diff
나 JetBrains의 IntelliJ IDEA와 같은 IDE의 내장 비교 도구가 있지만, Difftastic는 구문 기반 비교라는 독특한 접근 방식을 제공함. - Difftastic을 도입할 때는 지원하는 프로그래밍 언어와 파일 형식을 확인하고, 팀 내에서의 도구 사용에 대한 합의가 필요할 수 있음. 이 도구를 사용함으로써 코드 리뷰의 효율성을 높이고, 협업 과정에서의 오해를 줄일 수 있는 장점이 있음.
Hacker News 의견
-
Tree-sitter 기반 기술 소개
- Tree-sitter는 코드를 AST(Abstract Syntax Tree, 추상 구문 트리)로 변환하고 이를 에디터나 diff 도구 같은 클라이언트에 제공하는 표준 인터페이스를 제공함.
- 이를 통해 도구들은 수십 개의 언어를 직접 지원할 필요 없이 Tree-sitter를 지원함으로써 자동으로 Tree-sitter가 지원하는 모든 언어를 다룰 수 있음.
- 새로운 언어 개발 시 Tree-sitter 파서를 만들면 Tree-sitter를 지원하는 모든 도구가 해당 언어를 지원하게 됨.
- 이러한 혁신은 다양한 언어를 지원하는 도구 개발에 있어 중복 작업을 줄이고 향상된 도구 생태계를 만들어내는 중임.
-
Rust 프로젝트 및 도구 업데이트 방법
- Rust 기반의 프로젝트들을 cargo를 통해 설치하고 업데이트하는 방법을 제시함.
-
mise-en-place
는asdf
의 대체제로 빠르고 유연함. -
zoxide
는cd
명령어의 대체제로, 사용자가 이동한 디렉토리를 기억하고 부분 일치 검색을 통해 빠르게 이동할 수 있게 함. -
dust
는du
의 보완 도구로, 가장 많은 디스크 공간을 사용하는 디렉토리를 보여줌.
-
Difftastic 사용 경험 및 의견
- Difftastic를 사용한 경험을 공유하며, 다른 diff 도구를 사용할 때 불편함을 느낀다고 언급함.
- 구문이 변경되어도 의미는 동일할 때를 비교할 수 있는 'semantic' diff 도구에 대한 가능성을 탐구함.
-
Difftastic의 편리성
- Difftastic가 실제 파일의 줄 번호를 보여주는 기능을 강조하며, git diff와 함께 사용 시 매우 유용함을 언급함.
-
관련 도구: diff2html
- diff2html은 CLI(Command Line Interface)를 통해 HTML 형식의 diff를 브라우저 탭에서 보여주는 도구임.
-
Augeas 라이브러리 사용 경험
- Augeas 라이브러리를 사용하여 설정 파일의 차이를 감지하고, 사용자가 구문에 민감하지 않은 세밀한 허용 목록을 작성할 수 있게 한 경험을 공유함.
-
Semantic Merge와 비교
- Semantic Merge는 오픈 소스가 아니었지만, Difftastic는 오픈 소스이며 더 나은 diff를 제공함.
- Difftastic를 merge 기능으로 확장할 계획이 있는지에 대한 궁금증을 표현함.
-
icdiff로의 복귀
- Difftastic를 시도했지만, 변경되지 않은 부분에 대해 이상한 포맷팅을 적용하는 등의 문제로 인해 icdiff로 돌아갔다는 의견을 제시함.
-
Difftastic의 시각적 문제
- 큰 XML 파일을 검사할 때 수정된 라인과 속성을 시각적으로 구분하기 어려움을 지적하며, 스타일 변경 방법에 대한 문서화가 필요함을 언급함.
-
Difftastic의 설치 크기
- Arch Linux 패키지의 크기가 7MB이지만 설치 시 80MB로 증가하며,
difft
바이너리 자체가 78MB임을 언급함. - LZ4 압축을 사용하는 ZFS 데이터셋에서는 17MB로 표시되며, 압축 가능한 내용을 바이너리에 포함시키지 않은 이유에 대한 의문을 제기함.
- Arch Linux 패키지의 크기가 7MB이지만 설치 시 80MB로 증가하며,