ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Zed 中 JSON / JSONC 的编辑体验:Schema 校验与 Prettier 格式化配置指南

Zed 中 JSON / JSONC 的编辑体验:Schema 校验与 Prettier 格式化配置指南 Zed 中 JSON / JSONC 的编辑体验Schema 校验与 Prettier 格式化配置指南【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed本篇技术指南聚焦 Zed 编辑器对 JSON 与 JSONC 语言的内置支持讲解从语法解析、语言服务器接入、package.json/tsconfig.json自动 Schema 校验到通过$schema与settings.json两种方式为任意 JSON 文件绑定校验 Schema以及.jsonc文件使用 Prettier 格式化时尾逗号的规避方案。读完你可以在 Zed 中为 LSP、Zed 自身配置文件乃至自定义 JSON 格式获得「编辑器 校验 格式化」的一站式配置能力。JSON 语言支持总览JSON 支持在 Zed 中开箱即用native support不需要安装任何扩展语法解析基于 tree-sitter-json 语法树提供高亮、折叠、括号配对等编辑能力语言服务器默认接入由 zed-industries 维护的 json-language-server负责校验与格式化。在代码层面这两者分别对应 Zed 内置语言注册与 LSP 适配器。查看 crates/languages/src/lib.rs 可以看到内置语言表里同时注册了两种语言名称LanguageInfo { name: json, adapters: vec![json_lsp_adapter.clone(), node_version_lsp_adapter], ... }, LanguageInfo { name: jsonc, adapters: vec![json_lsp_adapter], ... },注意 JSON 语言额外挂载了node_version_lsp_adapterpackage-version-server它负责在编辑package.json这类文件时提供包版本等补充信息。JSONC允许单行注释的 JSON 超集Zed 还支持 JSON 的超集JSONCJSON with Comments即在 JSON 文件中允许出现//单行注释与/* */块注释。Zed 自身的大量配置文件如settings.json、keymap.json、tasks.json正是以此形式书写。在file_types默认配置中assets/settings/default.json 将这些常见配置文件默认归入 JSONC 语言file_types: { JSONC: [ **/.zed/*.json, **/.vscode/**/*.json, **/{zed,Zed}/{settings,keymap,tasks,debug}.json, tsconfig*.json ] }因此你可以在这些文件里放心书写注释而 Zed 自己的 schema 也会正确识别它们见下文「Zed 内建 Schema 关联」。注释的快捷切换在 JSONC 文件中Zed 绑定了注释切换命令editor::ToggleComments可对当前行或选区添加/移除注释macOScmd-/Linux / Windowsctrl-/对应的默认键位配置可分别在 assets/keymaps/default-macos.jsoncmd-/: [editor::ToggleComments, ...]与 assets/keymaps/default-linux.jsonctrl-/: [editor::ToggleComments, ...]中找到。JSONC 的 Prettier 格式化与尾逗号规避当你在 Zed 中对*.jsonc扩展名文件执行Format Document或开启了format_on_save保存时自动格式化时Zed 默认会调用Prettier作为格式化器。默认设置层面JSON与JSONC两种语言的 formatter 都被允许使用 Prettier见 assets/settings/default.json。已知问题.jsonc文件的尾逗号Prettier 上游存在一个公开 issue当文件扩展名为.jsonc时Prettier 会错误地给文件加上尾逗号。因为尾逗号只对 JSONC / JavaScript 这类语法合法对严格 JSON 不合法这会导致 JSONC 文件被「格式化」后反而变得不标准。需要注意的是只有扩展名为*.jsonc的文件受影响采用 JSONC 语法但扩展名仍为.json的文件例如.zed/settings.json不受影响。规避方案在.prettierrc中 override在项目根目录的.prettierrc配置文件中加入如下覆盖规则即可让 Prettier 对.jsonc文件改用json解析器并关闭尾逗号{ overrides: [ { files: [*.jsonc], options: { parser: json, trailingComma: none } } ] }其中parser: json让 Prettier 以严格 JSON 方式解析、避免产出注释或尾逗号相关的意外行为trailingComma: none显式禁止添加尾逗号。该配置会随项目生效覆盖使用 Zed 内置或项目安装的 Prettier 进行格式化时的默认行为。JSON 语言服务器的接入机制Zed 内置的 json-language-server 来自zed-industries/json-language-server基于vscode-langservers-extracted中的 VSCode JSON 语言服务器封装。其完整接入逻辑位于 crates/languages/src/json.rs服务器入口位于node_modules/vscode-langservers-extracted/bin/vscode-json-language-server见 json.rs由 Zed 通过内置 Node 运行时以 npm 自动下载安装vscode-langservers-extracted包如果你在$PATH中已安装了vscode-json-language-serverZed 会优先检测并复用它以--stdio参数启动见 json.rs语言服务器对 JSON 文件同时开启格式化与校验能力并向服务器发送如下配置见 workspace_configuration{ json: { format: { enable: true }, validate: { enable: true }, schemas: [] } }若你配置了 HTTP 代理Zed 还会把代理设置透传给语言服务器用于远程拉取 Schemajson.http.proxy见 json.rslanguage_ids将 JSON / JSONC 两种语言分别映射为 LSP 侧的json/jsonc见 json.rs。Zed 内建 Schema 关联自动校验Zed默认开箱即用地为package.json与tsconfig.json提供 JSON Schema 校验。这两份 schema 以内嵌资源形式编译进二进制tsconfig、package.json的 schema 通过include_str!从 crates/json_schema_store/src/json_schema_store.rs 中的schemas/tsconfig.json、schemas/package.json载入在组装文件关联时Zed 会无条件注册tsconfig.json、package.json两条fileMatch规则见 all_schema_file_associations。此外Zed 还为自己生态内的配置类 JSON 文件预置了 schema 关联例如settings.json、keymap.json、tasks.json、snippets等见 json_schema_store.rs编辑这些文件时同样能获得实时校验与补全。这也解释了为什么JSON语言的语言服务器适配器被标记为is_primary_zed_json_schema_adapter见 json.rs它是 Zed 自身配置 schema 的一等接入者。除上述内建能力外json-language-server 也支持把项目文件中的 JSON Schema 定义、JSON Schema Store 提供的公共 schema或任何可公开访问 URL 上的 schema 用于 JSON 文件校验。方式一在文件内通过$schema内联指定 Schema如果你希望跟随文件本身携带 schema 信息适合分发给他人使用、或文件位置固定可以在 JSON 文件的顶层加入$schema键指向你的 schema 文件地址。以配合lua-language-server使用的.luarc.json为例{ $schema: https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json, runtime.version: Lua 5.4 }打开该文件后Zed 的 json-language-server 会拉取该 schema为runtime.version等字段提供校验、补全与悬停文档。方式二在 settings.json 中按路径关联 Schema当你不希望在每个文件里都写$schema时可以在 Zed 的 settings.json 中为lsp→json-language-server→settings配置json.schemas数组用fileMatch与url的配对把 schema 批量绑定到匹配的文件路径上{ lsp: { json-language-server: { settings: { json: { schemas: [ { fileMatch: [config/*.json], url: ./schemas/custom-schema.json }, { fileMatch: [*.config.json], url: ~/global-schemas/shared.json }, { fileMatch: [*/*.luarc.json], url: https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json } ] } } } } }fileMatch支持 glob 通配模式url支持三种形式url 前缀 / 形式解析规则示例./相对于工作区worktree根目录解析./schemas/custom-schema.json→项目根/schemas/custom-schema.json~/展开为你的主目录home directory~/global-schemas/shared.json→~/. 主目录/global-schemas/shared.jsonhttps://直接作为远程 URL 拉取Schema Store 或其他公共地址路径解析的具体实现位于 crates/languages/src/json.rs 的worktree_root函数中它遍历 settings 内json.schemas数组把以.或~开头的url统一交给resolve_relative_path解析为绝对路径后再发送给语言服务器其余形式如完整http(s)://则原样透传。透传 json-language-server 的全部受支持设置除了schemas你还可以通过在 Zed 的 settings.json 中为json-language-server指定任意受支持设置将其透传给语言服务器。例如{ lsp: { json-language-server: { settings: { json: { validate: { enable: true }, format: { enable: true }, schemas: [] } } } } }Zed 会把你提供的这部分 settings 与自身生成的默认配置做深合并参见 workspace_configuration 中对language_server_settings的合并逻辑因此你既可以只补充个别键也可以整体覆盖默认行为。完整的可配置项以 json-language-server 官方 README 的 settings 清单为准。验证与排查配置是否真正生效可以通过语言服务器日志直接观察 Zed 发送给 json-language-server 的完整配置。在 Zed 中执行命令面板里的dev: open language server logs选择json-language-server分组下的Server Info即可查看格式化、校验与全部 schema 关联是否按预期下发该提示同样写在 json.rs 的源码注释中。小结总结一下在 Zed 中解锁 JSON / JSONC 完整能力的三条主线开箱即用JSON 与 JSONC 均为内置语言语法解析、json-language-server自动安装、package.json/tsconfig.json自动 schema 校验全部默认生效JSONC 中可放心使用注释并按cmd-//ctrl-/快捷切换Schema 绑定需要自定义校验时单文件用顶层$schema批量场景在 settings.json 中通过json.schemasfileMatch完成./、~/、https://三类 url 分别解析为工作区路径、主目录路径与远程地址格式化*.jsonc走 Prettier 时若出现尾逗号在.prettierrc中以parser: jsontrailingComma: none的 override 规则规避即可。延伸阅读语言服务器适配器实现crates/languages/src/json.rsJSON / JSONC 语言注册crates/languages/src/lib.rs内建 Schema 关联与 Zed 配置类文件 schemacrates/json_schema_store/src/json_schema_store.rsJSONC 默认文件类型与格式化允许配置assets/settings/default.json注释切换默认键位assets/keymaps/default-linux.json、assets/keymaps/default-macos.json【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表