Cleaner API to query tasks

This commit is contained in:
Dirk Baeumer
2018-03-16 11:48:23 +01:00
parent 52086ecf32
commit fc7051a897
7 changed files with 92 additions and 36 deletions

View File

@@ -6,6 +6,7 @@
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import * as Objects from 'vs/base/common/objects';
import { IDisposable } from 'vs/base/common/lifecycle';
import * as vscode from 'vscode';
import * as typeConverters from 'vs/workbench/api/node/extHostTypeConverters';
@@ -18,18 +19,21 @@ import { IWorkspaceSymbolProvider } from 'vs/workbench/parts/search/common/searc
import { Position as EditorPosition, ITextEditorOptions } from 'vs/platform/editor/common/editor';
import { CustomCodeAction } from 'vs/workbench/api/node/extHostLanguageFeatures';
import * as TaskSystem from 'vs/workbench/parts/tasks/common/tasks';
import { ExtHostWorkspace } from './extHostWorkspace';
export class ExtHostApiCommands {
static register(commands: ExtHostCommands) {
return new ExtHostApiCommands(commands).registerCommands();
static register(commands: ExtHostCommands, workspace: ExtHostWorkspace) {
return new ExtHostApiCommands(commands, workspace).registerCommands();
}
private _commands: ExtHostCommands;
private _workspace: ExtHostWorkspace;
private _disposables: IDisposable[] = [];
private constructor(commands: ExtHostCommands) {
private constructor(commands: ExtHostCommands, workspace: ExtHostWorkspace) {
this._commands = commands;
this._workspace = workspace;
}
registerCommands() {
@@ -472,16 +476,25 @@ export class ExtHostApiCommands {
.then(tryMapWith(typeConverters.DocumentLink.to));
}
private _executeTaskProvider(): Thenable<vscode.TaskHandle[]> {
return this._commands.executeCommand<TaskSystem.TaskHandleTransfer[]>('_executeTaskProvider').then<vscode.TaskHandle[]>((values) => {
private _executeTaskProvider(): Thenable<vscode.TaskItem[]> {
return this._commands.executeCommand<TaskSystem.TaskItemTransfer[]>('_executeTaskProvider').then<vscode.TaskItem[]>((values) => {
let workspace = this._workspace;
return values.map(handle => {
return {
id: handle.id,
label: handle.label,
workspaceFolder: {
name: handle.workspaceFolder.name,
index: handle.workspaceFolder.index,
uri: URI.revive(handle.workspaceFolder.uri)
let definition: vscode.TaskDefinition = Objects.assign(Object.create(null), handle.definition);
delete definition._key;
let uri = URI.revive(handle.workspaceFolderUri);
return new class {
get id(): string {
return handle.id;
}
get label(): string {
return handle.label;
}
get definition(): vscode.TaskDefinition {
return definition;
}
get workspaceFolder(): vscode.WorkspaceFolder {
return uri ? workspace.resolveWorkspaceFolder(uri) : undefined;
}
};
});