gitlab-ai-review 4.0.0 → 4.0.2
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/index.js +31 -34
- package/lib/gitlab-client.js +1 -6
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -205,19 +205,39 @@ export class GitLabAIReview {
|
|
|
205
205
|
// 调用 AI 一次性审查整个文件的所有变更(按文件批量)
|
|
206
206
|
const fileReview = await this.reviewFileChanges(change, meaningfulChanges);
|
|
207
207
|
|
|
208
|
+
// 智能合并修改块的评论
|
|
209
|
+
const mergedReviews = this.mergeModificationReviews(fileReview.reviews, meaningfulChanges);
|
|
210
|
+
|
|
208
211
|
// 根据 AI 返回的结果,只对有问题的行添加评论
|
|
209
|
-
for (const review of
|
|
212
|
+
for (const review of mergedReviews) {
|
|
210
213
|
if (review.hasIssue) {
|
|
211
214
|
try {
|
|
215
|
+
// 构建评论位置参数
|
|
216
|
+
const positionParams = {
|
|
217
|
+
filePath: fileName,
|
|
218
|
+
oldPath: change.old_path,
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// 如果是修改块(同时有 oldLine 和 newLine),同时指定两个行号
|
|
222
|
+
if (review.oldLine && review.newLine) {
|
|
223
|
+
positionParams.oldLine = review.oldLine;
|
|
224
|
+
positionParams.newLine = review.newLine;
|
|
225
|
+
} else if (review.lineNumber) {
|
|
226
|
+
// 单独的删除或新增
|
|
227
|
+
const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
|
|
228
|
+
const isDeletion = relatedChange && relatedChange.type === 'deletion';
|
|
229
|
+
if (isDeletion) {
|
|
230
|
+
positionParams.oldLine = review.lineNumber;
|
|
231
|
+
} else {
|
|
232
|
+
positionParams.newLine = review.lineNumber;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
212
236
|
const commentResult = await this.gitlabClient.createLineComment(
|
|
213
237
|
this.config.project.projectId,
|
|
214
238
|
this.config.project.mergeRequestIid,
|
|
215
239
|
`🤖 **AI 代码审查**\n\n${review.comment}`,
|
|
216
|
-
|
|
217
|
-
filePath: fileName,
|
|
218
|
-
oldPath: change.old_path,
|
|
219
|
-
newLine: review.lineNumber,
|
|
220
|
-
}
|
|
240
|
+
positionParams
|
|
221
241
|
);
|
|
222
242
|
|
|
223
243
|
results.push({
|
|
@@ -464,42 +484,19 @@ export class GitLabAIReview {
|
|
|
464
484
|
for (const review of mergedReviews) {
|
|
465
485
|
if (review.hasIssue) {
|
|
466
486
|
try {
|
|
467
|
-
//
|
|
468
|
-
const relatedChange = meaningfulChanges.find(c =>
|
|
469
|
-
c.lineNumber === review.lineNumber ||
|
|
470
|
-
c.lineNumber === review.oldLine ||
|
|
471
|
-
c.lineNumber === review.newLine
|
|
472
|
-
);
|
|
473
|
-
|
|
474
|
-
// 构建评论位置参数,包含整个 hunk 的范围
|
|
487
|
+
// 构建评论位置参数
|
|
475
488
|
const positionParams = {
|
|
476
489
|
filePath: fileName,
|
|
477
490
|
oldPath: change.old_path,
|
|
478
491
|
};
|
|
479
492
|
|
|
480
|
-
//
|
|
481
|
-
if (
|
|
482
|
-
positionParams.oldLine = relatedChange.hunkRange.oldStart;
|
|
483
|
-
positionParams.newLine = relatedChange.hunkRange.newStart;
|
|
484
|
-
// 添加范围信息(GitLab 支持 line_range)
|
|
485
|
-
positionParams.lineRange = {
|
|
486
|
-
start: {
|
|
487
|
-
line_code: `${relatedChange.hunkRange.oldStart}_${relatedChange.hunkRange.oldStart}`,
|
|
488
|
-
type: 'old',
|
|
489
|
-
old_line: relatedChange.hunkRange.oldStart,
|
|
490
|
-
},
|
|
491
|
-
end: {
|
|
492
|
-
line_code: `${relatedChange.hunkRange.newEnd}_${relatedChange.hunkRange.newEnd}`,
|
|
493
|
-
type: 'new',
|
|
494
|
-
new_line: relatedChange.hunkRange.newEnd,
|
|
495
|
-
},
|
|
496
|
-
};
|
|
497
|
-
} else if (review.oldLine && review.newLine) {
|
|
498
|
-
// 修改块:同时指定两个行号
|
|
493
|
+
// 如果是修改块(同时有 oldLine 和 newLine),同时指定两个行号
|
|
494
|
+
if (review.oldLine && review.newLine) {
|
|
499
495
|
positionParams.oldLine = review.oldLine;
|
|
500
496
|
positionParams.newLine = review.newLine;
|
|
501
497
|
} else if (review.lineNumber) {
|
|
502
|
-
//
|
|
498
|
+
// 单独的删除或新增
|
|
499
|
+
const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
|
|
503
500
|
const isDeletion = relatedChange && relatedChange.type === 'deletion';
|
|
504
501
|
if (isDeletion) {
|
|
505
502
|
positionParams.oldLine = review.lineNumber;
|
package/lib/gitlab-client.js
CHANGED
|
@@ -92,18 +92,13 @@ export class GitLabClient {
|
|
|
92
92
|
old_path: lineInfo.oldPath || lineInfo.filePath,
|
|
93
93
|
};
|
|
94
94
|
|
|
95
|
-
//
|
|
95
|
+
// 设置行号(只能设置其中一个,或者两个都设置表示修改块)
|
|
96
96
|
if (lineInfo.newLine !== undefined) {
|
|
97
97
|
position.new_line = lineInfo.newLine;
|
|
98
98
|
}
|
|
99
99
|
if (lineInfo.oldLine !== undefined) {
|
|
100
100
|
position.old_line = lineInfo.oldLine;
|
|
101
101
|
}
|
|
102
|
-
|
|
103
|
-
// 如果提供了范围信息,使用范围评论
|
|
104
|
-
if (lineInfo.lineRange) {
|
|
105
|
-
position.line_range = lineInfo.lineRange;
|
|
106
|
-
}
|
|
107
102
|
|
|
108
103
|
return this.request(
|
|
109
104
|
`/projects/${encodeURIComponent(projectId)}/merge_requests/${mergeRequestIid}/discussions`,
|