sonarlint 在 vscode 无反应主因是默认仅对已绑定 sonarqube/cloud 的项目启用完整规则,本地扫描需手动开启 connectedmode 并配置语言支持;.ts 文件需确保 typescript 语言服务器就绪且规则 id 正确(如 typescript:s6541),扫描差异源于 vscode 仅做单文件轻量分析,而 sonarqube 基于全量构建。

为什么 SonarLint 在 VSCode 里没反应?
多数人装完插件发现打开代码毫无提示,不是插件坏了,而是它默认只对已绑定 SonarQube/SonarCloud 项目的文件启用完整规则——本地独立扫描需手动开启 sonarlint.connectedMode.enabled 并配置语言支持。
常见错误现象:Unable to analyze file: no language server available 或编辑器右下角始终显示 “SonarLint: Ready” 却不报任何问题。
- 检查是否在工作区根目录存在
sonar-project.properties或sonarcloud.yaml:没有也不影响本地扫描,但有则会触发连接模式 - 确认已安装对应语言的 VSCode 官方扩展(如 Python、Java、TypeScript),SonarLint 依赖它们提供 AST 和语法信息
- 打开设置搜索
sonarlint.rules,点开「Edit in settings.json」,确保至少有一条规则未被设为"severity": "off"
如何让 SonarLint 扫描 .ts 文件并识别 TypeScript 特有漏洞?
SonarLint 默认对 .ts 文件启用部分规则,但若项目用的是 TypeScript 编译器(tsc)而非 Babel,必须显式启用 TypeScript 语言服务器支持,否则像 no-unused-vars、any-type 这类语义级问题根本不会触发。
- 确保工作区已安装
@types/node等必要类型声明,否则sonarlint可能因无法解析类型而跳过检查 - 在
settings.json中添加:"sonarlint.languageServerPath": "./node_modules/sonarjs-language-server/bin/server.js"
(仅当使用 sonarjs 插件增强 JS/TS 支持时需要;官方 SonarLint 已内置 TS 支持,此行通常不用) - 关键配置项:
"sonarlint.rules": { "typescript:S1192": { "severity": "warn" }, "typescript:S6541": { "severity": "error" } }其中S6541是 “Avoid using ‘any’ type”,S1192是 “String literals should not be duplicated”
扫描结果不一致:同一段代码在 VSCode 和 SonarQube 网页端报的问题数量差很多
这不是 Bug,是设计差异。VSCode 中的 SonarLint 默认只运行“轻量级”规则集(约 200 条),且不执行跨文件数据流分析(如 taint tracking)、不读取 sonar-project.properties 中定义的测试路径或 exclusions,更不会调用外部编译器做全量构建。
- 网页端 SonarQube 的分析基于完整构建产物(如
mvn compile后的target/),可追踪变量从入口到 SQL 拼接的整条链路;VSCode 仅做单文件 AST 分析 - 若需逼近服务端效果,可在工作区启用 connected mode,并将当前项目绑定到 SonarCloud 组织 —— 但要求该组织中已存在同名项目且配置了
sonar.typescript.lcov.reportPaths等质量配置 - 性能影响明显:启用 full rule set 后,大文件(>3000 行)可能卡顿 2–5 秒,建议仅对核心模块开启
自定义规则不起作用?检查这三个地方
很多人把规则 JSON 复制进 settings.json 后发现无效,大概率是因为路径作用域、格式嵌套或规则键名写错。
- 规则 ID 必须严格匹配 SonarSource 官方文档中的标识符,例如 TypeScript 规则是
typescript:S1192,不是ts:S1192或S1192 -
sonarlint.rules必须放在用户设置或工作区设置的顶层对象中,不能嵌套在editor、typescript或其他字段下 - 如果使用多根工作区(multi-root workspace),每个文件夹需单独配置
.vscode/settings.json,全局设置对子文件夹不继承
复杂点在于规则生效依赖语言服务器重启:改完设置后,务必通过命令面板执行 Developer: Restart Language Server,而不是只重载窗口。











