实现 #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 没有顺手收掉它
三条理由,都指向「这不是实施者能单方面决定的」:
它落在 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的裁决面上。 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的维护者裁决是「变体数上限 + 自报被省略的
变体数 」,理由是省略必须自报数量。把 4 个同形变体折叠成 1 个 object,丢掉的
正是元数 (arity)—— 这一格还剩的唯一事实(「你要在 N 个形状里选一个」)。
仓库已经有意在印这种重复了。 format-type.test.ts 里 gen: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 造出来的新行为。
共享的「标记必须挣回自己的位置」守卫在这里是对的。 6 个 object 比替换掉
其中两个的计数标记还窄,所以守卫拒绝加标记 —— 拒绝是正确的,只是结果好看不了。
待裁决的问题
同一个单元格内渲染结果逐字相同 的联合变体,应该:
A(现状,gen:docs 第三种残留宽度:嵌套形状深度 —— INLINE_KEY_LIMIT 只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots 1538 字符) #6374 落地后): 逐个印出。元数保留;object | object | object | object
读起来像 bug,但它说的是真话(四个可选形状,一个都没在这格里拼出来)。
B(折叠): 印一次。好看;丢掉元数;并且会覆盖 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 对
Manifest.navigationContributions 那一格的渲染裁决。
C(折叠 + 自报元数): 印一次并带上计数(需要发明一种新记号,例如
object 后面跟一个数量标记)。保住元数,但在同一张表里引入第四种 省略风格
—— 而 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots 1538 字符,枚举已省略后仍如此) #6226 的裁决理由恰恰是「同一张表里出现两种省略风格,才是比宽度更严重的
问题」。
定性
相关
同文件面:packages/spec/scripts/lib/format-type.ts。与 #6374 (本条的来源)、
#6226 (裁决面)、#5340 、#6225 同源。须与该文件面的其他在飞单串行。
#6374 的 PR 已把 A 的行为明确钉在
format-type.test.ts 的 prints an identical variant once per variant 一条里,
并在注释里写明这是待裁决项 —— 裁决若选 B/C,改的是那一条 pin。
实现 #6374(形状深度预算)时量出来的观察类发现,未认领,按 PD#10 立案。
不在 #6374 的 PR 里顺手改,因为它落在 #6226 刚被维护者裁决过的那个面上。
现象
#6374 给内联形状摘要加了深度预算(
SHAPE_DEPTH_LIMIT = 1,嵌套形状印object)。后果之一:一个联合的多个变体如果都是对象,它们现在会渲染成同一个字符串,
于是单元格里出现连续重复的
object。全语料实测 11 格,改前是 0 格:ai/conversation.mdxConversationSession.messagescontent: (object | object | object | object)[]ui/view.mdx/data/object.mdx/api/protocol.mdxView.list/.listViews/ViewItem.config等 7 格data?: object | object | object | objectkernel/manifest.mdxManifest.navigationContributionsitems: (object | object | object | object | … +5 more)[]最后一格尤其刺眼:
… +5 more在数「还有 5 个和已印出的这四个一样的object」。为什么 #6374 没有顺手收掉它
三条理由,都指向「这不是实施者能单方面决定的」:
PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 的裁决面上。 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 的维护者裁决是「变体数上限 + 自报被省略的变体数」,理由是省略必须自报数量。把 4 个同形变体折叠成 1 个
object,丢掉的正是元数(arity)—— 这一格还剩的唯一事实(「你要在 N 个形状里选一个」)。
format-type.test.ts里 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 的一条现存 pin:string | string | string | string | string逐字保留、不省略,理由写在测试注释里——「标记比省下的还长」。也就是说「重复拼写同一个变体」是这个渲染器已经钉住的
既有行为,
object | object | object | object只是同一行为遇上了新的拼写,不是 gen:docs 第三种残留宽度:嵌套形状深度 ——
INLINE_KEY_LIMIT只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots1538 字符) #6374 造出来的新行为。object比替换掉其中两个的计数标记还窄,所以守卫拒绝加标记 —— 拒绝是正确的,只是结果好看不了。
待裁决的问题
同一个单元格内渲染结果逐字相同的联合变体,应该:
INLINE_KEY_LIMIT只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots1538 字符) #6374 落地后): 逐个印出。元数保留;object | object | object | object读起来像 bug,但它说的是真话(四个可选形状,一个都没在这格里拼出来)。
PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 对Manifest.navigationContributions那一格的渲染裁决。object后面跟一个数量标记)。保住元数,但在同一张表里引入第四种省略风格—— 而 gen:docs 联合类型的每个对象变体都印一遍完整摘要,一个单元格里出现近乎相同的形状 N 次(
PageSlots.slots1538 字符,枚举已省略后仍如此) #6226 的裁决理由恰恰是「同一张表里出现两种省略风格,才是比宽度更严重的问题」。
定性
INLINE_KEY_LIMIT只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots1538 字符) #6374 实测:折叠只把 >200 的单元格从 42 降到 39),纯粹是可读性与契约一致性的取舍。
相关
同文件面:
packages/spec/scripts/lib/format-type.ts。与 #6374(本条的来源)、#6226(裁决面)、#5340、#6225 同源。须与该文件面的其他在飞单串行。
#6374 的 PR 已把 A 的行为明确钉在
format-type.test.ts的prints an identical variant once per variant一条里,并在注释里写明这是待裁决项 —— 裁决若选 B/C,改的是那一条 pin。