Skip to content

gen:docs 深度预算落地后,11 个单元格出现 object | object | object | object —— 同形变体是否该去重,落在 #6226 的裁决面上 #6569

Description

@os-project-manager

实现 #6374(形状深度预算)时量出来的观察类发现,未认领,按 PD#10 立案。
不在 #6374 的 PR 里顺手改,因为它落在 #6226 刚被维护者裁决过的那个面上。

现象

#6374 给内联形状摘要加了深度预算(SHAPE_DEPTH_LIMIT = 1,嵌套形状印 object)。
后果之一:一个联合的多个变体如果都是对象,它们现在会渲染成同一个字符串,
于是单元格里出现连续重复的 object。全语料实测 11 格,改前是 0 格:

页面 属性 现在印出
ai/conversation.mdx ConversationSession.messages content: (object | object | object | object)[]
ui/view.mdx / data/object.mdx / api/protocol.mdx View.list / .listViews / ViewItem.config 等 7 格 data?: object | object | object | object
kernel/manifest.mdx Manifest.navigationContributions items: (object | object | object | object | … +5 more)[]

最后一格尤其刺眼:… +5 more 在数「还有 5 个和已印出的这四个一样object」。

为什么 #6374 没有顺手收掉它

三条理由,都指向「这不是实施者能单方面决定的」:

  1. 它落在 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的裁决面上。 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的维护者裁决是「变体数上限 + 自报被省略的
    变体数
    」,理由是省略必须自报数量。把 4 个同形变体折叠成 1 个 object,丢掉的
    正是元数(arity)—— 这一格还剩的唯一事实(「你要在 N 个形状里选一个」)。
  2. 仓库已经有意在印这种重复了。 format-type.test.tsgen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的一条现存 pin:
    string | string | string | string | string 逐字保留、不省略,理由写在测试注释里
    ——「标记比省下的还长」。也就是说「重复拼写同一个变体」是这个渲染器已经钉住的
    既有行为
    ,object | object | object | object 只是同一行为遇上了新的拼写,
    不是 gen:docs 第三种残留宽度:嵌套形状深度 —— INLINE_KEY_LIMIT 只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots 1538 字符) #6374 造出来的新行为。
  3. 共享的「标记必须挣回自己的位置」守卫在这里是对的。 6 个 object 比替换掉
    其中两个的计数标记还窄,所以守卫拒绝加标记 —— 拒绝是正确的,只是结果好看不了。

待裁决的问题

同一个单元格内渲染结果逐字相同的联合变体,应该:

定性

相关

同文件面:packages/spec/scripts/lib/format-type.ts。与 #6374(本条的来源)、
#6226(裁决面)、#5340#6225 同源。须与该文件面的其他在飞单串行。
#6374 的 PR 已把 A 的行为明确钉在
format-type.test.tsprints an identical variant once per variant 一条里,
并在注释里写明这是待裁决项 —— 裁决若选 B/C,改的是那一条 pin。

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions