夜雨聆风学习资料网

ARTICLE · 1126108

IDEA里装个SonarQube插件,代码问题当场标出来,再让AI判断该不该改

IDEA里装个SonarQube插件,代码问题当场标出来,再让AI判断该不该改

装好就能用 · SonarQube 插件

AI 编程助手做项目级对接方案工具链

IDEA 里装个 SonarQube 插件

代码问题当场标出来

再让 AI 判断哪条该改、哪条是误报

SonarQube 扫出来的问题,要等代码提交、扫描跑完才看得到,那时候这段代码为什么这么写早忘了。把它的检查装进 IDEA 以后,你或者 AI 刚写下一行,有问题当场就在这一行标出来,旁边写着为什么是问题、怎么改。不用搭服务器,不用注册账号。

第一步

把插件装进 IDEA

插件现在的名字叫 SonarQube for IDE,以前叫 SonarLint,出品方是 SonarSource,认准这两样。官方文档的装法是:设置 → 插件 → Marketplace 里搜 SonarQube for IDE,点 Install,装完点 Restart IDE。插件市场上写着 12.9 这一版要求 IDEA 2024.2 或更新。

我们这台 IDEA 的 Marketplace 列表加载不出来,走的是另一条路:在 JetBrains 插件市场的网站上找到这个插件,下载它的 zip 包(12.9.0 这一版 264MB),然后在 IDEA 里:

按 Ctrl+Shift+A,输入:从磁盘安装插件,回车在弹出的窗口里选中下载好的 zip,点打开看到这样算过:弹出提示:插件"SonarQube for IDE"已安装。重启 IntelliJ IDEA 以在插件中应用更改?点「重启」,IDEA 重新打开后左边多出一个面板,标题是 Welcome to SonarQube for IDE

图 1 选完 zip 后弹出的提示,点「重启」

那个 Welcome 面板是四步的新手引导,点右上角的横线收起来就行。之后右下角可能弹一条 Try SonarQube Cloud for free 的提示,那是推广它的云服务,不用理。插件的界面和规则说明都是英文的,没有中文。

第二步

打开一个文件,看它标出什么

不用做任何配置,打开一个 Java 文件它就开始查。想先确认它在干活,可以用官方文档给的这段示例:在项目里新建 Main.java,把下面的内容贴进去(文件放在包目录下的,最上面自己加一行 package)。

import java.util.ArrayList;import java.util.List;public class Main {  public static void main(String[] args) {    List<String> texts = new ArrayList<String>();    if (texts != null) {      texts.add("Hello World!");    }  }}看到这样算过:点 IDEA 左下角那个波浪线图标,打开 SonarQube for IDE 面板,Findings 下面写着 Found 2 issues,其中一条是:Remove this expression which always evaluates to "true"

图 2 上半是编辑器,下半是 SonarQube for IDE 面板,标出了两个问题;红框是点中的那条

每条问题前面的括号是行号和列号,后面的 java:S2589 是规则编号。官方文档说这段示例会标出两个问题,一个就是上面这条,另一个是建议把 new ArrayList 的写法简化;我们这台也是两个,但第二个不一样,标的是 main 方法的参数 args 没用到。

点一下第一条,两个地方会变。编辑器里,代码上冒出 1、2、3 三个数字,标出它是怎么推出来的:先 new 了一个列表(1),赋给了 texts(2),所以这里判断它不等于 null 一定成立(3)。面板右边出现这条规则的说明,分成 Why is this an issue?、How can I fix it? 几页:

图 3 面板右边的规则说明:为什么是问题、怎么改

官方文档说,打开文件、敲代码、保存的时候它都会自动重新查,结果显示在面板里;想把整个项目查一遍,按 Ctrl+Shift+S。

第三步

让 AI 判断哪条该改

标出来的问题不一定都该照着改。在 IDEA 底部的终端里敲 claude 启动(按《在IDEA里用AI写代码》那篇装过插件的,它的改动会在 IDEA 里左右对比着给你看),把面板里的两条原样告诉它,让它先说该不该改,再动手:

Main.java 里 SonarQube for IDE 标了两个问题:第 7 行 Remove this unused method parameter args(java:S1172);第 9 行 Remove this expression which always evaluates to true(java:S2589)。先说这两条各该不该改、为什么,再只改该改的,别动别的看到这样算过:它先给出每一条的判断和理由;然后 IDEA 里弹出左右对比,左边是原来的、右边是它要改成的,下面有 Reject 和 Apply 两个按钮

图 4 上半是 AI 要做的改动(左旧右新),点 Apply 才生效;下半红框是它对两条问题的判断

我们这台它的回答在图 4 下半部分的红框里:第 7 行那条是误报,main 方法的 args 参数是 Java 规定的写法,不能删,建议标记忽略;第 9 行那条确实是多余的判断,去掉 if,只留里面那一句。对比里它也只动了这一处。点 Apply,再回到 SonarQube 的面板:

图 5 改完之后面板当场更新:原来那条没了,多出一条新的(红框)

第 9 行那条没了,但多出一条新的:Consume or remove this unused collection,意思是这个列表只往里加东西、没有任何地方读它。这一条在改之前没有,去掉 if 之后才报出来;插件在它改完的当场就重新查了一遍。没有这个插件的话,这一条要等提交之后的那次扫描才看得到。

别对 AI 说「把标出来的全修掉」

这次的两条里就有一条不能照着改:插件让删掉 main 方法的 args 参数,可 Java 8、11、17 里 main 必须带这个参数,删了程序就没有入口。让 AI 逐条先说该不该改、为什么,你看过理由再让它动手;改完回面板看有没有冒出新的。插件只认规则,AI 也可能判断错,拿主意的是你。

确认是误报、不想再看到的规则,官方文档的办法是关掉它:设置 → 工具 → SonarQube for IDE → Rules,按语言找到那条规则取消勾选。卡住了,按现象找:

Marketplace 里搜不到 SonarQube for IDE:官方文档说这表示你的 IDE 版本不受支持,先升级 IDEA。

Marketplace 列表一直加载不出来:我们这台就是这样,按第一步里「从磁盘安装插件」的办法装。

打开文件,面板里什么都没有:看面板左下角有没有 Automatic analysis is enabled 这行字;没有的话到 设置 → 工具 → SonarQube for IDE → Settings 里勾上 Automatically trigger analysis。也可以点面板左边那个绿色三角手动查一次。

Java 文件能查,JS、TS 文件不查:官方文档说查这几种文件要用到 Node.js,版本要 20.12 以上或 22.11 以上,并在上面那个 Settings 页里填上 Node.js 的路径。

公司已经有 SonarQube 服务器的,插件可以连上去用同一套规则,官方叫 Connected mode,这篇没有用到。

本篇做完你手里有什么

[ ] IDEA 左下角多了 SonarQube for IDE 的图标[ ] 示例代码贴进去,面板里显示 Found 2 issues[ ] 点开一条,看到了规则说明和代码上的 1、2、3[ ] 让 AI 逐条判断过,只改了该改的那条[ ] 改完回面板看过,知道有没有冒出新的

装上之后不用再做什么,它一直在旁边查。插件负责当场指出来,AI 负责说清该不该改,改不改由你定。

装好就能用 · SonarQube 插件

相关学习资料