feat(门禁): 位号类型识别机制落地(暂不纳入硬件语料)

- check_ids.py 的 add() 加一道类型判定:硬件类语料(docs/硬件平台/、docs/芯片手册/)里
  匹配「单个大写字母 + 1~3 位数字、无连字符」的字面量判为**位号**(R 电阻 / C 电容 /
  D 二极管 / J 接插件 / X 晶振 / U 芯片 / T 变压器),直接不产生编号结论,并计数到
  stats[designator_skipped],不是静默放过
- 两处刻意收窄:字母集**不含 B**(V0.0 网表报告里的 B1 是真专项条目);要求 fullmatch
  无连字符,所以 D-7 / N-18 / TC-206 / TC1003 这些真编号与违规形态一律照旧判
- 注册表新增 designator_rule 说明口径;**本批不解除 excluded_paths 里的硬件目录排除**:
  粗测该目录约 4200 处位号,会灌进可判定比例的分母 refs_total,把真实变化盖掉——
  解除排除必须先把位号从分母里减掉,那是下一件事
- 因此本批对现有数字零影响:错误级仍 626、可判定比例不变、--strict 通过
This commit is contained in:
2026-10-22 06:38:29 +08:00
parent ee25b10053
commit 11c82c0d99
2 changed files with 14 additions and 1 deletions
+12
View File
@@ -349,6 +349,18 @@ class Checker(object):
# ---------- 单项校验 ----------
def add(self, code, severity, rel, lineno, literal, msg, hint=""):
# 位号类型识别(批 8 第一步:先落地机制,**暂不解除 docs/硬件平台/ 的语料排除**,
# 因此本规则今天对现有数字零影响)。硬件类文档里「单个大写字母 + 1~3 位数字」
# 是 R/C/D/J/X/U/T 位号(电阻、电容、接插件、芯片、晶振、变压器),不是实体编号。
# 刻意不含 B(V0.0 网表报告里的 B1 是真专项条目),且 fullmatch 要求无连字符,
# 所以 D-7 / N-18 / TC-206 / TC1003 这类真编号或违规形态都不受影响。
_rx = getattr(type(self), "_desig_rx", None)
if _rx is None:
_rx = type(self)._desig_rx = re.compile(r"[RCDJXUT][0-9]{1,3}")
type(self)._desig_paths = ("docs/硬件平台/", "docs/芯片手册/")
if rel.startswith(type(self)._desig_paths) and _rx.fullmatch((literal or "").strip()):
self.stats["designator_skipped"] = self.stats.get("designator_skipped", 0) + 1
return
self.findings.append(Finding(code, severity, rel, lineno, literal, msg, hint))
self.stats["hit_%d" % code] += 1
if code == 2:
+2 -1
View File
@@ -1612,5 +1612,6 @@
},
"owner_docs_exclude": [
"docs/测试说明/测试文档模板规范.md"
]
],
"designator_rule": "硬件语料位号识别:docs/硬件平台/ 与 docs/芯片手册/ 里匹配 ^[RCDJXUT][0-9]{1,3}$(无连字符)的字面量判为**位号**,不产生任何编号结论;不含 B(V0.0 网表报告的 B1 是真专项条目),带连字符的 D-7/N-18/TC-206 不受影响。机制在 check_ids.py 的 add() 里落地(统计键 designator_skipped)。**本目录仍未纳入扫描语料**:纳入前必须先把位号从可判定比例的 refs_total 里减掉,否则约 4200 处位号会把比例分母灌水、掩盖真实变化。"
}