Документация мне здесь тоже не помогла.Когда вы предоставляете задачи через расширение, существует 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.