扩展 API - 任务提供者 - 构建任务示例

sen*_*y07 7 visual-studio-code vscode-extensions vscode-tasks

我为我使用的编程语言构建了一个扩展,并创建了热键快捷方式,用于使用当前打开的文档的 URI 调用编译器可执行文件。我想在我的扩展中将其转换为构建任务。我做了一个tasks.json带有构建任务文件,文件可以工作并捕获错误等,但只有将它放在当前工作区中才能工作。

绝对没有在任何地方添加构建任务的例子,任务提供者API 文档是专门针对 Ruby Rakefiles 或其他东西的。我只想使用问题匹配器制作一个 shell 可执行构建任务。谁能给我举个例子?

Gam*_*a11 12

这是一个TaskProvider简单的echo "Hello World"在 shell 中运行的最小实现:

'use strict';
import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    var type = "exampleProvider";
    vscode.tasks.registerTaskProvider(type, {
        provideTasks(token?: vscode.CancellationToken) {
            var execution = new vscode.ShellExecution("echo \"Hello World\"");
            var problemMatchers = ["$myProblemMatcher"];
            return [
                new vscode.Task({type: type}, vscode.TaskScope.Workspace,
                    "Build", "myExtension", execution, problemMatchers)
            ];
        },
        resolveTask(task: vscode.Task, token?: vscode.CancellationToken) {
            return task;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

任务定义(为 的第一个参数new Task())需要通过贡献package.json如果需要可以有额外的属性

"contributes": {
    "taskDefinitions": [
        {
            "type": "exampleProvider"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

Tasks: Run Task命令被执行时,带有任务提供者的扩展应该被激活:

"activationEvents": [
    "onCommand:workbench.action.tasks.runTask"
]
Run Code Online (Sandbox Code Playgroud)

最后,您要引用的问题匹配器需要在package.json'scontributes.problemMatchers部分提供。