difftastic
구문(syntax)을 이해하는 구조적 diff 🟥🟩
파일 탐색기
최종 버전 다운로드 (.zip)- bug_report.md
- coverage.yml
- deploy_docs.yml
- release.yml
- test.yml
- format.js
- conflicts.rs
- main.rs
- index.html
- format.js
- conflicts.rs
- main.rs
- index.html
- add_wrap.png
- braces.svg
- change_wrap.png
- clojure.svg
- cplusplus.svg
- csharp.svg
- dart.svg
- difft_screenshot.png
- erlang.svg
- git_difftool.png
- github.svg
- go.svg
- haskell.svg
- html5.svg
- java.svg
- javascript.svg
- json.svg
- kotlin.svg
- line_numbers.png
- lisp.svg
- lua.svg
- ocaml.svg
- php.svg
- python.svg
- r.svg
- reformat.png
- ruby.svg
- rust.svg
- scala.svg
- typescript.svg
- wrap_struct.png
- yaml.svg
- asciinema-player.css
- asciinema-player.min.js
- demo.cast
- style.css
- favicon.ico
- index.html
- git.png
- html.png
- logo.png
- reformat.png
- wrap_expr.png
- adding_a_parser.md
- alternative_projects.md
- contributing.md
- diffing.md
- fossil.md
- from_source.md
- git.md
- glossary.md
- installation.md
- introduction.md
- jj.md
- language_detection.md
- languages_supported.md
- line_diffing.md
- mercurial.md
- packaging_difftastic.md
- parser_vendoring.md
- parsing.md
- profiling.md
- robots.txt
- SUMMARY.md
- tree_diffing.md
- tricky_cases.md
- usage.md
- favicon.svg
- .gitignore
- book.toml
- replace_version_placeholder.sh
- bad_yaml_1.yml
- bad_yaml_2.yml
- changes_at_end_1.txt
- changes_at_end_2.txt
- empty.js
- MainWindowViewModel.cs
- makefile_1.mk
- makefile_2.mk
- x_mod_false_positive.js
- clojure.clj
- foo.js
- has_many_hunk.py
- only_in_1.c
- clojure.clj
- foo.js
- has_many_hunk.py
- only_in_2.rs
- doc.txt
- .hidden.txt
- doc.txt
- .hidden.txt
- ada_1.adb
- ada_2.adb
- added_line_1.txt
- added_line_2.txt
- align_footer_1.txt
- align_footer_2.txt
- all_changed_1.js
- all_changed_2.js
- apex_1.cls
- apex_2.cls
- asm_1.s
- asm_2.s
- b2_math_1.h
- b2_math_2.h
- bad_combine_1.rs
- bad_combine_2.rs
- big_text_hunk_1.txt
- big_text_hunk_2.txt
- change_outer_1.el
- change_outer_2.el
- chinese_1.po
- chinese_2.po
- clojure_1.clj
- clojure_2.clj
- comma_1.js
- comma_2.js
- comma_and_comment_1.js
- comma_and_comment_2.js
- comments_1.rs
- comments_2.rs
- compare.expected
- compare_all.sh
- conflicts.el
- context_1.rs
- context_2.rs
- contiguous_1.js
- contiguous_2.js
- css_1.css
- css_2.css
- dart_1.dart
- dart_2.dart
- devicetree_1.dts
- devicetree_2.dts
- elisp_1.el
- elisp_2.el
- elisp_contiguous_1.el
- elisp_contiguous_2.el
- elixir_1.ex
- elixir_2.ex
- elm_1.elm
- elm_2.elm
- erlang_1.erl
- erlang_2.erl
- f_sharp_1.fs
- f_sharp_2.fs
- fish_1.fish
- fish_2.fish
- fortran_1.f90
- fortran_2.f90
- hack_1.php
- hack_2.php
- haskell_1.hs
- haskell_2.hs
- hcl_1.hcl
- hcl_2.hcl
- hello_world_1.smali
- hello_world_2.smali
- helpful-unit-test-after.el
- helpful-unit-test-before.el
- helpful_1.el
- helpful_2.el
- html_1.html
- html_2.html
- html_simple_1.html
- html_simple_2.html
- huge_cpp_1.cpp
- huge_cpp_2.cpp
- hyphen_subwords_1.json
- hyphen_subwords_2.json
- identical_1.scala
- identical_2.scala
- if_1.py
- if_2.py
- insert_blank_1.txt
- insert_blank_2.txt
- janet_1.janet
- janet_2.janet
- java_1.java
- java_2.java
- javascript_1.js
- javascript_2.js
- javascript_simple_1.js
- javascript_simple_2.js
- json_1.json
- json_2.json
- jsx_1.jsx
- jsx_2.jsx
- julia_1.jl
- julia_2.jl
- load_1.js
- load_2.js
- long_line_1.txt
- long_line_2.txt
- lua_1.lua
- lua_2.lua
- makefile_1.mk
- makefile_2.mk
- many_newlines_1.txt
- many_newlines_2.txt
- metadata_1.clj
- metadata_2.clj
- modules_1.ml
- modules_2.ml
- multibyte_1.py
- multibyte_2.py
- multiline_string_1.ml
- multiline_string_2.ml
- multiline_string_eof_1.yml
- multiline_string_eof_2.yml
- nest_1.rs
- nest_2.rs
- nested_slider_1.el
- nested_slider_1.rs
- nested_slider_2.el
- nested_slider_2.rs
- nesting_1.el
- nesting_2.el
- newick_1.nwk
- newick_2.nwk
- nix_1.nix
- nix_2.nix
- nullable_1.kt
- nullable_2.kt
- objc_header_1.h
- objc_header_2.h
- objc_module_1.m
- objc_module_2.m
- ocaml_1.ml
- ocaml_2.ml
- outer_delimiter_1.el
- outer_delimiter_2.el
- pascal_1.pascal
- pascal_2.pascal
- perl_1.pl
- perl_2.pl
- prefer_outer_1.el
- prefer_outer_2.el
- preprocessor_1.h
- preprocessor_2.h
- qml_1.qml
- qml_2.qml
- r_1.R
- r_2.R
- racket_1.rkt
- racket_2.rkt
- repeated_line_no_eol_1.txt
- repeated_line_no_eol_2.txt
- ruby_1.rb
- ruby_2.rb
- scala_1.scala
- scala_2.scala
- scheme_1.scm
- scheme_2.scm
- Session_1.kt
- Session_2.kt
- simple_1.js
- simple_1.txt
- simple_2.js
- simple_2.txt
- slider_1.rs
- slider_2.rs
- slider_at_end_1.json
- slider_at_end_2.json
- slow_1.rs
- slow_2.rs
- small_1.js
- small_2.js
- sql_1.sql
- sql_2.sql
- string_subwords_1.el
- string_subwords_2.el
- strings_1.el
- strings_2.el
- swift_1.swift
- swift_2.swift
- syntax_error_1.js
- syntax_error_2.js
- tab_1.c
- tab_1.txt
- tab_2.c
- tab_2.txt
- tailwind_1.css
- tailwind_2.css
- text_1.txt
- text_2.txt
- todomvc_1.gleam
- todomvc_2.gleam
- toml_1.toml
- toml_2.toml
- trailing_commas_1.js
- trailing_commas_2.js
- trailling_newline_1.yaml
- trailling_newline_2.yaml
- typescript_1.ts
- typescript_2.ts
- typing_1.ml
- typing_2.ml
- utf16_1.py
- utf16_2.py
- verilog_1.sv
- verilog_2.sv
- vhdl_1.vhd
- vhdl_2.vhd
- whitespace_1.tsx
- whitespace_2.tsx
- windows1251_1.txt
- windows1251_2.txt
- xml_1.xml
- xml_2.xml
- yaml_1.yaml
- yaml_2.yaml
- zig_1.zig
- zig_2.zig
- changes.rs
- graph.rs
- lcs_diff.rs
- mod.rs
- shortest_path.rs
- sliders.rs
- stack.rs
- unchanged.rs
- context.rs
- hunks.rs
- inline.rs
- json.rs
- mod.rs
- side_by_side.rs
- style.rs
- guess_language.rs
- mod.rs
- syntax.rs
- tree_sitter_parser.rs
- conflicts.rs
- constants.rs
- exit_codes.rs
- files.rs
- gitattributes.rs
- hash.rs
- line_parser.rs
- lines.rs
- main.rs
- options.rs
- summary.rs
- version.rs
- words.rs
- cli.rs
- adding_a_parser.md
- alternative_projects.md
- contributing.md
- diffing.md
- fossil.md
- git.md
- glossary.md
- installation.md
- introduction.md
- languages_supported.md
- mercurial.md
- parser_vendoring.md
- parsing.md
- robots.txt
- SUMMARY.md
- tree_diffing.md
- tricky_cases.md
- usage.md
- .gitignore
- book.toml
- replace_version_placeholder.sh
- README-zh-CN.md
- ada.scm
- c-sharp.scm
- cmake.scm
- devicetree.scm
- hcl.scm
- janet_simple.scm
- julia.scm
- kotlin.scm
- latex.scm
- newick.scm
- pascal.scm
- proto.scm
- smali.scm
- verilog.scm
- binding.cc
- index.js
- build.rs
- lib.rs
- highlights.scm
- parser.h
- grammar.json
- node-types.json
- parser.c
- scanner.c
- .gitignore
- binding.gyp
- Cargo.toml
- grammar.js
- package-lock.json
- package.json
- README.md
- build.yml
- deploy-to-crates-io.yml
- deploy-to-github.yml
- deploy-to-npm.yml
- labeler.yml
- regenerate-parser.yml
- labeler.yml
- tree-sitter.h.in
- tree-sitter.pc.in
- binding.cc
- index.js
- build.rs
- lib.rs
- README.md
- Logger.kt
- highlights.scm
- parser.h
- grammar.json
- node-types.json
- parser.c
- scanner.c
- annotations.txt
- assignment.txt
- classes.txt
- comments.txt
- expressions.txt
- functions.txt
- literals.txt
- newlines.txt
- soft_keywords.txt
- source-files.txt
- statements.txt
- types.txt
- .editorconfig
- .gitattributes
- .gitignore
- binding.gyp
- Cargo.lock
- Cargo.toml
- grammar-reference.js
- grammar.js
- Icon128.png
- LICENSE
- Makefile
- package-lock.json
- package.json
- playground-screenshot.png
- README.md
- ci.yml
- dependabot.yml
- bench_main.rs
- tree-sitter-latex.pc.in
- binding.go
- binding_test.go
- binding.cc
- index.d.ts
- index.js
- __init__.py
- __init__.pyi
- binding.c
- py.typed
- build.rs
- lib.rs
- latex.h
- texlab.tex
- alloc.h
- array.h
- parser.h
- grammar.json
- node-types.json
- parser.c
- scanner.c
- commands.txt
- environments.txt
- groups.txt
- includes.txt
- issues.txt
- math.txt
- sections.txt
- text.txt
- trivia.txt
- .clang-format
- .editorconfig
- .gitattributes
- .gitignore
- .prettierrc
- binding.gyp
- Cargo.toml
- CHANGELOG.md
- grammar.js
- LICENSE
- Makefile
- package-lock.json
- package.json
- Package.swift
- pyproject.toml
- README.md
- setup.py
- tree-sitter.json
- ci.yml
- fuzz.yml
- publish.yml
- release.yml
- binding.cc
- index.js
- build.rs
- lib.rs
- README.md
- smali.h
- folds.scm
- highlights.scm
- indents.scm
- injections.scm
- locals.scm
- known_failures.txt
- parse-examples
- parser.h
- grammar.json
- node-types.json
- parser.c
- scanner.c
- classes
- fields
- interfaces
- methods
- params
- statements
- .build.yml
- .eslintrc.js
- .gitattributes
- .gitignore
- .npmignore
- binding.gyp
- Cargo.toml
- CHANGELOG.md
- grammar.js
- LICENSE
- package.json
- Package.swift
- README.md
- tree-sitter-janet-simple-src
- tree-sitter-kotlin-src
- tree-sitter-latex-src
- tree-sitter-smali-src
- .aiderignore
- .codecov.yml
- .gitattributes
- .gitignore
- .rustfmt.toml
- .typos.toml
- AI_POLICY.md
- build.rs
- Cargo.lock
- Cargo.toml
- CHANGELOG.md
- CITATION.cff
- clippy.toml
- difft.1
- difft.1.md
- justfile
- LICENSE
- README.md
- rust-toolchain.toml
# 설치 가이드
1. 코드 내려받기
git clone https://github.com/Wilfred/difftastic
깃허브에서 프로젝트 코드 전체를 내 컴퓨터로 내려받습니다.
cd difftastic
방금 내려받은 프로젝트 폴더 안으로 이동합니다.
2. Node.js
쉬움 추천사전 준비물
⚠️ 이 프로젝트는 규모가 큰 저장소라, 이 방법이 실제 핵심 제품이 아니라 내부 하위 패키지를 가리키는 것일 수 있습니다. README 전체를 함께 확인해보세요.
cd vendored_parsers/tree-sitter-janet-simple
이 프로젝트의 관련 파일이 하위 폴더 안에 있어서, 먼저 그 폴더로 이동합니다.
npm install
package.json에 명시된 라이브러리들을 내려받아 설치합니다.
npm start
개발/실행 서버를 켭니다.
명령어 실행 후 터미널에 나타나는 주소(보통 http://localhost:3000 형태)를 브라우저에서 열어보세요.
3. Python
쉬움사전 준비물
⚠️ 이 프로젝트는 규모가 큰 저장소라, 이 방법이 실제 핵심 제품이 아니라 내부 하위 패키지를 가리키는 것일 수 있습니다. README 전체를 함께 확인해보세요.
pip install .
PyPI에 배포된 패키지를 바로 설치합니다. 소스 클론이 필요 없습니다.
python <실행할 파일명>.py # README에서 정확한 실행 파일명을 확인하세요
파이썬 스크립트(또는 모듈)를 실행합니다.
에러 메시지 없이 실행되고 터미널에 안내 문구가 출력되면 정상입니다.
4. Rust
보통사전 준비물
- Git GitHub에서 프로젝트 코드를 내려받으려면 필요합니다.
- Rust (rustup) rustup으로 설치하면 cargo도 함께 설치됩니다.
cargo build --release
Rust 프로젝트를 컴파일합니다.
cargo run
빌드 후 바로 실행까지 진행합니다.
cargo build가 에러 없이 끝나면 성공입니다. target/ 폴더에 실행 파일이 생성됩니다.
5. Make
보통사전 준비물
- Git GitHub에서 프로젝트 코드를 내려받으려면 필요합니다.
- Make Linux/macOS는 보통 기본 설치되어 있습니다. Windows는 별도 설치(예: MSYS2, WSL)가 필요합니다.
⚠️ 이 프로젝트는 규모가 큰 저장소라, 이 방법이 실제 핵심 제품이 아니라 내부 하위 패키지를 가리키는 것일 수 있습니다. README 전체를 함께 확인해보세요.
cd vendored_parsers/tree-sitter-kotlin
이 프로젝트의 관련 파일이 하위 폴더 안에 있어서, 먼저 그 폴더로 이동합니다.
make
생성된 빌드 설정을 바탕으로 실제 컴파일을 진행해 실행 파일을 만듭니다.
에러 없이 끝나면 성공입니다. 생성된 실행 파일을 직접 실행해보세요.
// repository documentation
Was this content helpful?
(0 ratings)
