Skip to content

docs-gen: 同目录裸源码路径(无分类段)从来不成链接 —— 9 处、4 张已发布参考页 #6484

Description

@os-project-manager

在实施 #6420(括号里的裸路径)时顺带扫出,非本单范围,按 Prime Directive #10 独立记录。⛔ 未自我认领。

#6420 修的是「括号」这一位置类;这一条是另一种输入形状 —— 路径相对自己所在目录书写,因而没有分类段。两者在同一个改写步骤里,但成因与修法都不同,零重叠。

观察

packages/spec/scripts/lib/file-description.ts 的 bare-path 改写步骤,以及 packages/spec/scripts/build-docs.ts:288sourcePathToDocsRoute(),两侧都要求路径里至少有一个目录段:

  • 改写正则要求 [\w-]+ + / + [\w.-]+\.zod\.ts;
  • 解析器 target.match(/(?:^|\/)([\w-]+)\/([\w.-]+)\.zod\.ts$/) 同样要求那个 /,并把第一段当分类名。

所以作者写 auth.zod.ts(与自己同目录)时:正则根本不匹配 → 既不成链接,也不回退成代码段,以纯文本落在页面上。这与括号无关 —— 带不带括号都一样。

根因是 FileDescriptionContext 只收路径字符串,从未被告知正在渲染哪个文件;而生成器自己是知道的(build-docs.ts 按 category 遍历)。分类段本可以由渲染方补上。

实测(origin/main @ 7b48cf9,#6420 分支上重跑生成器所得)

模块描述管线内共 9 处,分布在 4 个源文件 / 4 张已发布页:

源文件 裸写的路径 目标页是否存在
api/realtime-shared.zod.ts realtime.zod.ts 有(api/realtime)
api/realtime-shared.zod.ts websocket.zod.ts 有(api/websocket)
cloud/package.zod.ts package-version.zod.ts 有(cloud/package-version)
cloud/package.zod.ts environment-package.zod.ts 有(cloud/environment-package)
identity/identity.zod.ts auth.zod.ts
system/security-context.zod.ts audit.zod.ts
system/security-context.zod.ts encryption.zod.ts 有(system/encryption)
system/security-context.zod.ts compliance.zod.ts
system/security-context.zod.ts masking.zod.ts

发布面对应 content/docs/references/ 下的 api/realtime-shared.mdx:19,21cloud/package.mdx:17,18identity/identity.mdx:13system/security-context.mdx:14,16,17,18

5 / 9 的目标页并不存在,所以这不是「放宽正则就完事」:那 5 处按 #6229 立下的规矩应当回退成代码段(目标没有页面就不发链接),而不是继续当纯文本 —— 但即便如此也仍是改善,纯文本是三种结果里唯一错的那种。

另有 2 处在别的管线里:security/permission.mdx:134ui/page.mdx:111。那是 schema 级 description,由 lib/escape-mdx.ts 渲染,完全不做路径改写 —— 是相邻但独立的一面,不建议混在同一单里。

为什么不并进 #6420

#6420 删的是括号前后瞻,改的是「位置」;这一条要改的是路径形状FileDescriptionContext入参契约(需要把渲染方的 category 递进去)。后者动的是那个接口的公开形状,#6420 一个字节都不碰它。两单也不互为前置。

待定的契约问题(所以只作记录,不自带结论)

补分类段有两种读法,选哪种会定下 FileDescriptionContext 的形状:

倾向 A(与 #4696 已定的方向一致,且不新造消歧规则),但这是接口面的决定,留给分诊/维护者裁定。


Generated by Claude Code

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions