Добавить задачи в tasks.json для пользователей расширения vscode - PullRequest
0 голосов
/ 18 октября 2018

Я пишу расширение vscode для языка спецификаций.Я хотел бы предоставить пользователям плагина конкретную задачу.Задача может быть доступна с помощью tasks.json.Есть ли способ добавить задачи в tasks.json пользователя, который использует это расширение?

1 Ответ

0 голосов
/ 02 мая 2019

Документация мне здесь тоже не помогла.Когда вы предоставляете задачи через расширение, существует TaskProvider API .В этом примере не очень подробно рассказывается о том, как создаются эти задачи, по сравнению с классическим подходом tasks.json.

В вашем package.json вам нужно определить типы задач, которые вносит это расширение.Это не имеет ничего общего с type в tasks.json.Это скорее строка произвольной формы.Если вам нужны специальные средства сопоставления проблем, вам также необходимо определить тему здесь.

"contributes": {
    "taskDefinitions": [
        {
            "type": "mytask"
        }
    ],
    "problemMatchers": [
        {
            "name": "mywarnings",
            "base": "$gcc",
            "fileLocation": [
                "relative",
                "/"
            ]
        }
    ]
},

В extension.ts вам необходимо указать задачи.Скажем, у нас есть массив vscode.Task в tasks, который вы можете сделать:

vscode.tasks.registerTaskProvider('mytask', {
    provideTasks: () => {
        return tasks;
    },
    resolveTask(_task: vscode.Task): vscode.Task | undefined {
        // as far as I can see from the documentation this just needs to return undefined.
        return undefined;
    }
});

Если вы хотите создать задачу оболочки, вам нужно следующее:

new vscode.Task (
    {type: 'shell'}, // this is the same type as in tasks.json
    ws, // The workspace folder
    'name', // how you name the task
    'MyTask', // Shows up as MyTask: name 
    new vscode.ShellExecution(command),
    ["mywarnings"] // list of problem matchers (can use $gcc or other pre-built matchers, or the ones defined in package.json)
);

Я надеюсьэто помогает.Большая проблема, которую я вижу, - это перегрузка различных имен (например, типа), а также то, что формат файла tasks.json полностью отличается от способа создания задач с помощью API TaskProvider.

...