简介

Difftastic 是一个根据文件语法进行比较的结构化比较工具。它 支持超过 30 种编程语言。当你使用时,便会知道它有多么

Difftastic 是一款开源软件(使用 MIT 许可证),你可以 在 GitHub 上查看其源代码

本说明书描述当前版本 0.63.0。更新日志 会记录每个版本的新特性与 bug 的修复。

如果你正寻找其他语言的说明书,我们同样提供了 英文版

语法差异分析

Difftastic 检测编程语言、解析代码,并比较语法树。以下是例子。

// old.rs
let ts_lang = guess(path, guess_src).map(tsp::from_language);
// new.rs
let ts_lang = language_override
    .or_else(|| guess(path, guess_src))
    .map(tsp::from_language);
$ difft old.rs new.rs

1 1 let ts_lang = language_override
. 2     .or_else(|| guess(path, guess_src))
. 3     .map(tsp::from_language);

注意 Difftastic 是如何识别 .map 没有变化的,尽管它在带有空格的新行上。

面对行的差异分析表现则会很不理想。

$ diff -u old.rs new.rs

@@ -1 +1,3 @@
-let ts_lang = guess(path, guess_src).map(tsp::from_language);
+let ts_lang = language_override
+    .or_else(|| guess(path, guess_src))
+    .map(tsp::from_language);

一些文本差异分析工具也会突出单词的变化(如 GitHub 或 git 的 --word-diff),但它们仍无法理解代码本身。Difftastic 永远会找到匹配的定界符:你可以看到 or_else 结尾处的 ) 已被突出显示。

备用的文本差异分析

如果 Difftastic 不能理解输入文件,它将用常规的面向行的文本差异分析与单词高亮显示。

同时,当输入的文件较大时,Difftastic 也会使用面向行的文本差异分析。