第85章 Zed 编辑器第85章:JSON 支持详解
Zed 原生支持 JSON。
- Tree-sitter:tree-sitter/tree-sitter-json
- Language Server:zed-industries/json-language-server
JSONC
Zed 还支持 JSON 的超集 JSONC,允许在 JSON 文件中使用单行注释(//)。
编辑这类文件时,可以用 cmd-/(macOS)或 ctrl-/(Linux)来切换当前行或所选内容的注释。
JSONC 的 Prettier 格式化
如果你使用 *.jsonc 扩展名的文件并执行 Format Document,或启用了 format_on_save,Zed 会调用 Prettier 进行格式化。Prettier 有一个未解决的问题:会给 jsonc 扩展名的文件添加尾随逗号。扩展名为 .json 的 JSONC 文件不受影响。
要绕过这个问题,可以在 .prettierrc 配置文件中添加以下内容:
{
"overrides": [
{
"files": ["*.jsonc"],
"options": {
"parser": "json",
"trailingComma": "none"
}
}
]
}
JSON Language Server
Zed 开箱即支持对 package.json 和 tsconfig.json 文件进行 JSON Schema 校验。此外,json-language-server 还可以使用项目文件中的 JSON Schema 定义、来自 JSON Schema Store 的定义,或其他公开可用的 URL 来进行 JSON 校验。
内联指定 Schema
要在 JSON 文件中内联指定 schema,可以在顶层添加一个 $schema 键,指向对应的 JSON schema 文件。
例如,供 lua-language-server 使用的 .luarc.json:
{
"$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json",
"runtime.version": "Lua 5.4"
}
通过设置指定 Schema
你可以通过语言服务器设置中的相对路径,将 JSON Schema 与文件路径关联起来。Zed 会相对于项目根目录解析路径:
json [settings]
"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"
}
]
}
}
}
}
以 ./ 开头的路径相对于工作区根目录解析。以 ~/ 开头的路径则展开到用户主目录。
你还可以在 Zed 的 settings.json 中指定 支持的设置项,将其传递给 json-language-server: