gitlab-ai-review 4.1.1 → 4.1.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 +63 -21
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -16,7 +16,7 @@ import * as ImpactAnalyzer from './lib/impact-analyzer.js';
|
|
|
16
16
|
export class GitLabAIReview {
|
|
17
17
|
constructor(options = {}) {
|
|
18
18
|
this.name = 'GitLab AI Review SDK';
|
|
19
|
-
this.version = '4.1.
|
|
19
|
+
this.version = '4.1.2';
|
|
20
20
|
|
|
21
21
|
// 如果传入了配置,使用手动配置;否则使用自动检测
|
|
22
22
|
if (options.token || options.gitlab) {
|
|
@@ -236,20 +236,47 @@ export class GitLabAIReview {
|
|
|
236
236
|
for (const review of mergedReviews) {
|
|
237
237
|
if (review.hasIssue) {
|
|
238
238
|
try {
|
|
239
|
-
//
|
|
239
|
+
// 找到这个评论对应的变更和它所在的 hunk
|
|
240
|
+
let targetChange = null;
|
|
241
|
+
if (review.oldLine && review.newLine) {
|
|
242
|
+
// 修改块:找删除或新增的任意一个
|
|
243
|
+
targetChange = meaningfulChanges.find(c =>
|
|
244
|
+
(c.lineNumber === review.oldLine && c.type === 'deletion') ||
|
|
245
|
+
(c.lineNumber === review.newLine && c.type === 'addition')
|
|
246
|
+
);
|
|
247
|
+
} else if (review.lineNumber) {
|
|
248
|
+
targetChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// 构建评论位置参数 - 使用 hunk 的起始位置覆盖整个变更块
|
|
240
252
|
const positionParams = {
|
|
241
253
|
filePath: fileName,
|
|
242
254
|
oldPath: change.old_path,
|
|
243
255
|
};
|
|
244
256
|
|
|
257
|
+
if (targetChange && targetChange.hunkRange) {
|
|
258
|
+
// 使用 hunk 的起始行号,让评论覆盖整个 hunk 范围
|
|
259
|
+
positionParams.oldLine = targetChange.hunkRange.oldStart;
|
|
260
|
+
positionParams.newLine = targetChange.hunkRange.newStart;
|
|
261
|
+
} else if (review.oldLine && review.newLine) {
|
|
262
|
+
// 如果找不到 hunk 信息,回退到原来的逻辑
|
|
263
|
+
positionParams.oldLine = review.oldLine;
|
|
264
|
+
positionParams.newLine = review.newLine;
|
|
265
|
+
} else if (review.lineNumber) {
|
|
266
|
+
const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
|
|
267
|
+
const isDeletion = relatedChange && relatedChange.type === 'deletion';
|
|
268
|
+
if (isDeletion) {
|
|
269
|
+
positionParams.oldLine = review.lineNumber;
|
|
270
|
+
} else {
|
|
271
|
+
positionParams.newLine = review.lineNumber;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
245
275
|
// 构建评论内容,包含完整的修改块上下文
|
|
246
276
|
let commentBody = '🤖 **AI 代码审查**\n\n';
|
|
247
277
|
|
|
248
278
|
// 如果是修改块(同时有 oldLine 和 newLine),显示完整的删除和新增
|
|
249
279
|
if (review.oldLine && review.newLine) {
|
|
250
|
-
positionParams.oldLine = review.oldLine;
|
|
251
|
-
positionParams.newLine = review.newLine;
|
|
252
|
-
|
|
253
280
|
// 添加修改块的上下文
|
|
254
281
|
const oldChange = meaningfulChanges.find(c => c.lineNumber === review.oldLine && c.type === 'deletion');
|
|
255
282
|
const newChange = meaningfulChanges.find(c => c.lineNumber === review.newLine && c.type === 'addition');
|
|
@@ -269,12 +296,6 @@ export class GitLabAIReview {
|
|
|
269
296
|
const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
|
|
270
297
|
const isDeletion = relatedChange && relatedChange.type === 'deletion';
|
|
271
298
|
|
|
272
|
-
if (isDeletion) {
|
|
273
|
-
positionParams.oldLine = review.lineNumber;
|
|
274
|
-
} else {
|
|
275
|
-
positionParams.newLine = review.lineNumber;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
299
|
// 添加单个变更的上下文
|
|
279
300
|
if (relatedChange) {
|
|
280
301
|
commentBody += `**📝 ${isDeletion ? '删除' : '新增'}内容:**\n\`\`\`${isDeletion ? 'diff' : 'javascript'}\n`;
|
|
@@ -549,20 +570,47 @@ export class GitLabAIReview {
|
|
|
549
570
|
for (const review of mergedReviews) {
|
|
550
571
|
if (review.hasIssue) {
|
|
551
572
|
try {
|
|
552
|
-
//
|
|
573
|
+
// 找到这个评论对应的变更和它所在的 hunk
|
|
574
|
+
let targetChange = null;
|
|
575
|
+
if (review.oldLine && review.newLine) {
|
|
576
|
+
// 修改块:找删除或新增的任意一个
|
|
577
|
+
targetChange = meaningfulChanges.find(c =>
|
|
578
|
+
(c.lineNumber === review.oldLine && c.type === 'deletion') ||
|
|
579
|
+
(c.lineNumber === review.newLine && c.type === 'addition')
|
|
580
|
+
);
|
|
581
|
+
} else if (review.lineNumber) {
|
|
582
|
+
targetChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
// 构建评论位置参数 - 使用 hunk 的起始位置覆盖整个变更块
|
|
553
586
|
const positionParams = {
|
|
554
587
|
filePath: fileName,
|
|
555
588
|
oldPath: change.old_path,
|
|
556
589
|
};
|
|
557
590
|
|
|
591
|
+
if (targetChange && targetChange.hunkRange) {
|
|
592
|
+
// 使用 hunk 的起始行号,让评论覆盖整个 hunk 范围
|
|
593
|
+
positionParams.oldLine = targetChange.hunkRange.oldStart;
|
|
594
|
+
positionParams.newLine = targetChange.hunkRange.newStart;
|
|
595
|
+
} else if (review.oldLine && review.newLine) {
|
|
596
|
+
// 如果找不到 hunk 信息,回退到原来的逻辑
|
|
597
|
+
positionParams.oldLine = review.oldLine;
|
|
598
|
+
positionParams.newLine = review.newLine;
|
|
599
|
+
} else if (review.lineNumber) {
|
|
600
|
+
const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
|
|
601
|
+
const isDeletion = relatedChange && relatedChange.type === 'deletion';
|
|
602
|
+
if (isDeletion) {
|
|
603
|
+
positionParams.oldLine = review.lineNumber;
|
|
604
|
+
} else {
|
|
605
|
+
positionParams.newLine = review.lineNumber;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
558
609
|
// 构建评论内容,包含完整的修改块上下文
|
|
559
610
|
let commentBody = '🤖 **AI 代码审查**\n\n';
|
|
560
611
|
|
|
561
612
|
// 如果是修改块(同时有 oldLine 和 newLine),显示完整的删除和新增
|
|
562
613
|
if (review.oldLine && review.newLine) {
|
|
563
|
-
positionParams.oldLine = review.oldLine;
|
|
564
|
-
positionParams.newLine = review.newLine;
|
|
565
|
-
|
|
566
614
|
// 添加修改块的上下文
|
|
567
615
|
const oldChange = meaningfulChanges.find(c => c.lineNumber === review.oldLine && c.type === 'deletion');
|
|
568
616
|
const newChange = meaningfulChanges.find(c => c.lineNumber === review.newLine && c.type === 'addition');
|
|
@@ -582,12 +630,6 @@ export class GitLabAIReview {
|
|
|
582
630
|
const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
|
|
583
631
|
const isDeletion = relatedChange && relatedChange.type === 'deletion';
|
|
584
632
|
|
|
585
|
-
if (isDeletion) {
|
|
586
|
-
positionParams.oldLine = review.lineNumber;
|
|
587
|
-
} else {
|
|
588
|
-
positionParams.newLine = review.lineNumber;
|
|
589
|
-
}
|
|
590
|
-
|
|
591
633
|
// 添加单个变更的上下文
|
|
592
634
|
if (relatedChange) {
|
|
593
635
|
commentBody += `**📝 ${isDeletion ? '删除' : '新增'}内容:**\n\`\`\`${isDeletion ? 'diff' : 'javascript'}\n`;
|