基于树坐者的 AST 差异工具,可获取有意义的语义差异
diffsitter 目前仍处于开发阶段,尚未接近生产阶段
准备好了 (还没有)。欢迎大家的贡献!
diffsitter 创建具有语义意义的差异,忽略格式化
例如空格的差异。它通过在 AST(抽象语法树)上计算差异来实现此功能。
文件的语法树,而不是计算文本内容上的差异
文件。
diffsitter 使用来自 diffutils 的解析器
tree-sitter 项目用于解析
源代码。因此,该工具支持的语言仅限于
tree-sitter 支持的语言。
diffsitter 支持以下语言:
请采用以下文件:
fn main() {
let x = 1;
}
fn add_one {
}fn
main
()
{
}
fn addition() {
}
fn add_two() {
}diff 的标准输出将显示:
1,2c1,12
< fn main() {
< let x = 1;
---
> fn
>
>
>
> main
>
> ()
>
> {
> }
>
> fn addition() {
5c15
< fn add_one {
---
> fn add_two() {您可以看到,它捕获了 main 的格式差异
尽管它们在语义上并没有不同,但它们的功能却不同。
查看 diffsitter 的输出:
test_data/short/rust/a.rs -> test_data/short/rust/b.rs
======================================================
9:
--
+ }
11:
---
+ fn addition() {
1:
--
- let x = 1;
14:
---
+ fn add_two() {
4:
--
- fn add_one {注: 这些数字对应于原始文件中的行号。 您还可以通过过滤来确定在差异中考虑哪些树坐标节点 配置文件。
由于它使用 AST 计算差异,因此它知道两个文件中的 main 的格式差异不是有意义的差异,因此不会出现在差异中。diffsitter 还具有一些漂亮的(对终端友好)格式化:
暂无开放 Issues,或尚未同步最近议题。