Skip to content

VS Code 扩展的 jsonValidation 指向一个不存在的文件 —— schemas/objectstack.schema.json 从未存在过,也没有任何脚本生成它 #5028

Description

@xuyushun441-sys

#4917(修片段 + 加常驻 safeParse gate)的实现过程中发现的旁支,与该单无关,单独记录(Prime Directive #10),未认领

现象

packages/vscode-objectstack/package.json 声明:

"contributes": {
"jsonValidation": [
{
"fileMatch": "objectstack.json",
"url": "./schemas/objectstack.schema.json"
}
]
}

packages/vscode-objectstack/schemas/ 这个目录在仓库里不存在,objectstack.schema.json 也不存在。全仓搜索这个文件名只有两处命中:

  • 上面这条 contributes 声明;
  • packages/cli/src/commands/generate.ts:911 的一个默认输出文件名(flags.output ?? 'objectstack.schema.json')—— 那是 CLI 在用户工程里生成 schema 时的默认名,不是给扩展打包用的产物,也没有任何 build/prepack 脚本把它拷进扩展包。

所以扩展的 README 里写的 "JSON Schema Validation — Validates objectstack.json files against the bundled schema" 是一句 declared ≠ enforced:VS Code 加载这条 contribution 时解析不到 url,该 fileMatch 静默失效,作者写 objectstack.json 得不到任何校验。

为什么值得单开

#4917 是同一类缺陷(扩展对外声明的能力没有任何东西在 CI 里验证过),但落点不同、修法也不同,不适合塞进 #4917 的片段 PR:

顺带说明:vsce 打包读 .vscodeignore(此包没有),不读 package.jsonfiles,所以 snippets/ 是能进 .vsix 的 —— 缺的确实只有 schemas/,不是打包配置问题。

需要决定的部分

三条路,选哪条要维护者定:

  1. 真的生成并 bundle。packages/spec 已经有 gen:schema 产出 JSON Schema(json-schema/ + json-schema.manifest.json),给扩展加一个 build 步骤把对应的那份拷成 schemas/objectstack.schema.json。代价:多一条产物同步链路,需要自己的 staleness gate,否则又是一个「VS Code 扩展的 os-view-grid 片段生成的 view 现在 parse 不过:list.defaultSort / list.pageSize 已被 #4001 关掉 #4917 式」的静默过期点。
  2. 删掉这条 contribution。 扩展不再声称做 objectstack.json 的 JSON Schema 校验,README 同步删掉那一行。代价:少一个能力;但 declared 立刻等于 enforced。
  3. 改为指向 CLI 生成的工程内文件。 让 fileMatch 依赖用户自己跑 os generate 产出的 schema。代价:VS Code 的 jsonValidation.url 是相对于扩展的,不是相对于工作区,这条路需要换成 language-server 侧动态注册,工作量最大。

倾向 2(先让声明诚实),再按需另立一单做 1。但这属于扩展对外能力面的取舍,不猜。

不管选哪条,都应该有一条 gate 让这件事不能再静默 —— 最便宜的形式是在 #4917 新加的 packages/vscode-objectstack/test/snippets.test.ts 旁边加一条:package.jsoncontributes 引用的每一个相对路径都必须在包内真实存在。这条断言现在就会判红,是这一单的天然验收标准。

关联:#4917(同批发现,已修片段 + 已加片段 gate)、Prime Directive #10

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions