job51-gitlab-cr-node-skill-prompt-optimize 1.5.8 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/rules/code-review-rules.md +11 -27
- package/index.js +2 -1
- package/log +691 -812
- package/package.json +1 -1
|
@@ -145,28 +145,13 @@
|
|
|
145
145
|
> - 示例:`UserTaskPop pop = sdk.method(); log.debug(pop.getId())` 问题应报告在 `pop.getId()` 行,不是 `sdk.method()` 或变量定义行
|
|
146
146
|
> - **每个 diff 块只报告本块内实际会出错的代码**,不要在无关的 diff 块(如 package 行、import 行、类定义行)报告问题
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
> - 代码可读性差(魔法数字、命名不规范、缺少必要注释)
|
|
150
|
-
> - 性能潜在问题(低效算法、不必要的数据库查询、内存使用不当)
|
|
151
|
-
> - 边界条件处理不完善(但不导致运行时异常)
|
|
152
|
-
> - 异常处理不完善(捕获异常未记录或吞掉异常)
|
|
153
|
-
> - 资源使用不规范(未关闭资源但无泄漏风险)
|
|
154
|
-
> - 代码重复或违反 DRY 原则
|
|
155
|
-
> - 类型安全警告(原始类型使用、unchecked 转换)
|
|
156
|
-
> - **强制排除**:警告中**不得包含**空指针/空引用、类型转换/拆箱、集合越界等运行时异常描述
|
|
157
|
-
> - **行号去重**:若某行号已在严重问题中报告,警告中**禁止**再出现
|
|
158
|
-
> - **风格一致性排除**:**不得报告"建议添加 XX 注解/XX 校验/XX 异常处理"** 这类问题,除非项目已有明确惯例而此处遗漏
|
|
159
|
-
|
|
160
|
-
11. **问题描述准确性**:
|
|
161
|
-
> - 若代码变更可能导致运行时异常,必须优先描述异常风险,不得降级为性能或健壮性描述
|
|
162
|
-
|
|
163
|
-
12. **问题分级规则**:
|
|
148
|
+
11. **问题分级规则**:
|
|
164
149
|
> - 可能导致运行时异常/错误、数据丢失/损坏、安全漏洞的,**必须**归类为严重问题
|
|
165
150
|
> - 同一代码块的多个问题,全部归入同一风险级别并依次展示
|
|
166
151
|
|
|
167
|
-
|
|
152
|
+
12. 最终输出必须以 `<REPORT>` 开始,以 `</REPORT>` 结束;
|
|
168
153
|
|
|
169
|
-
|
|
154
|
+
13. **行号计算规范**:
|
|
170
155
|
> - **Diff 头信息格式**:`@@ -84,9 +84,11 @@`
|
|
171
156
|
> - `-84,9`:旧文件从第 84 行开始,共 9 行
|
|
172
157
|
> - `+84,11`:新文件从第 84 行开始,共 11 行
|
|
@@ -180,19 +165,18 @@
|
|
|
180
165
|
> - 第 2 行 `+`:行号 = 2
|
|
181
166
|
> - **关键**:问题行号必须准确指向变更后代码的实际行号(绝对行号)
|
|
182
167
|
|
|
183
|
-
|
|
168
|
+
14. `<REPORT>` 标签示例中的问题块数量仅用于展示格式,实际数量由 review 结果决定;
|
|
184
169
|
|
|
185
|
-
|
|
170
|
+
15. **输出前验证流程**:
|
|
186
171
|
> - **块内去重检查**:**同一 diff 块内由同一根本原因导致的问题,只报告一次**
|
|
187
172
|
> - 示例:同一个变量 `userTaskSDK` 在块内多处被调用,若都存在未判空问题,**合并为一条报告**
|
|
188
173
|
> - 方法:**按「变量名 + 问题类型 + 根本原因」进行去重**,相同组合的问题只保留第一个
|
|
189
174
|
> - **注意**:每个 diff 块是独立审查的,无法跨块去重,只需保证当前块内不重复
|
|
190
|
-
> - **警告验证**:检查警告中是否包含运行时异常关键词,若包含则升级为严重问题
|
|
191
175
|
> - **代码示例验证**:确保错误代码示例不包含 `-` 开头的已删除代码
|
|
192
176
|
> - **删除代码验证**:**逐条检查问题涉及的代码行,确认不是 `-` 开头的已删除代码**
|
|
193
177
|
> - **安全问题验证**:确保不针对已删除代码报告安全问题
|
|
194
178
|
|
|
195
|
-
|
|
179
|
+
16. **代码变更方向识别**:
|
|
196
180
|
> - `-` 开头:**已删除的代码**,**禁止**作为审查对象,**禁止**报告任何问题
|
|
197
181
|
> - `+` 开头:**新增的代码**,是审查的唯一重点
|
|
198
182
|
> - 空格开头:未变更的上下文代码,仅作参考
|
|
@@ -206,7 +190,7 @@
|
|
|
206
190
|
> - **同一变量多次使用**:只在第一次可能出错的地方报告一次
|
|
207
191
|
> - **禁止**在类定义、package、import、方法签名等位置报告与这些行无关的问题
|
|
208
192
|
|
|
209
|
-
|
|
193
|
+
17. **变更内容解析步骤**(分析前必须按顺序执行):
|
|
210
194
|
> - **步骤 1:识别变更类型**
|
|
211
195
|
> - 遍历代码块,标记每行类型:`-`(删除)、`+`(新增)、空格(保留)
|
|
212
196
|
> - **步骤 2:丢弃已删除代码**(关键步骤)
|
|
@@ -226,7 +210,7 @@
|
|
|
226
210
|
> - 空指针问题:报告在实际调用 `obj.getXxx()` 的行,不是变量定义行
|
|
227
211
|
> - 禁止在 package、import、类定义、方法签名等位置报告无关问题
|
|
228
212
|
|
|
229
|
-
|
|
213
|
+
18. **输出格式**:严格参照 SKILL.md 模板,无某类问题时省略对应部分;
|
|
230
214
|
> - **必须输出 `<LINE_INFO>` 标签**:包含所有问题的行号信息
|
|
231
215
|
> - **LINE_INFO 格式**(与 targetLine 结构一致):
|
|
232
216
|
```json
|
|
@@ -237,11 +221,11 @@
|
|
|
237
221
|
- `new_line`: 变更后代码的**绝对行号**(必填,指向 `+` 开头的新增代码在文件中的实际行号)
|
|
238
222
|
- `old_path`: 变更前文件路径(可选,仅删除代码相关问题使用)
|
|
239
223
|
- `old_line`: 变更前代码的**绝对行号**(可选,仅删除代码相关问题使用)
|
|
240
|
-
> -
|
|
241
|
-
> -
|
|
224
|
+
> - **行号计算**:参考第 13 条 行号计算规范
|
|
225
|
+
> - **行号定位**:参考第 16 条 问题报告位置规则
|
|
242
226
|
> - 无问题时输出空数组:`<LINE_INFO>[]</LINE_INFO>`
|
|
243
227
|
|
|
244
|
-
|
|
228
|
+
19. **误报防控检查清单**(报告前必须确认):
|
|
245
229
|
> - [ ] 已追踪读取相关方法实现,确认可能返回危险值
|
|
246
230
|
> - [ ] 已跨 diff 块分析,确认不是已被新逻辑替代的删除代码
|
|
247
231
|
> - [ ] 已分析方法内联上下文,确认没有前置判空保护
|
package/index.js
CHANGED
|
@@ -462,11 +462,12 @@ ${diffObject.diff}`;
|
|
|
462
462
|
}
|
|
463
463
|
|
|
464
464
|
// 如果 lineInfo 里的 firstLineFirstChar 为 +,则 targetLine 为 new_path 的 new_start 行;为 -,则 targetLine 为 old_path 的 old_start 行
|
|
465
|
+
// GitLab API 要求:diff 评论只能传递 new_line 或 old_line 中的一个,不能同时传递
|
|
465
466
|
let targetLine = lineInfo.firstLineFirstChar === '+'
|
|
466
467
|
? { new_line: lineInfo.new_start, new_path: diff_info.new_path }
|
|
467
468
|
: lineInfo.firstLineFirstChar === '-'
|
|
468
469
|
? { old_line: lineInfo.old_start, old_path: diff_info.old_path }
|
|
469
|
-
: { new_line: lineInfo.new_start, new_path: diff_info.new_path
|
|
470
|
+
: { new_line: lineInfo.new_start, new_path: diff_info.new_path };
|
|
470
471
|
|
|
471
472
|
// 尝试从审查结果中解析更精确的行号信息(从 LINE_INFO 标签)
|
|
472
473
|
const parsedLineInfo = lineInfoTag ? this.parseLineInfoFromReviewResult(lineInfoTag) : null;
|