提交 4e0af001 编写于 作者: A Alex Ross

More tasks workspace file changes

上级 f367d0fe
...@@ -30,7 +30,7 @@ import { IPanelService } from 'vs/workbench/services/panel/common/panelService'; ...@@ -30,7 +30,7 @@ import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder, IWorkspace } from 'vs/platform/workspace/common/workspace';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { parse, getFirstFrame } from 'vs/base/common/console'; import { parse, getFirstFrame } from 'vs/base/common/console';
import { TaskEvent, TaskEventKind, TaskIdentifier } from 'vs/workbench/contrib/tasks/common/tasks'; import { TaskEvent, TaskEventKind, TaskIdentifier } from 'vs/workbench/contrib/tasks/common/tasks';
...@@ -750,7 +750,7 @@ export class DebugService implements IDebugService { ...@@ -750,7 +750,7 @@ export class DebugService implements IDebugService {
} }
} }
private async runTask(root: IWorkspaceFolder | undefined, taskId: string | TaskIdentifier | undefined): Promise<ITaskSummary | null> { private async runTask(root: IWorkspace | IWorkspaceFolder | undefined, taskId: string | TaskIdentifier | undefined): Promise<ITaskSummary | null> {
if (!taskId) { if (!taskId) {
return Promise.resolve(null); return Promise.resolve(null);
} }
......
...@@ -128,6 +128,10 @@ interface TaskCustomizationTelemetryEvent { ...@@ -128,6 +128,10 @@ interface TaskCustomizationTelemetryEvent {
properties: string[]; properties: string[];
} }
function isWorkspaceFolder(folder: IWorkspace | IWorkspaceFolder): folder is IWorkspaceFolder {
return 'uri' in folder;
}
class TaskMap { class TaskMap {
private _store: Map<string, Task[]> = new Map(); private _store: Map<string, Task[]> = new Map();
...@@ -135,20 +139,33 @@ class TaskMap { ...@@ -135,20 +139,33 @@ class TaskMap {
this._store.forEach(callback); this._store.forEach(callback);
} }
public get(workspaceFolder: IWorkspaceFolder | string): Task[] { private getKey(workspaceFolder: IWorkspace | IWorkspaceFolder | string): string {
let result: Task[] | undefined = Types.isString(workspaceFolder) ? this._store.get(workspaceFolder) : this._store.get(workspaceFolder.uri.toString()); let key: string | undefined;
if (Types.isString(workspaceFolder)) {
key = workspaceFolder;
} else {
const uri: URI | null | undefined = isWorkspaceFolder(workspaceFolder) ? workspaceFolder.uri : workspaceFolder.configuration;
key = uri ? uri.toString() : '';
}
return key;
}
public get(workspaceFolder: IWorkspace | IWorkspaceFolder | string): Task[] {
const key = this.getKey(workspaceFolder);
let result: Task[] | undefined = this._store.get(key);
if (!result) { if (!result) {
result = []; result = [];
Types.isString(workspaceFolder) ? this._store.set(workspaceFolder, result) : this._store.set(workspaceFolder.uri.toString(), result); this._store.set(key, result);
} }
return result; return result;
} }
public add(workspaceFolder: IWorkspaceFolder | string, ...task: Task[]): void { public add(workspaceFolder: IWorkspace | IWorkspaceFolder | string, ...task: Task[]): void {
let values = Types.isString(workspaceFolder) ? this._store.get(workspaceFolder) : this._store.get(workspaceFolder.uri.toString()); const key = this.getKey(workspaceFolder);
let values = this._store.get(key);
if (!values) { if (!values) {
values = []; values = [];
Types.isString(workspaceFolder) ? this._store.set(workspaceFolder, values) : this._store.set(workspaceFolder.uri.toString(), values); this._store.set(key, values);
} }
values.push(...task); values.push(...task);
} }
...@@ -500,8 +517,8 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer ...@@ -500,8 +517,8 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
return this._taskSystem.customExecutionComplete(task, result); return this._taskSystem.customExecutionComplete(task, result);
} }
public getTask(folder: IWorkspaceFolder | string, identifier: string | TaskIdentifier, compareId: boolean = false): Promise<Task | undefined> { public getTask(folder: IWorkspace | IWorkspaceFolder | string, identifier: string | TaskIdentifier, compareId: boolean = false): Promise<Task | undefined> {
const name = Types.isString(folder) ? folder : folder.name; const name = Types.isString(folder) ? folder : isWorkspaceFolder(folder) ? folder.name : folder.configuration ? resources.basename(folder.configuration) : undefined;
if (this.ignoredWorkspaceFolders.some(ignored => ignored.name === name)) { if (this.ignoredWorkspaceFolders.some(ignored => ignored.name === name)) {
return Promise.reject(new Error(nls.localize('TaskServer.folderIgnored', 'The folder {0} is ignored since it uses task version 0.1.0', name))); return Promise.reject(new Error(nls.localize('TaskServer.folderIgnored', 'The folder {0} is ignored since it uses task version 0.1.0', name)));
} }
......
...@@ -9,7 +9,7 @@ import { LinkedMap } from 'vs/base/common/map'; ...@@ -9,7 +9,7 @@ import { LinkedMap } from 'vs/base/common/map';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IDisposable } from 'vs/base/common/lifecycle'; import { IDisposable } from 'vs/base/common/lifecycle';
import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceFolder, IWorkspace } from 'vs/platform/workspace/common/workspace';
import { Task, ContributedTask, CustomTask, TaskSet, TaskSorter, TaskEvent, TaskIdentifier, ConfiguringTask, TaskRunSource } from 'vs/workbench/contrib/tasks/common/tasks'; import { Task, ContributedTask, CustomTask, TaskSet, TaskSorter, TaskEvent, TaskIdentifier, ConfiguringTask, TaskRunSource } from 'vs/workbench/contrib/tasks/common/tasks';
import { ITaskSummary, TaskTerminateResponse, TaskSystemInfo } from 'vs/workbench/contrib/tasks/common/taskSystem'; import { ITaskSummary, TaskTerminateResponse, TaskSystemInfo } from 'vs/workbench/contrib/tasks/common/taskSystem';
import { IStringDictionary } from 'vs/base/common/collections'; import { IStringDictionary } from 'vs/base/common/collections';
...@@ -71,7 +71,7 @@ export interface ITaskService { ...@@ -71,7 +71,7 @@ export interface ITaskService {
/** /**
* @param alias The task's name, label or defined identifier. * @param alias The task's name, label or defined identifier.
*/ */
getTask(workspaceFolder: IWorkspaceFolder | string, alias: string | TaskIdentifier, compareId?: boolean): Promise<Task | undefined>; getTask(workspaceFolder: IWorkspace | IWorkspaceFolder | string, alias: string | TaskIdentifier, compareId?: boolean): Promise<Task | undefined>;
getTasksForGroup(group: string): Promise<Task[]>; getTasksForGroup(group: string): Promise<Task[]>;
getRecentlyUsedTasks(): LinkedMap<string, string>; getRecentlyUsedTasks(): LinkedMap<string, string>;
createSorter(): TaskSorter; createSorter(): TaskSorter;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册