我已经为 Web 应用程序配置构建了项目。它包括生成的(从 TypeScript)JSONSchemas。为了简化 - 用户可以配置表单 - 字段顺序(字符串[]),隐藏字段(字符串[])等。JSON Schmeas对不太熟悉配置的用户非常有帮助,它可以验证一些错误,这可能是由于配置错误引起的。
但它们无法在所有情况下提供帮助 - 在那些字符串数组中 - 用户可以输入任何字符串,并且模式将有效。
我想要做的 - 是一些动态验证 - 当用户打开 [
字段顺序时 - 他必须从字段列表中进行选择,这些字段将从 API 中获取。
有些东西,比如当您在 package.json 依赖项中键入 packageName: ""
- 它会获得给定包的版本。
我想,我必须为此做一些 VSCode 扩展——但我不知道——从哪里开始。有人可以指出我的方向 - 例如,有人使用实时 JSON 模式验证将不胜感激。
通过挖掘 vscode 找到了答案源代码。搜索所有包含 package.json
和 dependencies
的文件(正则表达式搜索 (package.json[\s\S\n]*dependencies)|(dependencies[\s\S\n]*package.json)
) 并找到了一个类 PackageJSONContribution
,这正是我要找的。p>
然后我使用 yo code
做了一个简单的扩展(来自 Your first extension 的例子)。
我无法从 vscode
导入一些接口(interface)和类,我只是为我的扩展制作了一个本地副本。制作了我自己的类(class) FooJSONContribution
,唯一的区别是 -
它的 getDocumentSelector()
函数更改为
public getDocumentSelector(): vscode.DocumentSelector {
return [{ language: 'json', scheme: '*', pattern: '**/foo.json' }];
}
调整扩展 package.json
activationEvents
并添加 "onLanguage:json"
(这可以优化)。
调整扩展的activate
事件,添加
const contribution = new FooJSONContribution(xhr, true);
const disposableCompletionItemProvider = vscode.languages.registerCompletionItemProvider(
contribution.getDocumentSelector(),
new JSONCompletionItemProvider(contribution),
'"',
':'
);
context.subscriptions.push(disposableCompletionItemProvider);
就是这样。所有 foo.json
文件现在都像 package.json
文件一样工作 -
我现在需要做的事情 - 调整 FooJSONContribution.ts
的代码以满足我自己的需要、我自己的 API 和我自己的文件。
我在这里上传了这个例子https://github.com/leqwasd/VsCodeAsyncJsonAutocomplete