已关闭
[Bug-Report|缺陷反馈]: codearts_check_rule_config.md 第 87 行 CPP 代码块缺闭合围栏,但补它必被 codespell 拦(NAM 是规则编号) #6434
eieiei创建于  15 天前关闭于  8 天前
eieiei
eieiei
15 天前 创建

问题一:漏闭合围栏(同一判据在全仓扫描里唯一剩下的一处)

codearts_check_rule_config.md 第 87 行开了 CPP 之后没有闭合围栏,于是第 96 行的 CPP (带 info,按 CommonMark 不算闭栏)被当成代码内容,真正的裸闭栏要到第 100 行才出现 —— 结果第 91 行的 ## 【错误示例】 标题与第 93-95 行正文整段被吞进代码块,页面上不再渲染成标题。

复核方式(本机 python3 即可,不需要 CANN 环境)。判据:裸 ``` 才算闭栏,带 info 的围栏只是内容:

import re
lines = open("codearts_check_rule_config.md", encoding="utf-8").read().splitlines()
open_, spans = None, []
for i, ln in enumerate(lines, 1):
    m = re.match(r"^\s*(`{3,}|~{3,})(.*)$", ln)
    if not m:
        continue
    fence, rest = m.group(1), m.group(2).strip()
    if open_ is None:
        open_ = (fence, i)
    elif len(fence) >= len(open_[0]) and rest == "":
        spans.append((open_[1], i)); open_ = None
print("配对出的代码块:", spans)

实测:第 87 行的开栏与第 100 行的裸闭栏配对,即 (87, 100) 一个代码块;而作者的意图是 (87, 90) + (96, 100) 两块。

同一判据我扫了 ops-nn 全仓 1451 个 .md,除 !11552 覆盖的 12 份算子文档外只剩这一处。

问题二:修它一定红门禁 —— NAM 是规则编号,不是拼写错误

我在 !11552 里先按「同一判据一致执行」补了那 1 行闭栏,CI 立刻红在 pre-commit 的 codespell(run#11294,https://gitcode.com/CANN/ops-nn/actions/runs/fd9d4c9d8fa04f68852c6e073357cf86 ,日志原文):

codespell................................................................Failed
- exit code: 65
codearts_check_rule_config.md:25: NAM ==> NAME
codearts_check_rule_config.md:1229: NAM ==> NAME

原因是 pre-commit 只在「本 PR 变更的文件」上跑 codespell,这个文件历史上没被改过所以一直没被查;而仓内 .pre-commit-config.yaml 给的忽略表是:

-L CANN,cann,NNAL,nnal,ASCEND,ascend,EnQue,CopyIn,ArchType,AND,ND,nd,tbe,copyin,alog,wIh,dout,indexs,inH,padD,outWeight,abl,abd
--skip *.py,*.cpp,*.hpp,*.c,*.h

NAM 不在里面。可 NAM 并不是拼错:它是这篇文档的规则编号命名空间 —— 第 25 行是表格行 [G.NAM.02-CPP C++文件名和类名保持一致](中英双链,锚点也带 G.NAM.02),第 1228 行是对应的章节标题 # G.NAM.02-CPP C++文件名和类名保持一致。照 codespell 的建议改成 G.NAME.02 会同时改掉规则号和站内锚点,属于改内容而不是修格式。

本机复现(用上面那串原样参数跑 !11552 的 13 个变更文件,只有这个文件报错,与 CI 逐行一致):

$ codespell -L CANN,cann,NNAL,nnal,ASCEND,ascend,EnQue,CopyIn,ArchType,AND,ND,nd,tbe,copyin,alog,wIh,dout,indexs,inH,padD,outWeight,abl,abd --skip *.py,*.cpp,*.hpp,*.c,*.h <13 个变更文件>
codearts_check_rule_config.md:25: NAM ==> NAME     (同一行命中 4 次:中英双链各出现 2 次)
codearts_check_rule_config.md:1229: NAM ==> NAME
rc=65

(codespell 2.4.3 本机版;仓内 pre-commit 钉的是 v2.4.1。)

(另:CI 报 :1229 而本机跑 master 原文件报 :1228,差 1 行是因为我那版在上方多插了 1 行闭栏;两边指向的都是同一条 # G.NAM.02-… 标题。)

请定口径(修法不唯一,我不替你猜)

  1. 在 .pre-commit-config.yaml 的 codespell -L 列表里加 NAM —— 一行配置,之后这篇文档能正常维护;
  2. 或对 :25、:1229 加行内豁免 codespell:ignore —— 但这是 Markdown 表格行,豁免串会进正文,显示上不干净;
  3. 或认可「规则编号里带 NAM 就是会撞 codespell」,调整这篇文档的编号命名空间 —— 影响面最大,历史引用与外链锚点会断。

口径定了之后我可以把两处一起提:问题一的那 1 行闭栏 + 问题二选定的那 1 处配置。已撤出 !11552 的对应改动与定界证据见该 PR 里 08:56 的评论。

影响

  • 阅读侧:## 【错误示例】 整节以代码形式显示,「错误示例」的标题层级丢失,页内目录里也看不到。
  • 维护侧:任何人改这篇规范文档都会先撞一次 codespell 红,而且报错建议本身是错的(把规则编号判成拼写错误),排查成本高。

(自查:!11552 上一版因为我加了那 1 行闭栏而红 run#11294,已撤下并把范围收回 12 份算子文档,新 head cead154b5。)

likedislike
yuning_chen
yuning_chen成员
15 天前 评论:

初步分析

感谢反馈,我们已开始核对这个问题。

现象理解:codearts_check_rule_config.md 有一处代码块可能没闭合,后面的标题被吞进代码块;补上闭合围栏又可能被拼写检查把规则编号当成单词拦下。
当前判断:初步判断,待复现确认。这属于文档围栏和检查规则冲突,需对照当前文件核实未闭合的位置。
涉及范围:codearts_check_rule_config.md 的代码块围栏。
下一步:我们会核对围栏是否闭合,并评估怎样补闭合又不触发拼写检查。

likedislike
yuning_chenyuning_chen成员
15 天前 将 cong-jiyu 设为负责人
丛吉钰丛吉钰成员
14 天前 关联了pull request:fix: Modify the AIDD docs issue
丛吉钰丛吉钰成员
14 天前 删除了关联的pull request:fix: Modify the AIDD docs issue
丛吉钰丛吉钰成员
14 天前 issue状态由 进行中 改变为 已确认
丛吉钰丛吉钰成员
14 天前 关联了pull request:fix: Modify the AIDD docs issue
丛吉钰
丛吉钰成员
14 天前 评论:

/assign zwj223

likedislike
zwj223
14 天前 评论:

这问题的修改将采用方法1,在 .pre-commit-config.yaml 的 codespell -L 列表里加 NAM,正在修改中

likedislike
CANN-robotCANN-robot成员
8 天前 关闭了 issue
zwj223
8 天前 评论:

已采用方法1修改完成

likedislike
CANN-robotCANN-robot成员
8 天前 添加了label:resolved