lowkeyfish / sonar-intellij-plugin

Perform Sonar code analysis on Java projects, view code analysis reports, and prompt problem codes.
GNU General Public License v3.0
18 stars 11 forks source link

对增量修改扫描的支持 #5

Closed bestv5 closed 2 years ago

bestv5 commented 2 years ago

希望增加仅扫描增量修改的支持。增加扫描速度。

lowkeyfish commented 2 years ago

非全量检测已经在规划开发中。

lowkeyfish commented 2 years ago

@bestv5 v0.2.1 版本已支持按范围检测(Project、Module、Package、当前打开文件、当前选中文件和 Git 更新文件)。

bestv5 commented 2 years ago

@bestv5 v0.2.1 版本已支持按范围检测(Project、Module、Package、当前打开文件、当前选中文件和 Git 更新文件)。 🎉🎉🎉,咱们这个插件,可以使用sonarqube中修改过的规则进行扫描吗,并且展示出来的提示也是sonarqube中的。

lowkeyfish commented 2 years ago

现在插件使用的规则是每次检查都从 SonarQube 加载的,所有的问题提示和描述也是 SonarQube 规则服务器端的内容,只有代码检查是在本地执行的。你需要的是除了这些之外的吗。

lowkeyfish commented 2 years ago

现在插件使用的规则是每次检查都从 SonarQube 加载的,所有的问题提示和描述也是 SonarQube 规则服务器端的内容,只有代码检查是在本地执行的。你需要的是除了这些之外的吗。

bestv5 commented 2 years ago

我想要的就是按soanrqube规则来,目前sonarlint插件扫描时用的规则是sonarqube的,但是问题提示显示的本地内置规则内容,sonarqube中新增规则(比如findbugs等插件里的规则)不显示。

lowkeyfish commented 2 years ago

你描述的这个问题理论上是不应该存在的。插件底层使用 SonarScanner 进行代码检查,默认使用的是待检查语言相对应的质量配置规则集,这个规则集可以包含Sonar自己的规则,也可以包含其他第三方插件的规则(Checkstyle、FindBugs、PMD 等)。插件检查的结果和直接使用 SonarScanner 的其他实现(maven、Jenkins等)一致。插件检查的过程中如果有类似于 FindBugs 的规则,SonarScanner 会自动从 SonarQube 加载对应的 JAR 包到本地执行检查的。我自己使用的 SonarQube 配置规则就包含了 Sonar、Checkstyle、PMD、FindBugs 各种规则的集合,插件本地检查报告中没有对应规则的详细描述和说明,插件会通过 SonarQube 提供的 WebAPI 获取检查过程中涉及语言对应的默认质量配置规则提取其中的规则描述用于在 ToolWindow 中展示。

lowkeyfish commented 2 years ago

SonarLint 插件是 Sonar 官方插件,可能是 Sonar 的发展方向决定的,它虽然可以让你连接 SonarQube,但像你了解的那样它仅展示 Sonar 自己规则相关的问题。和 SonarQube 规则检查结果保持一致是 SonarLint 不支持的。这也是我开发当前插件的原因,我希望本地检查结果和使用 sonar-maven-plugin 或持续集成代码检查结果保持一致。SonarLint 使用的本地规则也有相应的其他优势,例如可以实现实时检查。实时检查是使用 SonarScanner 作为底层的插件所不能实现的,因此我们插件的最新版本(v0.2.1)为了降低检测时间,支持了按范围进行检查以解决全量检查耗时过长的问题。

bestv5 commented 2 years ago

SonarLint 插件是 Sonar 官方插件,可能是 Sonar 的发展方向决定的,它虽然可以让你连接 SonarQube,但像你了解的那样它仅展示 Sonar 自己规则相关的问题。和 SonarQube 规则检查结果保持一致是 SonarLint 不支持的。这也是我开发当前插件的原因,我希望本地检查结果和使用 sonar-maven-plugin 或持续集成代码检查结果保持一致。SonarLint 使用的本地规则也有相应的其他优势,例如可以实现实时检查。实时检查是使用 SonarScanner 作为底层的插件所不能实现的,因此我们插件的最新版本(v0.2.1)为了降低检测时间,支持了按范围进行检查以解决全量检查耗时过长的问题。

确实是这样,升级新版后,不支持增量扫描了。我想关注的其实是增量代码扫描问题,节省时间。不然每次都得全量扫描,去页面查看增量问题

lowkeyfish commented 2 years ago

你提到的升级新版是我这个插件吗。我这个插件起初开发的初衷是在持续集成代码扫描出问题后可以直接在 IDE 中查出问题并更便利的修改,因此开始时想的是不将本地检查报告上传到 SonarQube,但上传报告是 SonarScanner 的默认行为现在插件也没有干预这个行为,另一个原因是终止这个行为也需要一些精力,所以暂时没做。SonarQube 的增量提醒是基于它保存了每次全量的问题,所以它可以提示每次的新增。插件实际上是和 SonarQube 的数据脱离的,如果插件把上次增量问题涉及的文件作为检查范围的话也不是没有办法,但是需要从 SonarQube 获取到上次增加涉及的文件路径,然后在本地只对这些文件做检查。全量检查最准确,也是 SonarQube 的检查方式,SonarQube 的增量也是在两次全量的基础上做的。非全量(包括上面提到如何解决增加的方式)都会导致检查结果不太准确,例如重复块可能会少,也会增加一些其他全量没有的问题(例如变量定义了未使用等)。因此插件当前为了减少耗时支持了非全量检测,实际上是一种了解代码问题后的提升使用体验的手段。要想做到耗时短且和 SonarQube 一致(全量、增量)还有很多的细节要完善。

lowkeyfish commented 2 years ago

还有原先的考虑是插件的检查结果不和你原有的代码检查结果相互干扰,所以插件检查报告使用的项目名称我开始是用了一个特殊前缀的,不过随后放开了这个可以让用户自定义。如果本来没有其他流程例如持续集成对代码做 Sonar 检查,而是把插件作为主要检查结果的话,插件后续可能要重点做下中断本地报告的上传,以便让非全量检查的报告不影响服务器端的全量检查结果。

bestv5 commented 2 years ago

新版本是sonarqube 9.2,现在我不能在参数里指定增量模式了,那个参数废弃了。我现在在寻找一中方式或者插件。可以在ide中直接扫描。通过参数或者读取sonarqube中配置的新代码标识。然后显示相对的新增问题,而不是全量问题。我们老项目更关注新产生的问题。但目前还没有哪种方式能满足我的需求。