Skip to content

Commit 1eef2fe

Browse files
committed
fix: 注意一种特殊情况,如果某行既是 insert 且又是 delete,且 content 内容还是一模一样,则忽略该情况
1 parent 948abe9 commit 1eef2fe

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

src/concat/increaseConcat.ts

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ export interface IncreaseConcatOpts {
1414
hash?: string;
1515
}
1616

17+
interface LineNumberCheckItem {
18+
delete?: string,
19+
insert?: string,
20+
normal?: string,
21+
}
22+
1723
export class IncreaseConcat implements Concat {
1824
// 配置
1925
private opts: IncreaseConcatOpts = {};
@@ -101,17 +107,47 @@ export class IncreaseConcat implements Concat {
101107
};
102108

103109
// 统计变换了的行号
104-
const diffLineArr: Array<number> = [];
110+
const diffInsertLineArr: Array<number> = [];
111+
const lineNumberCheckMap: { [key: number]: LineNumberCheckItem } = {};
112+
105113
diffItem.hunks.forEach((hunk) => {
106114
hunk.changes.forEach((change) => {
115+
if (!change.lineNumber) {
116+
return;
117+
}
118+
119+
// 以行号为key,缓存下该行号 insert 或 delete 时的内容
120+
const lineNumberCheckItem: LineNumberCheckItem = lineNumberCheckMap[change.lineNumber] || {};
121+
lineNumberCheckItem[change.type] = change.content;
122+
lineNumberCheckMap[change.lineNumber] = lineNumberCheckItem;
123+
107124
// 只需要判断 insert 类型且有行号的的结果即可,
108125
// 毕竟计算增量的目的是为了看存在,所以 delete 类型的不需要计算
109-
if ((change.type === 'insert') && change.lineNumber) {
110-
diffLineArr.push(change.lineNumber);
126+
if ((change.type === 'insert')) {
127+
diffInsertLineArr.push(change.lineNumber);
111128
}
112129
});
113130
});
114131

132+
// 注意一种特殊情况,如果某行既是 insert 且又是 delete,且 content 内容还是一模一样,则忽略该情况
133+
// 公司内的增量覆盖率算法为上述处理策略,因此此处做统一,
134+
// 虽然个人觉得不太合理,感觉只要是 delete 和 insert 应该都算增量变化,但需进一步研究
135+
// 统计变换了的行号
136+
const diffLineArr: Array<number> = [];
137+
diffInsertLineArr.forEach((lineNumber) => {
138+
const lineNumberCheckItem: LineNumberCheckItem = lineNumberCheckMap[lineNumber];
139+
140+
if (!lineNumberCheckItem) {
141+
return;
142+
}
143+
144+
if (lineNumberCheckItem.insert && lineNumberCheckItem.delete && (lineNumberCheckItem.insert === lineNumberCheckItem.delete)) {
145+
return;
146+
}
147+
148+
diffLineArr.push(lineNumber);
149+
});
150+
115151
// 统计每行对应的hit数
116152
const lcovLineHit: Record<string, number> = {};
117153

0 commit comments

Comments
 (0)