gitlab-ai-review 4.1.0 → 4.1.1

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 +78 -11
  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.0';
19
+ this.version = '4.1.1';
20
20
 
21
21
  // 如果传入了配置,使用手动配置;否则使用自动检测
22
22
  if (options.token || options.gitlab) {
@@ -242,48 +242,86 @@ export class GitLabAIReview {
242
242
  oldPath: change.old_path,
243
243
  };
244
244
 
245
- // 如果是修改块(同时有 oldLine 和 newLine),同时指定两个行号
245
+ // 构建评论内容,包含完整的修改块上下文
246
+ let commentBody = '🤖 **AI 代码审查**\n\n';
247
+
248
+ // 如果是修改块(同时有 oldLine 和 newLine),显示完整的删除和新增
246
249
  if (review.oldLine && review.newLine) {
247
250
  positionParams.oldLine = review.oldLine;
248
251
  positionParams.newLine = review.newLine;
252
+
253
+ // 添加修改块的上下文
254
+ const oldChange = meaningfulChanges.find(c => c.lineNumber === review.oldLine && c.type === 'deletion');
255
+ const newChange = meaningfulChanges.find(c => c.lineNumber === review.newLine && c.type === 'addition');
256
+
257
+ if (oldChange || newChange) {
258
+ commentBody += '**📝 修改内容:**\n```diff\n';
259
+ if (oldChange) {
260
+ commentBody += `- ${oldChange.content}\n`;
261
+ }
262
+ if (newChange) {
263
+ commentBody += `+ ${newChange.content}\n`;
264
+ }
265
+ commentBody += '```\n\n';
266
+ }
249
267
  } else if (review.lineNumber) {
250
268
  // 单独的删除或新增
251
269
  const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
252
270
  const isDeletion = relatedChange && relatedChange.type === 'deletion';
271
+
253
272
  if (isDeletion) {
254
273
  positionParams.oldLine = review.lineNumber;
255
274
  } else {
256
275
  positionParams.newLine = review.lineNumber;
257
276
  }
277
+
278
+ // 添加单个变更的上下文
279
+ if (relatedChange) {
280
+ commentBody += `**📝 ${isDeletion ? '删除' : '新增'}内容:**\n\`\`\`${isDeletion ? 'diff' : 'javascript'}\n`;
281
+ commentBody += `${isDeletion ? '-' : '+'} ${relatedChange.content}\n`;
282
+ commentBody += '```\n\n';
283
+ }
258
284
  }
259
285
 
286
+ // 添加 AI 审查意见
287
+ commentBody += review.comment;
288
+
260
289
  const commentResult = await this.gitlabClient.createLineComment(
261
290
  this.config.project.projectId,
262
291
  this.config.project.mergeRequestIid,
263
- `🤖 **AI 代码审查**\n\n${review.comment}`,
292
+ commentBody,
264
293
  positionParams
265
294
  );
266
295
 
267
296
  results.push({
268
297
  status: 'success',
269
298
  fileName,
270
- lineNumber: review.lineNumber,
299
+ lineNumber: review.lineNumber || review.oldLine,
271
300
  comment: review.comment,
272
301
  commentResult,
273
302
  });
274
303
 
275
- console.log(` ✓ ${review.lineNumber} 行:已添加评论`);
304
+ const lineDesc = review.oldLine && review.newLine
305
+ ? `第 ${review.oldLine}-${review.newLine} 行(修改块)`
306
+ : `第 ${review.lineNumber} 行`;
307
+ console.log(` ✓ ${lineDesc}:已添加评论`);
276
308
  } catch (error) {
277
309
  results.push({
278
310
  status: 'error',
279
311
  fileName,
280
- lineNumber: review.lineNumber,
312
+ lineNumber: review.lineNumber || review.oldLine,
281
313
  error: error.message,
282
314
  });
283
- console.log(` ✗ ${review.lineNumber} 行:评论失败 - ${error.message}`);
315
+ const lineDesc = review.oldLine && review.newLine
316
+ ? `第 ${review.oldLine}-${review.newLine} 行`
317
+ : `第 ${review.lineNumber} 行`;
318
+ console.log(` ✗ ${lineDesc}:评论失败 - ${error.message}`);
284
319
  }
