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.
Files changed (2) hide show
  1. package/index.js +63 -21
  2. 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.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`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitlab-ai-review",
3
- "version": "4.1.1",
3
+ "version": "4.1.2",
4
4
  "description": "GitLab AI Review SDK with Impact Analysis - 支持影响分析、删除符号检测、注释代码识别、文件内部冲突检查、智能文件过滤的智能代码审查工具",
5
5
  "main": "index.js",
6
6
  "type": "module",