该技能用于理解、实现和修复 SonarJS 规则,并排查误报。
一、定位规则触发位置:在规则实现中查找 context.report() 调用。追踪误报根因时,先找出全部 report 调用,再回溯每个调用前的条件、变量来源与触发它的 AST 访问器,判断缺失的是类型检查、上下文检查、模式检查,还是条件过宽,据此决定修复位置(提前 return、收紧条件或新增辅助检查)。
二、规则配置架构:配置经 TypeScript config.ts、Java @RuleProperty、SonarQube UI、Bridge 到 ESLint context.options 多层流转。外部规则(meta.ts 中 implementation = 'external')可暴露配置,需包含 description,数组需 items,不用 RegExp 对象而用字符串模式,Java 自定义默认值中的反斜杠需双重转义。当 SonarQube 暴露类型与 ESLint 期望不同时,用 customForConfiguration 配合 customDefault 做值转换。
三、生成命令:修改配置或元数据后运行 npm run generate-meta 重新生成规则元数据,运行 npm run generate-java-rule-classes 生成 Java 规则类,并检查 sonar-plugin 下生成的 Java 文件。
四、AST 遍历策略:优先用 ESLint 选择器分发而非手动递归遍历;无法避免递归时用 visitorKeys 枚举子属性,不要手写 switch。函数参数使用具体节点类型。
五、类型安全与 TS 编译器 API:类型断言需用类型守卫或注释说明;转型 reportDescriptor.node 前应枚举上游所有 report 位置。判断类型等价宜用双向可赋值;TypeFlags 用位运算而非 ===,以免多标志位时失效。
六、误报修复质量:不要压制规则本应报告的告警;为某方法加例外时应覆盖同 API 族的等价方法,并补充测试与文档。装饰器多策略识别全部失败时保留原报告,抑制决策限定在组件而非文件范围,JSX 展开表达式应先静态解析再决定是否抑制。代码风格上可用可选链简化长度检查。具体版本与平台支持暂未提供。