difftastic/translation/zh-CN/manual-zh-CN/src/introduction.md

2.5 KiB

简介

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

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

该说明书会表明当前版本DFT_VERSION_HERE。变更记录会记录每个版本的特性增加和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也会使用以行为单位的文本差异分析。