5 个版本
0.53.4 | 2023 年 11 月 30 日 |
---|---|
0.53.3 | 2023 年 11 月 30 日 |
0.53.2 | 2023 年 11 月 30 日 |
0.53.1 | 2023 年 11 月 30 日 |
0.53.0 | 2023 年 11 月 16 日 |
#1580 in 解析器实现
每月 51 次下载
217MB
6.5M SLoC
Difftastic 是一个结构化差异工具,根据语法比较文件。
基本示例
在这个 JavaScript 示例中,我们可以看到
(1) Difftastic 理解嵌套。它突出显示匹配的 {
和 }
,但理解尽管有前导空白,foo()
并没有改变。
(2) Difftastic 理解哪些行应该对齐。它将左侧的 bar(1)
与右侧的 bar(2)
对齐,即使文本内容并不相同。
(3) Difftastic 理解换行没有意义。 "eric"
现在在新的一行,但它并没有改变。
一分钟演示
这个一分钟的视频屏幕截图演示了使用独立文件和 git 使用 difftastic。
支持的语言
Difftastic 支持超过 30 种编程语言,有关完整列表,请参阅手册。
如果文件有一个未识别的扩展名,difftastic 将使用带单词高亮的文本差异。
已知问题
性能。Difftastic 在具有大量更改的文件上扩展相对较差,并且可能占用大量内存。
显示。Difftastic 具有并排显示,通常工作良好,但可能会令人困惑。
健壮性。Difftastic 定期发布可修复崩溃的版本。
非目标
补丁。Difftastic 输出旨在供人类消费,并且它不会生成可以稍后应用的补丁。如果需要补丁,请使用 diff
。
补丁文件也是按行组织的,这对difftastic来说太有限了。difftastic可能会在同一行中找到添加和删除的内容,并且它追踪旧文件和新文件行号之间的关系。
合并。AST合并是一个difftastic没有解决的问题。
常见问题解答(FAQ)
这基本上不是--word-diff --ignore-all-space
吗?
单词差异无法做到这一点。
difftastic会解析您的代码。它理解何时空白字符很重要,例如在字符串字面量或像Python这样的语言中。它理解在JS中x-1
是三个标记,但在Lisp中是一个标记。
我可以使用difftastic与git一起使用吗?
可以!difftastic手册[1]包括git使用的说明。您还可以使用它[2]。
如果您是magit用户,请查看这篇博客文章,展示了一种使用difftastic与magit的方法。
difftastic能与我喜欢的工具集成吗?
可能不会。difftastic还年轻。考虑为您喜欢的工具编写一个插件,我将在README中添加链接!
difftastic能帮我解决合并冲突吗?
是的!从版本0.50开始,difftastic理解合并冲突标记(即<<<<<<<
,=======
和>>>>>>>
)。
将具有冲突的文件作为单个参数传递给difftastic。difftastic将构建两个冲突文件并比较它们。
$ difft file_with_conflicts.js
difftastic能进行合并吗?
不。AST合并是一个difftastic没有解决的问题。
从文本差异的角度来看,AST差异也是一个有损的过程。difftastic会忽略非语法上重要的空白字符,但合并需要跟踪空白字符。
我可以使用difftastic检查语法更改而不进行差异比较吗?
是的。difftastic可以检查两个文件是否有相同的AST,而不计算差异。这比正常差异比较快得多,并且对于构建检查更改的工具很有用。
例如
$ difft --check-only --exit-code before.js after.js
如果没有发现语法更改,这将设置退出代码为0;如果发现更改,则设置为1。
翻译
许可协议
Difftastic是在MIT许可下开源的,有关详细信息,请参阅LICENSE。
此存储库还包括位于vendored_parsers/
目录中的其他作者的tree-sitter解析器。这些是MIT许可和Apache许可的混合。有关详细信息,请参阅vendored_parsers/*/LICENSE
。
sample_files/
目录中的文件也受MIT许可的约束,除非在其标题中另有说明。
依赖关系
~16–28MB
~421K SLoC