如何在IntelliJ IDEA中配置JSON Schema让YAML依赖项自动补全根对象键
实现IntelliJ IDEA中YAML依赖项的动态自动补全
嘿,刚好碰到过类似的需求!虽然标准JSON Schema确实没法动态生成枚举来引用根对象的属性名,但IntelliJ IDEA对JSON Schema做了扩展,完全能满足你要的自动补全效果,不用纠结标准的限制。
下面是具体的Schema写法,我一步步给你拆解:
1. 基础Schema结构(支持任意顶级属性)
首先我们要定义根对象允许任意字符串作为属性名,同时每个属性下必须有command字段,然后单独处理dependencies数组:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", // 允许任意顶级属性名,每个属性的结构都包含command "additionalProperties": { "type": "object", "properties": { "command": { "type": "string", "description": "要执行的命令" } }, "required": ["command"] }, // 单独定义dependencies字段 "properties": { "dependencies": { "type": "array", "items": { "type": "string", "description": "必须是已定义的顶级属性名" } } } }
2. 开启IntelliJ的精准补全(可选但更友好)
如果你想让补全的提示更明确,还可以用上IntelliJ的自定义关键字intellij:reference,它能告诉IDE这个字符串需要引用当前根对象的属性名。修改dependencies.items部分即可:
"items": { "type": "string", "intellij:reference": "#", "description": "引用已存在的顶级属性" }
效果说明
把这个Schema关联到你的YAML文件后,当你在dependencies数组里输入- 时,IntelliJ会自动扫描你已经写过的顶级属性名(比如foo、bar、baz),把它们作为补全候选弹出来——完全符合你要的基于其他属性键补全的需求。
虽然这个Schema在标准JSON Schema验证器里不会做严格的枚举校验(毕竟标准没法动态获取属性名),但在IntelliJ里完全能满足自动补全的核心需求,而且还能保证每个顶级属性的结构符合要求。
内容的提问来源于stack exchange,提问作者user3146897
相关产品推荐
相关产品推荐

