首页 > 解决方案 > 如何只分析新添加的代码行?

问题描述

我想在我的项目中使用 SonarQube。该项目相当大,扫描整个文件需要很长时间。是否可以仅扫描上次提交中更改的文件,并仅根据更改的代码行提供报告?我想检查添加或修改的行是否会使项目质量最差,并且我不关心旧代码。

例如,如果 A 人创建了一个包含 9 个错误的文件,然后提交了更改 - 报告和质量门应该显示 9 个错误。然后 B 人编辑了同一个文件,添加了几行包含 2 个额外错误的行,然后提交了更改 - 报告应该显示最后 2 个错误,并且应该在最后一次更改时执行质量门(所以应该考虑最后 2 个错误)

我能够将扫描范围缩小到仅在上次提交中更改的文件,但报告是基于整个文件生成的。我有一个想法,只剪切更改的代码行,将它们粘贴到新文件并在文件上运行声纳扫描 - 但我几乎可以肯定 SonarQube 需要文件的整个上下文。

是否有可能以某种方式实现我的用例?

标签: sonarqube

解决方案


不,这是不可能的。我看到很多类似的问题。以下是其中两个的答案:

仅新代码分析

G安坎贝尔:

分析将始终包括所有代码。为什么?当只更改一两个文件时,为什么要花时间分析所有这些?因为任何给定的变化都会产生深远的影响。我给你举两个例子:

我签入了弃用常用方法的更改。突然间,整个项目都应该提出关于使用过时代码的问题,但是因为我只分析了那个文件,所以没有提出新的问题。

在某些情况下,我修改了一个常用的方法以返回 null。突然间,所有取消引用返回值而不先对其进行空值检查的方法都面临着 NullPointerExceptions 的风险。但只分析了我更改的一个文件,因此没有提出任何“可能的 NPE”问题。更糟糕的是,直到碰巧触及每个单独的文件之后,它们才会被提升。

这就是为什么所有文件都包含在每个分析中的原因。

我想对新签入代码进行声纳分析

G安坎贝尔:

首先,SonarQube 界面和默认质量门旨在帮助您专注于新代码期。您不能阻止分析发现那些旧问题,但您可以决定只关注新更改的代码引发的问题。这意味着您基本上会忽略项目主页左侧的白色背景问题,而将注意力集中在右侧黄色背景上的新代码值上。我们将其称为修复泄漏,或者在编写代码时清洁。

其次,如果您有商业版,那么您可以使用分支和 PR 分析。使用 Short-Lived Branch (SLB) 和 PR 分析仍然涵盖所有文件,但 UI 中报告的所有内容都是 PR / SLB 中的更改。

理想情况下,你会结合这两个东西来确保你的新代码保持干净。

在这件事上的立场在过去几年没有改变,所以不要指望它会改变。


推荐阅读