3个版本
0.0.2 | 2023年2月17日 |
---|---|
0.0.1 | 2022年9月12日 |
0.0.0 | 2022年9月12日 |
#2438 在 解析器实现
在 kubectl-watch 中使用
1.5MB
48K SLoC
Difftastic 是一种结构化差异工具,它根据语法比较文件。
基本示例
在这个 JavaScript 示例中,我们可以看到
(1) Difftastic 理解嵌套。它突出显示了匹配的 {
和 }
,但理解尽管有前导空白,foo()
没有改变。
(2) Difftastic 理解哪些行应该对齐。尽管它们有所改变,但它将左边的 bar()
与右边的 bar(1)
对齐。
(3) Difftastic 理解行包裹没有意义。现在 "eric"
在新的一行,但它没有改变。
一分钟演示
这个一分钟的视频展示了 difftastic 与独立文件和 git 一起使用的用法。
支持的语言
Difftastic 支持超过 20 种编程语言,有关完整列表,请参阅手册。
如果文件有一个未识别的扩展名,difftastic 将使用带有单词高亮的文本差异。
已知问题
性能。Difftastic 在大量更改的文件上扩展相对较差,并且会使用大量内存。
显示。Difftastic 有一个并排显示,通常工作得很好,但可能会让人困惑。
健壮性。Difftastic 定期发布,以修复崩溃。
非目标
打补丁。Difftastic的输出旨在供人类阅读,它不会生成可以稍后应用的补丁。如果您需要补丁,请使用diff
。
(补丁文件也是按行组织的,这对于difftastic来说太有限了。Difftastic可能会在同一行上找到添加和删除的内容,并且它跟踪旧文件和新文件中行号之间的关系。)
合并。AST合并是一个difftastic没有解决的问题。
常见问题解答
这基本上是不是和--word-diff --ignore-all-space
一样?
单词比较不能做到这一点。
Difftastic会解析您的代码。它理解何时空白重要,例如在字符串字面量或像Python这样的语言中。它理解在JS中x-1
是三个标记,但在Lisp中是一个标记。
我可以用difftastic和git一起使用吗?
您可以使用!difftastic手册包括git使用说明。您也可以用它与mercurial一起使用。
如果您是magit用户,请查看这篇博客文章,展示了使用difftastic与magit的一种方法。
difftastic能集成到我的 favorite 工具中吗?
可能不行。Difftastic还很年轻。考虑为您的 favorite 工具编写一个插件,我将在README中链接它!
翻译
许可协议
Difftastic是在MIT许可下开源的,有关更多详细信息,请参阅LICENSE。
此存储库还包括位于vendor/
目录中的其他作者的tree-sitter解析器。这些解析器是MIT许可和Apache许可的混合。有关更多详细信息,请参阅vendor/*/LICENSE
。
sample_files/
目录中的文件也在MIT许可下,除非在它们的标题中有其他声明。
依赖关系
~12–23MB
~325K SLoC