为vscode扩展名的用户向task.json添加任务

时间:2018-10-18 06:23:07

标签: visual-studio-code vscode-extensions

我正在为规范语言编写一个vscode扩展。我想为插件的用户提供特定的任务。可以使用task.json使任务可用。 有没有一种方法可以将任务添加到使用该扩展名的用户的task.json中?

1 个答案:

答案 0 :(得分:0)

文档在这里也没有帮助我。通过扩展名提供任务时,会出现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;
    }
});

如果要创建Shell任务,则需要以下内容:

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)
);

我希望这会有所帮助。我看到的最大问题是各种名称(如类型)的重载,而task.json中的格式与使用TaskProvider API构建任务的方式完全不同。