mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 21:55:38 +00:00
First cut of #45664: Add API to query and execute tasks
This commit is contained in:
parent
055ac07ca7
commit
a4cf2abe7e
27
src/vs/vscode.proposed.d.ts
vendored
27
src/vs/vscode.proposed.d.ts
vendored
|
@ -739,4 +739,31 @@ declare module 'vscode' {
|
|||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region Tasks
|
||||
|
||||
/**
|
||||
* A task handle represents a task in the system. It can be used to
|
||||
* present task and to execute them.
|
||||
*/
|
||||
export interface TaskHandle {
|
||||
|
||||
/**
|
||||
* A unique ID.
|
||||
*/
|
||||
id: string;
|
||||
|
||||
/**
|
||||
* A human readable label of the task.
|
||||
*/
|
||||
label: string;
|
||||
|
||||
/**
|
||||
* The workspace folder the task belongs to. Is undefined
|
||||
* to tasks that aren't scoped to a workspace folder.
|
||||
*/
|
||||
workspaceFolder: WorkspaceFolder | undefined;
|
||||
}
|
||||
|
||||
//#endregion
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import { ExtHostCommands } from 'vs/workbench/api/node/extHostCommands';
|
|||
import { IWorkspaceSymbolProvider } from 'vs/workbench/parts/search/common/search';
|
||||
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';
|
||||
|
||||
export class ExtHostApiCommands {
|
||||
|
||||
|
@ -169,6 +170,11 @@ export class ExtHostApiCommands {
|
|||
],
|
||||
returns: 'A promise that resolves to an array of DocumentLink-instances.'
|
||||
});
|
||||
this._register('vscode.executeTaskProvider', this._executeTaskProvider, {
|
||||
description: 'Execute task provider',
|
||||
args: [],
|
||||
returns: 'An array of task handles'
|
||||
});
|
||||
|
||||
this._register('vscode.previewHtml', (uri: URI, position?: vscode.ViewColumn, label?: string, options?: any) => {
|
||||
return this._commands.executeCommand('_workbench.previewHtml',
|
||||
|
@ -465,6 +471,22 @@ export class ExtHostApiCommands {
|
|||
return this._commands.executeCommand<modes.ILink[]>('_executeLinkProvider', resource)
|
||||
.then(tryMapWith(typeConverters.DocumentLink.to));
|
||||
}
|
||||
|
||||
private _executeTaskProvider(): Thenable<vscode.TaskHandle[]> {
|
||||
return this._commands.executeCommand<TaskSystem.TaskHandleTransfer[]>('_executeTaskProvider').then<vscode.TaskHandle[]>((values) => {
|
||||
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)
|
||||
}
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function tryMapWith<T, R>(f: (x: T) => R) {
|
||||
|
|
|
@ -11,7 +11,7 @@ import * as Objects from 'vs/base/common/objects';
|
|||
|
||||
import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { ProblemMatcher } from 'vs/workbench/parts/tasks/common/problemMatcher';
|
||||
import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
|
||||
import { IWorkspaceFolder, IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace';
|
||||
|
||||
|
||||
export enum ShellQuoting {
|
||||
|
@ -594,6 +594,11 @@ export namespace Task {
|
|||
}
|
||||
}
|
||||
|
||||
export interface TaskHandleTransfer {
|
||||
id: string;
|
||||
label: string;
|
||||
workspaceFolder: IWorkspaceFolderData;
|
||||
}
|
||||
|
||||
export enum ExecutionEngine {
|
||||
Process = 1,
|
||||
|
|
|
@ -62,7 +62,7 @@ import Constants from 'vs/workbench/parts/markers/electron-browser/constants';
|
|||
import { IPartService } from 'vs/workbench/services/part/common/partService';
|
||||
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
|
||||
import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
|
||||
import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder, IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace';
|
||||
|
||||
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
import { IOutputService, IOutputChannelRegistry, Extensions as OutputExt, IOutputChannel } from 'vs/workbench/parts/output/common/output';
|
||||
|
@ -71,7 +71,11 @@ import { Scope, IActionBarRegistry, Extensions as ActionBarExtensions } from 'vs
|
|||
import { ITerminalService } from 'vs/workbench/parts/terminal/common/terminal';
|
||||
|
||||
import { ITaskSystem, ITaskResolver, ITaskSummary, TaskExecuteKind, TaskError, TaskErrors, TaskTerminateResponse } from 'vs/workbench/parts/tasks/common/taskSystem';
|
||||
import { Task, CustomTask, ConfiguringTask, ContributedTask, InMemoryTask, TaskEvent, TaskEventKind, TaskSet, TaskGroup, GroupType, ExecutionEngine, JsonSchemaVersion, TaskSourceKind, TaskIdentifier, TaskSorter } from 'vs/workbench/parts/tasks/common/tasks';
|
||||
import {
|
||||
Task, CustomTask, ConfiguringTask, ContributedTask, InMemoryTask, TaskEvent,
|
||||
TaskEventKind, TaskSet, TaskGroup, GroupType, ExecutionEngine, JsonSchemaVersion, TaskSourceKind,
|
||||
TaskIdentifier, TaskSorter, TaskHandleTransfer
|
||||
} from 'vs/workbench/parts/tasks/common/tasks';
|
||||
import { ITaskService, ITaskProvider, RunOptions, CustomizationProperties } from 'vs/workbench/parts/tasks/common/taskService';
|
||||
import { getTemplates as getTaskTemplates } from 'vs/workbench/parts/tasks/common/taskTemplates';
|
||||
|
||||
|
@ -575,6 +579,27 @@ class TaskService implements ITaskService {
|
|||
CommandsRegistry.registerCommand('workbench.action.tasks.showTasks', () => {
|
||||
this.runShowTasks();
|
||||
});
|
||||
|
||||
CommandsRegistry.registerCommand('_executeTaskProvider', (accessor, args) => {
|
||||
return this.tasks().then((tasks) => {
|
||||
let result: TaskHandleTransfer[] = [];
|
||||
for (let task of tasks) {
|
||||
let folder = Task.getWorkspaceFolder(task);
|
||||
let folderData: IWorkspaceFolderData = folder ? {
|
||||
name: folder.name,
|
||||
uri: folder.uri,
|
||||
index: folder.index
|
||||
} : undefined;
|
||||
let handle: TaskHandleTransfer = {
|
||||
id: task._id,
|
||||
label: task._label,
|
||||
workspaceFolder: folderData
|
||||
};
|
||||
result.push(handle);
|
||||
}
|
||||
return result;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private get workspaceFolders(): IWorkspaceFolder[] {
|
||||
|
|
Loading…
Reference in a new issue