gitlab-ai-review 3.3.0 → 3.4.1
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/lib/diff-parser.js +4 -1
- package/lib/prompt-tools.js +19 -96
- package/package.json +1 -1
package/lib/diff-parser.js
CHANGED
|
@@ -115,6 +115,7 @@ export function extractMeaningfulChanges(hunks) {
|
|
|
115
115
|
|
|
116
116
|
hunks.forEach(hunk => {
|
|
117
117
|
let currentNewLine = hunk.newStart;
|
|
118
|
+
let currentOldLine = hunk.oldStart;
|
|
118
119
|
|
|
119
120
|
hunk.changes.forEach((change, index) => {
|
|
120
121
|
if (change.type === 'addition') {
|
|
@@ -141,7 +142,7 @@ export function extractMeaningfulChanges(hunks) {
|
|
|
141
142
|
meaningfulChanges.push({
|
|
142
143
|
type: 'deletion',
|
|
143
144
|
content: change.content,
|
|
144
|
-
|
|
145
|
+
lineNumber: currentOldLine, // 使用旧文件的行号
|
|
145
146
|
hunk: hunk.header,
|
|
146
147
|
context: {
|
|
147
148
|
before: hunk.changes.slice(Math.max(0, index - 2), index).map(c => c.content),
|
|
@@ -149,8 +150,10 @@ export function extractMeaningfulChanges(hunks) {
|
|
|
149
150
|
},
|
|
150
151
|
});
|
|
151
152
|
}
|
|
153
|
+
currentOldLine++;
|
|
152
154
|
} else if (change.type === 'context') {
|
|
153
155
|
currentNewLine++;
|
|
156
|
+
currentOldLine++;
|
|
154
157
|
}
|
|
155
158
|
});
|
|
156
159
|
});
|
package/lib/prompt-tools.js
CHANGED
|
@@ -92,7 +92,7 @@ export function buildFileReviewPrompt(fileName, meaningfulChanges) {
|
|
|
92
92
|
{
|
|
93
93
|
"lineNumber": 15,
|
|
94
94
|
"hasIssue": true,
|
|
95
|
-
"comment": "
|
|
95
|
+
"comment": "必须按照上面'项目特定的审查规则'中定义的格式填写"
|
|
96
96
|
}
|
|
97
97
|
]
|
|
98
98
|
}
|
|
@@ -106,16 +106,13 @@ export function buildFileReviewPrompt(fileName, meaningfulChanges) {
|
|
|
106
106
|
- comment 必须是字符串
|
|
107
107
|
|
|
108
108
|
**comment 字段的内容:**
|
|
109
|
-
-
|
|
110
|
-
-
|
|
109
|
+
- **必须严格遵循"项目特定的审查规则"(reviewguard.md)中定义的格式**
|
|
110
|
+
- 如果规则中定义了包含 emoji、评分等格式,**必须完整使用该格式**
|
|
111
|
+
- comment 是一个字符串,可以包含换行符 \\n 来格式化内容
|
|
112
|
+
- 不要自创格式,必须参考上面"项目特定的审查规则"中的示例
|
|
111
113
|
|
|
112
114
|
6. 如果所有代码都没有问题,返回空的 reviews 数组:\`{"reviews": []}\`
|
|
113
|
-
7.
|
|
114
|
-
|
|
115
|
-
**再次强调:**
|
|
116
|
-
- 看到 "类型: 删除" 和 "-" → 代码被移除了
|
|
117
|
-
- 看到 "类型: 新增" 和 "+" → 代码是新加的
|
|
118
|
-
- 不要混淆删除和新增!`;
|
|
115
|
+
7. 只返回 JSON,不要包含其他文字说明`;
|
|
119
116
|
|
|
120
117
|
return prompt;
|
|
121
118
|
}
|
|
@@ -278,83 +275,14 @@ export function buildFileReviewWithImpactPrompt(fileName, meaningfulChanges, imp
|
|
|
278
275
|
prompt += `\`\`\`\n`;
|
|
279
276
|
});
|
|
280
277
|
|
|
281
|
-
prompt += `\n##
|
|
282
|
-
|
|
283
|
-
**🔥 核心概念(必读):**
|
|
284
|
-
|
|
285
|
-
在 diff 中,如果你看到:
|
|
286
|
-
- 第一行:**"-"** 开头(删除旧值)
|
|
287
|
-
- 第二行:**"+"** 开头(添加新值)
|
|
288
|
-
- 并且是同一个变量名或属性名
|
|
289
|
-
|
|
290
|
-
这是 **"修改/替换"**,NOT "重复定义"!
|
|
291
|
-
|
|
292
|
-
**❌ 常见错误(请务必避免):**
|
|
293
|
-
|
|
294
|
-
**错误 1:对象属性修改**
|
|
295
|
-
看到 diff:
|
|
296
|
-
- deleted: deletedSymbols,
|
|
297
|
-
+ deleted: allDeleted,
|
|
298
|
-
|
|
299
|
-
错误理解:❌ "返回对象中存在重复的 'deleted' 键,违反对象键唯一性"
|
|
300
|
-
正确理解:✅ "将 deleted 属性的值从 deletedSymbols 修改为 allDeleted"
|
|
301
|
-
|
|
302
|
-
解释:
|
|
303
|
-
- 旧版本(-)的 "deleted: deletedSymbols" 已经被删除了,不存在了
|
|
304
|
-
- 新版本(+)的 "deleted: allDeleted" 是现在的版本
|
|
305
|
-
- 最终代码中只有一个 deleted 键,没有重复!
|
|
306
|
-
|
|
307
|
-
**错误 2:变量赋值修改**
|
|
308
|
-
看到 diff:
|
|
309
|
-
- const name = 'old';
|
|
310
|
-
+ const name = 'new';
|
|
278
|
+
prompt += `\n## 审查要求
|
|
311
279
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
+ all: [...addedSymbols, ...allDeleted],
|
|
319
|
-
|
|
320
|
-
错误理解:❌ "all 属性重复定义"
|
|
321
|
-
正确理解:✅ "修改了 all 数组的第二个展开项"
|
|
322
|
-
|
|
323
|
-
**🎯 判断标准:**
|
|
324
|
-
|
|
325
|
-
1. **如何判断是修改而非重复?**
|
|
326
|
-
- 看是否在**相邻的行**
|
|
327
|
-
- 一行是 **"-"**(删除)
|
|
328
|
-
- 下一行是 **"+"**(新增)
|
|
329
|
-
- **同一个变量名/属性名**
|
|
330
|
-
→ 这就是**修改**!
|
|
331
|
-
|
|
332
|
-
2. **如何判断是真正的重复定义?**
|
|
333
|
-
- 两行都是 **"+"**(新增)
|
|
334
|
-
- 没有对应的 **"-"**(删除)
|
|
335
|
-
- 同一个变量名/属性名
|
|
336
|
-
→ 这才是**重复定义**!
|
|
337
|
-
|
|
338
|
-
**🚨 重要提醒:**
|
|
339
|
-
- **"-"** 开头的代码已经**不存在**了,不要把它当作"存在"
|
|
340
|
-
- **"+"** 开头的代码才是**最终保留**的版本
|
|
341
|
-
- 不要说"存在两个XXX",应该说"将XXX从A修改为B"
|
|
342
|
-
|
|
343
|
-
## 审查要求
|
|
344
|
-
|
|
345
|
-
1. **首先确认变更类型**:看清楚是"删除"还是"新增"
|
|
346
|
-
2. **🚨 最高优先级**:检查"类型: 删除"的符号是否仍被使用(文件内部或其他文件)
|
|
347
|
-
3. **特别关注**:
|
|
348
|
-
- **删除的函数/类/组件**是否在其他地方被调用(这会导致错误)
|
|
349
|
-
- 修改的函数签名是否会导致现有调用失效
|
|
350
|
-
- 新增的代码质量是否符合规范
|
|
351
|
-
4. 检查函数签名是否改变,所有调用方式是否需要更新
|
|
352
|
-
5. 检查是否有潜在的 API 不兼容问题
|
|
353
|
-
6. 如果发现文件内部使用了**被删除**的符号,这是**严重错误**
|
|
354
|
-
7. 如果发现其他文件使用了**被删除/修改**的符号,需要提醒可能的影响
|
|
355
|
-
8. **只对有问题的行提出审查意见**,没有问题的行不需要评论
|
|
356
|
-
9. **必须使用中文**返回审查意见
|
|
357
|
-
10. **必须返回标准 JSON 格式**,不要用其他格式,结构如下:
|
|
280
|
+
1. 仔细审查每一行变更,判断是否存在问题
|
|
281
|
+
2. 注意区分**修改**和**重复定义**:如果同一位置有删除(-)和新增(+),这是修改,不是重复
|
|
282
|
+
3. 优先检查"类型: 删除"的代码,确认是否有其他地方仍在使用
|
|
283
|
+
4. **只对有问题的行提出审查意见**,没有问题的行不需要评论
|
|
284
|
+
5. **必须使用中文**返回审查意见
|
|
285
|
+
6. **必须返回标准 JSON 格式**,不要用其他格式,结构如下:
|
|
358
286
|
|
|
359
287
|
\`\`\`json
|
|
360
288
|
{
|
|
@@ -377,22 +305,17 @@ export function buildFileReviewWithImpactPrompt(fileName, meaningfulChanges, imp
|
|
|
377
305
|
- 如果发现其他文件受影响,在当前变更行的 comment 字符串中说明
|
|
378
306
|
|
|
379
307
|
**comment 字段的内容:**
|
|
380
|
-
-
|
|
308
|
+
- **必须严格遵循"项目特定的审查规则"(reviewguard.md)中定义的格式**
|
|
309
|
+
- 如果规则中定义了包含【严重程度评分】、emoji、分点说明等格式,**必须完整使用该格式**
|
|
381
310
|
- comment 是一个字符串,可以包含换行符 \\n 来格式化内容
|
|
382
|
-
-
|
|
311
|
+
- 不要自创格式,必须参考上面"项目特定的审查规则"中的示例
|
|
383
312
|
|
|
384
313
|
**示例:**
|
|
385
|
-
|
|
314
|
+
如果 reviewguard.md 中定义了格式,删除第 15 行的函数时,comment 内容必须是:
|
|
386
315
|
"【严重程度评分:8/10】\\n\\n📋 问题描述:\\n删除了函数 fetchData 但该函数仍被多处使用\\n\\n🔍 影响分析:\\n• 当前文件:函数定义被完全移除\\n• 受影响的其他文件:components/UserList.vue (第 45 行)\\n\\n💡 改进建议:\\n1. 恢复此函数或提供替代方案\\n2. 先标记为 @deprecated"
|
|
387
316
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
**最后再次确认:**
|
|
392
|
-
- 看到 **"类型: 删除"** 和 **"-"** → 代码**被移除了**,需要检查影响
|
|
393
|
-
- 看到 **"类型: 新增"** 和 **"+"** → 代码**是新的**,检查代码质量
|
|
394
|
-
- **千万不要把删除理解成新增!**
|
|
395
|
-
- **返回的必须是标准 JSON,不要在最外层使用特殊字符!**`;
|
|
317
|
+
7. 如果所有代码都没有问题,返回空的 reviews 数组:\`{"reviews": []}\`
|
|
318
|
+
8. **只返回 JSON**,不要在 JSON 外面添加任何文字说明`;
|
|
396
319
|
|
|
397
320
|
return prompt;
|
|
398
321
|
}
|