3P by neo 3달전 | favorite | 댓글 1개

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-placeasdf의 대체제로 빠르고 유연함.
    • zoxidecd 명령어의 대체제로, 사용자가 이동한 디렉토리를 기억하고 부분 일치 검색을 통해 빠르게 이동할 수 있게 함.
    • dustdu의 보완 도구로, 가장 많은 디스크 공간을 사용하는 디렉토리를 보여줌.
  • 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로 표시되며, 압축 가능한 내용을 바이너리에 포함시키지 않은 이유에 대한 의문을 제기함.