为 vscode 扩展的用户将任务添加到tasks.json

Han*_*Han 5 visual-studio-code vscode-extensions

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

Cod*_*key 8

该文档在这里也没有帮助我。当您通过扩展提供任务时,就会有TaskProvider API。不过,与经典方法相比,该示例并未详细介绍如何创建这些任务tasks.json

在 package.json 中,您需要定义此扩展贡献的任务类型。type这与in无关tasks.json。它是一个自由格式的字符串。如果您需要自定义问题匹配器,您还需要在此处定义主题。

"contributes": {
    "taskDefinitions": [
        {
            "type": "mytask"
        }
    ],
    "problemMatchers": [
        {
            "name": "mywarnings",
            "base": "$gcc",
            "fileLocation": [
                "relative",
                "/"
            ]
        }
    ]
},
Run Code Online (Sandbox Code Playgroud)

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;
    }
});
Run Code Online (Sandbox Code Playgroud)

如果您想创建 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)
);
Run Code Online (Sandbox Code Playgroud)

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