iter(g59): verify 检测 README 组件清单重复项

This commit is contained in:
HIsheR
2026-10-26 12:24:10 +08:00
parent a0db91657c
commit 9ef1b41954
2 changed files with 10 additions and 3 deletions
+9 -2
View File
@@ -720,7 +720,10 @@ function checkReadme(pkgs) {
issues.push('README.md 缺少组件区块标记(<!-- ua:components --> … <!-- /ua:components -->)');
return issues;
}
const listed = new Set(block[1].split('·').map((s) => s.trim()).filter(Boolean));
const blockIds = block[1].split('·').map((s) => s.trim()).filter(Boolean); // 保留原始顺序,供重复检测
const listed = new Set(blockIds);
const dupInBlock = blockIds.filter((id, i) => blockIds.indexOf(id) !== i); // 同一 id 出现多次:文档漂移
for (const id of new Set(dupInBlock)) issues.push(`README.md 组件区块重复列出 ${id}`);
const actual = new Set(pkgs.flatMap((p) => (p.docs?.components ?? []).map((c) => c.id)));
for (const id of actual) if (!listed.has(id)) issues.push(`README.md 组件区块缺少 ${id}`);
for (const id of listed) if (!actual.has(id)) issues.push(`README.md 组件区块多出 ${id}(清单里没有)`);
@@ -732,7 +735,11 @@ function checkReadme(pkgs) {
}
const grouped = new Set(groupLine.match(/[a-zA-Z][A-Za-z0-9]*/g) ?? []);
const alias = new Set(['formItem']); // formItem 与 form 共用一条文档,分组行里会单独出现
for (const id of actual) if (!grouped.has(id)) issues.push(`README.md 分组行缺少 ${id}`);
for (const id of actual) {
const hits = groupLine.match(new RegExp(`(?<![A-Za-z0-9])${id}(?![A-Za-z0-9])`, 'g')) ?? []; // 整词计数,避开 formItem 命中 form
if (!hits.length) issues.push(`README.md 分组行缺少 ${id}`);
else if (hits.length > 1) issues.push(`README.md 分组行重复列出 ${id}(${hits.length} 次)`);
}
for (const id of grouped) if (!actual.has(id) && !alias.has(id)) issues.push(`README.md 分组行多出 ${id}(清单里没有)`);
return issues;
}