Skip to content

gen:docs 顶层长枚举仍是单个 6092 字符的表格单元格 —— ### Allowed Values 项目符号只对「整个 schema 是枚举」生效,对「某个属性是枚举」从不生效 #6225

Description

@os-zhuang

实现 #5340(PR #6211)时量语料量出来的观察类发现,未认领,按 PD#10 立案。不是该 PR 造成的,也不是它的返工项 —— #5340 的范围明确只收「内联形状里的第二份拷贝」,而这一条恰恰是那份唯一的完整拷贝,故意不动才是对的。

现象

#5340 落地后,content/docs/references/** 里仍有 27 个超过 400 字符的类型单元格,其中 9 个是「整格就是一个 Enum< ... >」的顶层枚举:

字符数 页面 属性
6092 api/contract.mdx ApiError.code(261 个成员)
1159 api/errors.mdx code
1083 api/events.mdx type
561 data/field.mdx / ui/action.mdx / ui/view.mdx / ui/bulk-action.mdx / ai/solution-blueprint.mdx type(49 个字段类型)

6092 字符挤在一个 GFM 表格单元格里,和 #5340 修掉的那个是同一种阅读体验。

机制(为什么它没被 #5340 的省略碰到,也不该被碰到)

两件事叠在一起:

  1. formatType 的省略只在 ctx.inShapeSummary 置位时生效,而该标志只在内联摘要的 { ... } 之下设置。顶层位置永不省略,这是 gen:docs 内联形状里的长枚举不省略,单个类型单元格可达约 900 字符(BulkActionDef.params 实例) #5340 刻意的设计 —— 已核实 api/contract.mdx没有 ErrorCode 小节、没有任何项目符号列表,这 6092 字符是该页上这份词表的唯一完整拷贝,省略它等于把信息删掉。
  2. build-docs.ts 确实有一条更适合长词表的渲染路径 —— ### Allowed Values + 每个成员一行项目符号 —— 但它只在整个 schematype: 'string' + enum 时才走(build-docs.tsmainDef.type === 'string' && mainDef.enum 那一支)。一个属性的类型是枚举时永远走不到,只能得到一个表格单元格。

所以 261 个成员的词表落在哪种渲染上,取决于它在 zod 里是被提升成了具名 schema 还是内联在属性上 —— 而这跟「读者需要怎样读它」无关。

可能的修法(未验证,留给分诊)

  • 顶层枚举超过 N 个成员/字符时,单元格印一个短摘要,完整词表移到该属性下方的 ### Allowed Values 项目符号列表(复用已有渲染路径,且信息不丢);
  • 或让具名枚举 schema 的 $ref 保持链接而不是被内联展开,把词表留在它自己的页/小节里。

两种都要逐页确认重生成 diff。⛔ 不得手改生成的 .mdx

相关 / 串行

同文件面:packages/spec/scripts/lib/format-type.ts + build-docs.ts。与 #5340(PR #6211,内联枚举省略)、#5729#5606#5338 同源;另有一条同批量出的、机制不同的残留宽度观察已另立(union/shape 变体重复)。须与该文件面的其他在飞单串行,不得同批并行。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions