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

Activity

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

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions