Visual studio code VSCode动态JSON模式验证

Visual studio code VSCode动态JSON模式验证,visual-studio-code,jsonschema,vscode-extensions,Visual Studio Code,Jsonschema,Vscode Extensions,我已经为web应用程序配置构建了一个项目。它包括(从TypeScript生成的)JSONSchema。为了简化,用户可以配置表单-字段顺序(字符串[])、隐藏字段(字符串[])等。JSON Schmeas对不太熟悉配置的用户非常有帮助,它可以验证配置错误可能导致的一些错误 但它们不能在任何情况下都有所帮助—在这些字符串数组中—用户可以放置任何字符串,模式将是有效的 我想做的是一些动态验证,当用户打开字段顺序的[时,他必须从字段列表中进行选择,这些字段将从API中获取 例如,当您在package.

我已经为web应用程序配置构建了一个项目。它包括(从TypeScript生成的)JSONSchema。为了简化,用户可以配置表单-字段顺序(字符串[])、隐藏字段(字符串[])等。JSON Schmeas对不太熟悉配置的用户非常有帮助,它可以验证配置错误可能导致的一些错误

但它们不能在任何情况下都有所帮助—在这些字符串数组中—用户可以放置任何字符串,模式将是有效的

我想做的是一些动态验证,当用户打开字段顺序的
[
时,他必须从字段列表中进行选择,这些字段将从API中获取

例如,当您在package.json依赖项中键入
packageName:“
”时,它会获取给定包的版本


我想,我必须为此做一些VSCode扩展,但我不知道从哪里开始。有人能给我指点方向吗?如果有人使用实时JSON模式验证,我将不胜感激。

通过挖掘源代码找到答案。搜索了所有包含
package.JSON
dependencies
(regex search
(package.json[\s\s\n]*dependencies)|(dependencies[\s\s\n]*package.json)
)并找到了一个类
PackageJSONContribution
,这正是我要找的

然后我使用
yo-code
做了一个简单的扩展(如示例中的)

一些接口和类我无法从
vscode
导入,我只是为我的扩展制作了一个本地副本。制作了我自己的类
FooJSONContribution
,唯一的区别是- 它的
getDocumentSelector()
函数更改为

public getDocumentSelector():vscode.DocumentSelector{
返回[{language:'json',scheme:'*',pattern:'**/foo.json'}];
}
调整了扩展名
package.json
activationEvents
,并添加了
“onLanguage:json”
(这可以优化)

已调整
通过添加

const contribution=new FooJSONContribution(xhr,true);
const DisposableCompletionTemprovider=vscode.languages.RegisterCompletionImprovider(
contribution.getDocumentSelector(),
新的JSONCompletionTemprovider(贡献),
'"',
':'
);
context.subscriptions.push(DisposableCompletionTemprovider);
就是这样。所有的
foo.json
文件现在都像
package.json
文件一样工作-

我现在需要做的事情-调整
FooJSONContribution.ts
的代码,以满足我自己的需要、我自己的API和我自己的文件

我在这里上传了这个例子