简介

Difftastic是一个根据文件的语法的结构化比较工具。它支持超过20款编程语言,当使用它的时候,就会知道它有多么的

Difftastic是一款开源软件(使用MIT许可证)并且可以在Github上获得

该说明书会表明当前版本0.39.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也会使用以行为单位的文本差异分析。