visual-studio-code - VSCode 动态 JSON 模式验证

标签 visual-studio-code jsonschema vscode-extensions

<分区>

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

但它们无法在所有情况下提供帮助 - 在那些字符串数组中 - 用户可以输入任何字符串,并且模式将有效。

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

有些东西,比如当您在 package.json 依赖项中键入 packageName: "" - 它会获得给定包的版本。

我想,我必须为此做一些 VSCode 扩展——但我不知道——从哪里开始。有人可以指出我的方向 - 例如,有人使用实时 JSON 模式验证将不胜感激。

最佳答案

通过挖掘 vscode 找到了答案源代码。搜索所有包含 package.jsondependencies 的文件(正则表达式搜索 (package.json[\s\S\n]*dependencies)|(dependencies[\s\S\n]*package.json)) 并找到了一个类 PackageJSONContribution,这正是我要找的。

然后我使用 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

Example of foo.json working

关于visual-studio-code - VSCode 动态 JSON 模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64428345/

相关文章:

typescript - 当联合类型具有字符和字符串类型时,vscode 智能感知不起作用

MySql JSON 模式

typescript - 用于文件资源管理器的 vscode api

java - 如何在 Java 中将 JSON 架构中的默认值添加到 JSON 文档

javascript - 如何在 VSCode 中突出显示全局变量?

html - VSCode 扩展 webview 外部 html 和 css

gradle - 带有VSCode的Minecraft Forge Gradle

visual-studio-code - Visual Studio Code : How to create multilines indented snippets?

java - 'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。在 VS Code 中,使用 Code Runner 扩展

java - jsonSchema 用于验证有条件所需的属性