@wuyanbin/ai-code-review 1.1.4 → 1.1.5
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/dist/reviewer/index.d.ts.map +1 -1
- package/dist/reviewer/index.js +21 -2
- package/dist/reviewer/index.js.map +1 -1
- package/dist/reviewer/utils.d.ts +21 -0
- package/dist/reviewer/utils.d.ts.map +1 -1
- package/dist/reviewer/utils.js +103 -1
- package/dist/reviewer/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reviewer/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reviewer/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAuFxD;;GAEG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,QAAQ,gBAAgB,KACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAkF3B,CAAC"}
|
package/dist/reviewer/index.js
CHANGED
|
@@ -41,10 +41,18 @@ const buildUserPrompt = (diff, rules) => {
|
|
|
41
41
|
" }",
|
|
42
42
|
" ]",
|
|
43
43
|
"}",
|
|
44
|
-
"
|
|
44
|
+
"重要说明:",
|
|
45
45
|
"1. 一定要保证输出是合法的 JSON,不能包含注释或多余文本;",
|
|
46
46
|
'2. 如果没有任何问题,也请返回 {"comments": []};',
|
|
47
|
-
"3.
|
|
47
|
+
"3. **line 字段必须是新文件中的绝对行号**,参考 diff 中 @@ 标记的 +行号;",
|
|
48
|
+
"4. 只对 diff 中以 + 开头的新增行或修改行进行评论;",
|
|
49
|
+
"5. file 字段使用 diff 中 b/ 后面的路径(即新文件路径)。",
|
|
50
|
+
"",
|
|
51
|
+
"Git diff 格式说明:",
|
|
52
|
+
"- diff 中的 @@ -a,b +c,d @@ 表示:新文件从第 c 行开始",
|
|
53
|
+
"- 以 + 开头的行是新增或修改的代码",
|
|
54
|
+
"- 以空格开头的行是上下文(未修改)",
|
|
55
|
+
"- 以 - 开头的行是删除的代码",
|
|
48
56
|
"",
|
|
49
57
|
"项目规范(摘要):",
|
|
50
58
|
rulesBrief,
|
|
@@ -82,6 +90,9 @@ const reviewCode = async (diff, config) => {
|
|
|
82
90
|
console.error("[reviewer] diff 为空,跳过审查");
|
|
83
91
|
return { comments: [] };
|
|
84
92
|
}
|
|
93
|
+
// 解析 diff,提取文件和行号映射
|
|
94
|
+
const diffFiles = (0, utils_1.parseDiffFiles)(effectiveDiff);
|
|
95
|
+
console.error(`[reviewer] 解析到 ${diffFiles.size} 个文件的变更信息`);
|
|
85
96
|
if (!config.ai.apiKey || !config.ai.endpoint) {
|
|
86
97
|
console.error("[reviewer] 缺少 API 配置");
|
|
87
98
|
return null;
|
|
@@ -104,6 +115,14 @@ const reviewCode = async (diff, config) => {
|
|
|
104
115
|
}
|
|
105
116
|
// 应用过滤和限制
|
|
106
117
|
let comments = result.comments || [];
|
|
118
|
+
// **关键步骤:验证并修正行号**
|
|
119
|
+
comments = comments.map((comment) => {
|
|
120
|
+
const correctedLine = (0, utils_1.validateAndFixLineNumber)(comment.file, comment.line, diffFiles);
|
|
121
|
+
return {
|
|
122
|
+
...comment,
|
|
123
|
+
line: correctedLine,
|
|
124
|
+
};
|
|
125
|
+
});
|
|
107
126
|
// 过滤 severity
|
|
108
127
|
if (config.review?.severity) {
|
|
109
128
|
const severityOrder = { info: 0, warning: 1, error: 2 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reviewer/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reviewer/index.ts"],"names":[],"mappings":"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"}
|
package/dist/reviewer/utils.d.ts
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff 文件信息,包含行号映射
|
|
3
|
+
*/
|
|
4
|
+
export interface DiffFileInfo {
|
|
5
|
+
path: string;
|
|
6
|
+
changedLines: Set<number>;
|
|
7
|
+
lineRanges: Array<{
|
|
8
|
+
start: number;
|
|
9
|
+
count: number;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 解析 Git diff,提取文件路径和变更行号
|
|
14
|
+
* 返回每个文件的变更信息
|
|
15
|
+
*/
|
|
16
|
+
export declare const parseDiffFiles: (diff: string) => Map<string, DiffFileInfo>;
|
|
17
|
+
/**
|
|
18
|
+
* 验证并修正评论的行号
|
|
19
|
+
* 如果行号不在变更行集合中,尝试找到最近的变更行
|
|
20
|
+
*/
|
|
21
|
+
export declare const validateAndFixLineNumber: (file: string, line: number, diffFiles: Map<string, DiffFileInfo>) => number;
|
|
1
22
|
/**
|
|
2
23
|
* 简单的 glob -> RegExp 转换,只覆盖当前项目常用模式:
|
|
3
24
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/reviewer/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAwB9C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,SAAS,MAAM,KAAG,OAG7D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,MAAM,EAChB,gBAAgB,MAAM,EAAE,GAAG,SAAS,KACnC,OAGF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,gBAAgB,MAAM,EAAE,GAAG,SAAS,KACnC,MAiEF,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/reviewer/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE1B,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAuErE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,WAAW,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,KACnC,MA2CF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAwB9C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,SAAS,MAAM,KAAG,OAG7D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,MAAM,EAChB,gBAAgB,MAAM,EAAE,GAAG,SAAS,KACnC,OAGF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,gBAAgB,MAAM,EAAE,GAAG,SAAS,KACnC,MAiEF,CAAC"}
|
package/dist/reviewer/utils.js
CHANGED
|
@@ -1,6 +1,108 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.filterDiffByIgnore = exports.shouldIgnoreFile = exports.matchGlob = exports.globToRegExp = void 0;
|
|
3
|
+
exports.filterDiffByIgnore = exports.shouldIgnoreFile = exports.matchGlob = exports.globToRegExp = exports.validateAndFixLineNumber = exports.parseDiffFiles = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 解析 Git diff,提取文件路径和变更行号
|
|
6
|
+
* 返回每个文件的变更信息
|
|
7
|
+
*/
|
|
8
|
+
const parseDiffFiles = (diff) => {
|
|
9
|
+
const files = new Map();
|
|
10
|
+
const lines = diff.split("\n");
|
|
11
|
+
let currentFile = null;
|
|
12
|
+
let currentFileInfo = null;
|
|
13
|
+
for (let i = 0; i < lines.length; i++) {
|
|
14
|
+
const line = lines[i];
|
|
15
|
+
// 检测新文件块:diff --git a/xxx b/xxx
|
|
16
|
+
if (line.startsWith("diff --git ")) {
|
|
17
|
+
const match = /^diff --git a\/(.+?) b\/(.+)$/.exec(line);
|
|
18
|
+
if (match) {
|
|
19
|
+
currentFile = match[2]; // 使用 b/ 路径(新文件路径)
|
|
20
|
+
currentFileInfo = {
|
|
21
|
+
path: currentFile,
|
|
22
|
+
changedLines: new Set(),
|
|
23
|
+
lineRanges: [],
|
|
24
|
+
};
|
|
25
|
+
files.set(currentFile, currentFileInfo);
|
|
26
|
+
}
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
// 解析行号范围标记:@@ -a,b +c,d @@
|
|
30
|
+
// -a,b 表示旧文件从第 a 行开始的 b 行
|
|
31
|
+
// +c,d 表示新文件从第 c 行开始的 d 行
|
|
32
|
+
if (line.startsWith("@@") && currentFileInfo) {
|
|
33
|
+
const match = /@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/.exec(line);
|
|
34
|
+
if (match) {
|
|
35
|
+
const newStart = parseInt(match[1], 10);
|
|
36
|
+
const newCount = match[2] ? parseInt(match[2], 10) : 1;
|
|
37
|
+
currentFileInfo.lineRanges.push({
|
|
38
|
+
start: newStart,
|
|
39
|
+
count: newCount,
|
|
40
|
+
});
|
|
41
|
+
// 记录从 @@ 标记后开始的实际行号
|
|
42
|
+
let lineNumber = newStart;
|
|
43
|
+
// 继续向下解析,直到遇到下一个 @@ 或 diff --git
|
|
44
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
45
|
+
const contentLine = lines[j];
|
|
46
|
+
// 遇到下一个块,停止
|
|
47
|
+
if (contentLine.startsWith("@@") ||
|
|
48
|
+
contentLine.startsWith("diff --git ")) {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
// + 开头的是新增行
|
|
52
|
+
if (contentLine.startsWith("+") && !contentLine.startsWith("+++")) {
|
|
53
|
+
currentFileInfo.changedLines.add(lineNumber);
|
|
54
|
+
lineNumber++;
|
|
55
|
+
}
|
|
56
|
+
// 空格开头的是上下文行(未变更)
|
|
57
|
+
else if (contentLine.startsWith(" ")) {
|
|
58
|
+
lineNumber++;
|
|
59
|
+
}
|
|
60
|
+
// - 开头的是删除行,不增加新文件的行号
|
|
61
|
+
// 其他行(如 \ No newline)也忽略
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return files;
|
|
67
|
+
};
|
|
68
|
+
exports.parseDiffFiles = parseDiffFiles;
|
|
69
|
+
/**
|
|
70
|
+
* 验证并修正评论的行号
|
|
71
|
+
* 如果行号不在变更行集合中,尝试找到最近的变更行
|
|
72
|
+
*/
|
|
73
|
+
const validateAndFixLineNumber = (file, line, diffFiles) => {
|
|
74
|
+
const fileInfo = diffFiles.get(file);
|
|
75
|
+
if (!fileInfo) {
|
|
76
|
+
// 文件不在 diff 中,返回原始行号
|
|
77
|
+
console.warn(`[utils] 文件 ${file} 不在 diff 中,无法验证行号`);
|
|
78
|
+
return line;
|
|
79
|
+
}
|
|
80
|
+
// 如果行号正好在变更行集合中,直接返回
|
|
81
|
+
if (fileInfo.changedLines.has(line)) {
|
|
82
|
+
return line;
|
|
83
|
+
}
|
|
84
|
+
// 行号不在变更集合中,尝试找到最近的变更行
|
|
85
|
+
const changedLinesArray = Array.from(fileInfo.changedLines).sort((a, b) => a - b);
|
|
86
|
+
if (changedLinesArray.length === 0) {
|
|
87
|
+
console.warn(`[utils] 文件 ${file} 没有变更行,返回原始行号 ${line}`);
|
|
88
|
+
return line;
|
|
89
|
+
}
|
|
90
|
+
// 找到最接近的变更行
|
|
91
|
+
let closest = changedLinesArray[0];
|
|
92
|
+
let minDistance = Math.abs(line - closest);
|
|
93
|
+
for (const changedLine of changedLinesArray) {
|
|
94
|
+
const distance = Math.abs(line - changedLine);
|
|
95
|
+
if (distance < minDistance) {
|
|
96
|
+
minDistance = distance;
|
|
97
|
+
closest = changedLine;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (closest !== line) {
|
|
101
|
+
console.warn(`[utils] 行号修正: ${file}:${line} -> ${closest} (偏差 ${minDistance} 行)`);
|
|
102
|
+
}
|
|
103
|
+
return closest;
|
|
104
|
+
};
|
|
105
|
+
exports.validateAndFixLineNumber = validateAndFixLineNumber;
|
|
4
106
|
/**
|
|
5
107
|
* 简单的 glob -> RegExp 转换,只覆盖当前项目常用模式:
|
|
6
108
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/reviewer/utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/reviewer/utils.ts"],"names":[],"mappings":"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"}
|