Skip to content

docs-gen: 正文里裸露的 ../x.zod.ts 路径,../ 前缀被漏在链接外面 —— 2 张已发布参考页 #6229

Description

@os-zhuang

Blocked-by: #6136

在实施 #5553 / #6136(PR #6224)时,给渲染链补 pin 用例顺带扫出。与那两单不同根因、不同输入形态,故单独立单;PR #6224 已刻意绕开这条形态,没有 pin 它(pin 了等于追认),并在用例注释里指向本单。

现象(origin/main,PR #6224 落地后依然如此)

packages/spec/scripts/lib/file-description.ts 里把「正文中裸露的源码路径」改写成链接的那一步:

.replace(/(?<!\()\b((?:\.\.\/)?[\w-]+\/[\w.-]+\.zod\.ts)\b(?!\))/g, )

\b 写在可选的 (?:\.\.\/)? 前面。匹配起点若落在 ../ 的第一个 . 上,前面是空格、当前是 .,两侧都不是单词字符,\b 不成立;于是引擎只能从 integration 这类标识符处起匹,../ 被留在链接外面。

落到已发布页面上(两处):

content/docs/references/api/http-cache.mdx
See also: ../../[system/cache.zod.ts](/docs/references/system/cache) for application-level caching

content/docs/references/system/cache.mdx
See also: ../../[automation/etl.zod.ts](/docs/references/api/http-cache) for HTTP-level caching

读者看到「另见」前面挂着一截裸的 ../../,链接文本也不是完整路径。

#6136 的区别(为什么不是同一条)

#6136无标题 {@link 路径} 先产出链接、改写器再包一层(链接套链接);修法是让改写器跳过已成型链接,PR #6224 已修。本单的输入里没有 {@link} —— 源码写的是裸标签 @see ../../system/cache.zod.ts(api/http-cache.zod.ts:35system/cache.zod.ts:28),链接完全由这一步自己产出,../ 从一开始就没进去。#6224 修好后这两处仍在,可直接复现:

$ grep -rn '\.\./\[' content/docs/references/
api/http-cache.mdx:…  system/cache.mdx:…

两个叠加的子缺陷

  1. \b 位置错(如上),../ 掉在链接外。
  2. (?:\.\.\/)? 只写了一层,而实际语料用的是 ../../(跨 category 引用必然两层)。即便修好 (1),两层前缀也只能吃掉一层。

修法方向(未验证)

把可选前缀移到 \b 之外并允许重复,例如 ((?:\.\.\/)*[\w-]+\/[\w.-]+\.zod\.ts)\b,起点锚定改用「前面不是路径字符」的前瞻而非 \b。注意 sourcePathToDocsRoute()(build-docs.ts:278)本身用 (?:^|\/) 起匹,对 ../../a/b.zod.ts 已能正确解析出 category,所以路由侧无需改。

验收:grep -rn '\.\./\[' content/docs/references/ 归零,两句恢复成完整可点链接。渲染链已由 scripts/file-description.test.ts 覆盖,新用例可直接加在那里,不必跑整个生成器再 grep .mdx

影响面

2 张已发布参考页的正文各一处,读者今天访问就能看到。纯展示层,无运行时/协议语义。


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationpm:queue

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions