Установить программно jsonValidation для динамического отображения - PullRequest
1 голос
/ 18 октября 2019

Я создаю новое расширение vscode, и мне нужно расширить стандартное использование системы jsonValidation, уже присутствующей в vscode.

Примечание: Я говорю о системе, определенной в package.json:

"contributes" : {
    "languages": [
        {
            "id" : "yml", 
            "filenamePatterns": ["module.service"]
        },
        {
            "id" : "json", 
            "filenamePatterns": ["module.*"]
        }
    ],
    "jsonValidation": [
        {
            "fileMatch": "module.test",
            "url": "./resources/test.schema"
        }
    ]
}

Теперь мне нужно создать динамическое отображение, где json поля filematch/ url определяются из некоторых внутренних правил (например, версия и другие внутренние вещи). Стандартное использование статично: один fileMatch -> одна схема.

Я хочу, например, прочитать версию из файла json для проверки и установить схему после этого:

{
    "version" : "1.1"
}

схема проверки должна быть test-schema.1.1 вместо test-schema.1.0

примечание: вопрос только об изменении конфигурации, предоставленной package.json из extensions.ts

Спасибо за поддержку

1 Ответ

1 голос
/ 18 октября 2019

Существует одно решение для изменения package.json при активации функции:

export function activate(context: vscode.ExtensionContext) {

    vscode.extensions.all.forEach(extension => 
    {
        if (extension.id !== "my-id.my-plugin") {
            return;
        }

        let packageJSON = extension.packageJSON;
        if (packageJSON && packageJSON.contributes && packageJSON.contributes.jsonValidation)
        {
            let jsonValidation = packageJSON.contributes.jsonValidation;
            jsonValidation[0]["fileMatch"] = "module.auth";
        }
    });
}

И для перезагрузки:

vscode.commands.executeCommand('workbench.action.reloadWindow');
...