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 +28 -5
- package/lib/diff-parser.js +12 -0
- package/lib/gitlab-client.js +6 -1
- package/package.json +1 -1
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
|
-
//
|
|
474
|
-
if (
|
|
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;
|
package/lib/diff-parser.js
CHANGED
|
@@ -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),
|
package/lib/gitlab-client.js
CHANGED
|
@@ -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`,
|