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 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 fileReview.reviews) {
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
- // 找到对应的变更,获取 hunk 范围
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
- // 使用 hunk 的完整范围而不是单行
481
- if (relatedChange && relatedChange.hunkRange) {
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
- // 单独的删除或新增(fallback)
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;
@@ -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`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitlab-ai-review",
3
- "version": "4.0.0",
3
+ "version": "4.0.2",
4
4
  "description": "GitLab AI Review SDK with Impact Analysis - 支持影响分析、删除符号检测、注释代码识别、文件内部冲突检查、智能文件过滤的智能代码审查工具",
5
5
  "main": "index.js",
6
6
  "type": "module",