From 11c82c0d9999cc05e801a0f90f2bb8de51b8e3ec Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Thu, 22 Oct 2026 06:38:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=97=A8=E7=A6=81):=20=E4=BD=8D=E5=8F=B7?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=AF=86=E5=88=AB=E6=9C=BA=E5=88=B6=E8=90=BD?= =?UTF-8?q?=E5=9C=B0=EF=BC=88=E6=9A=82=E4=B8=8D=E7=BA=B3=E5=85=A5=E7=A1=AC?= =?UTF-8?q?=E4=BB=B6=E8=AF=AD=E6=96=99=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 通过 --- scripts/check_ids.py | 12 ++++++++++++ scripts/id_registry.json | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/check_ids.py b/scripts/check_ids.py index fb5de1f4..cc8c48d6 100644 --- a/scripts/check_ids.py +++ b/scripts/check_ids.py @@ -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: diff --git a/scripts/id_registry.json b/scripts/id_registry.json index 0ba5d3ca..244812ed 100644 --- a/scripts/id_registry.json +++ b/scripts/id_registry.json @@ -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 处位号会把比例分母灌水、掩盖真实变化。" }