x-cmd pkg | difft - 更直观的代码比较工具,可作为 diff 的替代品
目录
- 简介
- 首次用户
- 更精准的语法高亮
- 支持在 git 命令中使用 difft 来比较
- 已知问题
- 竞品和相关项目
- 进一步阅读
简介
difft(Difftastic) 是一个根据文件语法进行差异分析的结构化比较工具。
Difft 的原理是使用 Tree-sitter 来构建解析树,然后将解析树转换为一个更简单的树,可以进行差异比较。这里简单了解一下 Tree-sitter: 它是一个用于解析源代码的现代解析器生成工具和库,它可以将源代码解析为抽象语法树(AST),使程序能够理解和处理源代码的结构和语法。
首次用户
本文的 demo 展现了使用 difft 来比较两个目录和 rust
文件在语法上的差异。
更精准的语法高亮
- difft 可以根据文件的语法比较文件的不同之处并进行高亮显示,但如果一个文件的扩展名不能识别的话,difft 使用的是带有单词高亮的文本差异比较。若要查看 difft 支持哪些语言,可以点击这个链接查看 difft语言支持
- 支持仅检查两个文件是否具有相同的语法结构,而不进行差异计算
支持在 git 命令中使用 difft 来比较
- 当前环境使用: 可以通过设置环境变量 GIT_EXTERNAL_DIFF (
GIT_EXTERNAL_DIFF=difft git diff
)然后在当前环境使用 git diff 即可 - 全局配置: 如果您想默认使用 difftastic,可以使用 git config 进行配置。具体操作方式可以在这里查看
除 git 以外,difft 还支持 Mercurial 和 Fossil(Mercurial 和 Fossil 都是版本控制系统)
已知问题
- difft 在比较大文件上的性能较差,并且有可能会占用大量的内存,详情请看这里。
竞品和相关项目
以下 cli 项目也是基于树进行结构差异分析:
- json-diff 比较 JSON 文件的结构 diff
- GumTree 解析多种编程语言,然后执行基于树的 diff,输出 HTML 显示。
- Diffsitter 一个基于树的比较工具。
- Autochrome 是一个用于在结构上比较和突出显示 clojure 源代码的程序。
- graphtage 通过解析为通用文件格式,然后显示差异来比较结构化数据,允许将 JSON 与 YAML 进行差异。
进一步阅读
- 项目托管在 GitHub 上,里面的 README 文档提供了详细的参数功能和使用说明。
- 官方提供了详细的 manual 文档,该文档对 difft 的解析进行了详尽的说明。
- 如果你是 magit 用户,你可以参考 difftastic-diffing-with-magit,将 difftastic 与 magit 一起使用。
更多内容请查阅 : pkg/difft
转载请标明原文链接 :https://www.x-cmd.com/pkg/difft
关注微信官方公众号 : oh my x
获取开源软件和 x-cmd 最新用法