285
320
  } else {
286
- console.log(` ✓ ${review.lineNumber} 行:代码质量良好`);
321
+ const lineDesc = review.oldLine && review.newLine
322
+ ? `第 ${review.oldLine}-${review.newLine} 行`
323
+ : `第 ${review.lineNumber} 行`;
324
+ console.log(` ✓ ${lineDesc}:代码质量良好`);
287
325
  }
288
326
  }
289
327
 
@@ -517,25 +555,54 @@ export class GitLabAIReview {
517
555
  oldPath: change.old_path,
518
556
  };
519
557
 
520
- // 如果是修改块(同时有 oldLine 和 newLine),同时指定两个行号
558
+ // 构建评论内容,包含完整的修改块上下文
559
+ let commentBody = '🤖 **AI 代码审查**\n\n';
560
+
561
+ // 如果是修改块(同时有 oldLine 和 newLine),显示完整的删除和新增
521
562
  if (review.oldLine && review.newLine) {
522
563
  positionParams.oldLine = review.oldLine;
523
564
  positionParams.newLine = review.newLine;
565
+
566
+ // 添加修改块的上下文
567
+ const oldChange = meaningfulChanges.find(c => c.lineNumber === review.oldLine && c.type === 'deletion');
568
+ const newChange = meaningfulChanges.find(c => c.lineNumber === review.newLine && c.type === 'addition');
569
+
570
+ if (oldChange || newChange) {
571
+ commentBody += '**📝 修改内容:**\n```diff\n';
572
+ if (oldChange) {
573
+ commentBody += `- ${oldChange.content}\n`;
574
+ }
575
+ if (newChange) {
576
+ commentBody += `+ ${newChange.content}\n`;
577
+ }
578
+ commentBody += '```\n\n';
579
+ }
524
580
  } else if (review.lineNumber) {
525
581
  // 单独的删除或新增
526
582
  const relatedChange = meaningfulChanges.find(c => c.lineNumber === review.lineNumber);
527
583
  const isDeletion = relatedChange && relatedChange.type === 'deletion';
584
+
528
585
  if (isDeletion) {
529
586
  positionParams.oldLine = review.lineNumber;
530
587
  } else {
531
588
  positionParams.newLine = review.lineNumber;
532
589
  }
590
+
591
+ // 添加单个变更的上下文
592
+ if (relatedChange) {
593
+ commentBody += `**📝 ${isDeletion ? '删除' : '新增'}内容:**\n\`\`\`${isDeletion ? 'diff' : 'javascript'}\n`;
594
+ commentBody += `${isDeletion ? '-' : '+'} ${relatedChange.content}\n`;
595
+ commentBody += '```\n\n';
596
+ }
533
597
  }
534
598
 
599
+ // 添加 AI 审查意见
600
+ commentBody += review.comment;
601
+
535
602
  const commentResult = await this.gitlabClient.createLineComment(
536
603
  this.config.project.projectId,
537
604
  this.config.project.mergeRequestIid,
538
- `🤖 **AI 代码审查**\n\n${review.comment}`,
605
+ commentBody,
539
606
  positionParams
540
607
  );
541
608
 
@@ -548,7 +615,7 @@ export class GitLabAIReview {
548
615
  });
549
616
 
550
617
  const lineDesc = review.oldLine && review.newLine
551
- ? `第 ${review.oldLine}-${review.newLine} 行`
618
+ ? `第 ${review.oldLine}-${review.newLine} 行(修改块)`
552
619
  : `第 ${review.lineNumber} 行`;
553
620
  console.log(` ✓ ${lineDesc}:已添加评论`);
554
621
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitlab-ai-review",
3
- "version": "4.1.0",
3
+ "version": "4.1.1",
4
4
  "description": "GitLab AI Review SDK with Impact Analysis - 支持影响分析、删除符号检测、注释代码识别、文件内部冲突检查、智能文件过滤的智能代码审查工具",
5
5
  "main": "index.js",
6
6
  "type": "module",