比较静态分析报告时处理代码移动

Dealing with code movement when comparing static analysis reports

当我 运行 在我的代码库上使用静态分析工具时,我得到如下结果:

...
arch/powerpc/kernel/time.c:102:5: warning: symbol 'decrementer_max' was not declared. Should it be static?
arch/powerpc/kernel/time.c:138:1: warning: symbol 'rtc_lock' was not declared. Should it be static?
arch/powerpc/kernel/time.c:361:37: warning: implicit cast to nocast type
...

我想在人们进行更改时跟踪警告的数量以及它们在代码中的位置。

我可以 diff 静态分析的结果 运行s,但是如果有人在第 50 行的 time.c 中插入一些代码,上面的警告将会移动,并且因为行号已经改变,diff 会告诉我他们已经改变了。

我应该如何以处理文件内代码移动的方式来比较它们?

谷歌搜索 'smart diff' 等并没有产生效果:它们主要是代码的智能差异而不是日志的智能差异。像 Greylog 或 Kibana 这样的日志分析工具似乎也不合适,它们更多地是为不同的和更一般的分析而设计的,而不是为这个非常具体的任务而设计的。

有什么明显的我遗漏的东西吗?或者这是我应该编写自己的工具的问题?

您可以维护代码和错误的合并:在相应的代码行之后插入每个错误消息(减去其行号)。然后,如果有人在第 50 行插入代码,(更新的)合并将不会在后面的错误点周围产生差异。当然,它在第 50 行会有一个差异,您可能对此感兴趣,也可能不感兴趣。如果您愿意,您可以忽略不涉及错误消息的差异块(为此您需要一些独特的每个插入的错误消息处的标记)。

我尝试了一个稍微简单的设置 - 正如@ajd 所建议的那样,解析消息,并进行不区分行号的匹配。

代码在 https://github.com/daxtens/smart-sparse-diff