gitlab-ai-review 3.9.1 → 4.0.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/index.js CHANGED
@@ -464,19 +464,42 @@ export class GitLabAIReview {
464
464
  for (const review of mergedReviews) {
465
465
  if (review.hasIssue) {
466
466
  try {
467
- // 构建评论位置参数
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 的范围
468
475
  const positionParams = {
469
476
  filePath: fileName,
470
477
  oldPath: change.old_path,
471
478
  };
472
479
 
473
- // 如果是修改块(同时有 oldLine 和 newLine),同时指定两个行号
474
- if (review.oldLine && review.newLine) {
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
+ // 修改块:同时指定两个行号
475
499
  positionParams.oldLine = review.oldLine;
476
500
  positionParams.newLine = review.newLine;
477
501
  } else if (review.lineNumber) {
478
- // 单独的删除或新增
479
- const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
502
+ // 单独的删除或新增(fallback)
480
503
  const isDeletion = relatedChange && relatedChange.type === 'deletion';
481
504
  if (isDeletion) {
482
505
  positionParams.oldLine = review.lineNumber;
@@ -128,6 +128,12 @@ export function extractMeaningfulChanges(hunks) {
128
128
  content: change.content,
129
129
  lineNumber: currentNewLine,
130
130
  hunk: hunk.header,
131
+ hunkRange: { // 添加 hunk 的范围信息
132
+ oldStart: hunk.oldStart,
133
+ oldEnd: hunk.oldStart + hunk.oldLines - 1,
134
+ newStart: hunk.newStart,
135
+ newEnd: hunk.newStart + hunk.newLines - 1,
136
+ },
131
137
  context: {
132
138
  before: hunk.changes.slice(Math.max(0, index - 2), index).map(c => c.content),
133
139
  after: hunk.changes.slice(index + 1, index + 3).map(c => c.content),
@@ -144,6 +150,12 @@ export function extractMeaningfulChanges(hunks) {
144
150
  content: change.content,
145
151
  lineNumber: currentOldLine, // 使用旧文件的行号
146
152
  hunk: hunk.header,
153
+ hunkRange: { // 添加 hunk 的范围信息
154
+ oldStart: hunk.oldStart,
155
+ oldEnd: hunk.oldStart + hunk.oldLines - 1,
156
+ newStart: hunk.newStart,
157
+ newEnd: hunk.newStart + hunk.newLines - 1,
158
+ },
147
159
  context: {
148
160
  before: hunk.changes.slice(Math.max(0, index - 2), index).map(c => c.content),
149
161
  after: hunk.changes.slice(index + 1, index + 3).map(c => c.content),
@@ -92,13 +92,18 @@ 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
+ }
102
107
 
103
108
  return this.request(
104
109
  `/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": "3.9.1",
3
+ "version": "4.0.0",
4
4
  "description": "GitLab AI Review SDK with Impact Analysis - 支持影响分析、删除符号检测、注释代码识别、文件内部冲突检查、智能文件过滤的智能代码审查工具",
5
5
  "main": "index.js",
6
6
  "type": "module",