Skip to content

Commit 86460b3

Browse files
committed
Move tasks and taskConfiguration out of node
1 parent b5e512f commit 86460b3

7 files changed

Lines changed: 86 additions & 102 deletions

File tree

src/vs/workbench/api/electron-browser/mainThreadTask.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,14 @@ import { IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspac
1717

1818
import {
1919
ContributedTask, KeyedTaskIdentifier, TaskExecution, Task, TaskEvent, TaskEventKind,
20-
PresentationOptions, CommandOptions, CommandConfiguration, RuntimeType, CustomTask, TaskScope, TaskSource, TaskSourceKind, ExtensionTaskSource, RunOptions, TaskSet
20+
PresentationOptions, CommandOptions, CommandConfiguration, RuntimeType, CustomTask, TaskScope, TaskSource,
21+
TaskSourceKind, ExtensionTaskSource, RunOptions, TaskSet, TaskDefinition
2122
} from 'vs/workbench/contrib/tasks/common/tasks';
2223

2324

2425
import { ResolveSet, ResolvedVariables } from 'vs/workbench/contrib/tasks/common/taskSystem';
2526
import { ITaskService, TaskFilter, ITaskProvider } from 'vs/workbench/contrib/tasks/common/taskService';
2627

27-
import { TaskDefinition } from 'vs/workbench/contrib/tasks/node/tasks';
28-
2928
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
3029
import { ExtHostContext, MainThreadTaskShape, ExtHostTaskShape, MainContext, IExtHostContext } from 'vs/workbench/api/common/extHost.protocol';
3130
import {

src/vs/workbench/contrib/tasks/node/taskConfiguration.ts renamed to src/vs/workbench/contrib/tasks/common/taskConfiguration.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,8 @@ import {
1818
} from 'vs/workbench/contrib/tasks/common/problemMatcher';
1919

2020
import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
21-
22-
import * as Tasks from '../common/tasks';
23-
import { TaskDefinitionRegistry } from '../common/taskDefinitionRegistry';
24-
25-
import { TaskDefinition } from 'vs/workbench/contrib/tasks/node/tasks';
21+
import * as Tasks from './tasks';
22+
import { TaskDefinitionRegistry } from './taskDefinitionRegistry';
2623
import { ConfiguredInput } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
2724

2825
export const enum ShellQuoting {
@@ -1200,7 +1197,7 @@ namespace TaskDependency {
12001197
if (Types.isString(external)) {
12011198
return { workspaceFolder: context.workspaceFolder, task: external };
12021199
} else if (TaskIdentifier.is(external)) {
1203-
return { workspaceFolder: context.workspaceFolder, task: TaskDefinition.createTaskIdentifier(external as Tasks.TaskIdentifier, context.problemReporter) };
1200+
return { workspaceFolder: context.workspaceFolder, task: Tasks.TaskDefinition.createTaskIdentifier(external as Tasks.TaskIdentifier, context.problemReporter) };
12041201
} else {
12051202
return undefined;
12061203
}
@@ -1332,7 +1329,7 @@ namespace ConfiguringTask {
13321329
));
13331330
return undefined;
13341331
}
1335-
let taskIdentifier: Tasks.KeyedTaskIdentifier | undefined = TaskDefinition.createTaskIdentifier(identifier, context.problemReporter);
1332+
let taskIdentifier: Tasks.KeyedTaskIdentifier | undefined = Tasks.TaskDefinition.createTaskIdentifier(identifier, context.problemReporter);
13361333
if (taskIdentifier === undefined) {
13371334
context.problemReporter.error(nls.localize(
13381335
'ConfigurationParser.incorrectType',

src/vs/workbench/contrib/tasks/common/tasks.ts

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import * as nls from 'vs/nls';
67
import * as Types from 'vs/base/common/types';
78
import { IJSONSchemaMap } from 'vs/base/common/jsonSchema';
89
import * as Objects from 'vs/base/common/objects';
@@ -12,6 +13,7 @@ import { ProblemMatcher } from 'vs/workbench/contrib/tasks/common/problemMatcher
1213
import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
1314
import { RawContextKey } from 'vs/platform/contextkey/common/contextkey';
1415
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
16+
import { TaskDefinitionRegistry } from 'vs/workbench/contrib/tasks/common/taskDefinitionRegistry';
1517

1618
export const TASK_RUNNING_STATE = new RawContextKey<boolean>('taskRunning', false);
1719

@@ -921,4 +923,76 @@ export namespace TaskEvent {
921923
return Object.freeze({ kind: TaskEventKind.Changed });
922924
}
923925
}
924-
}
926+
}
927+
928+
export namespace KeyedTaskIdentifier {
929+
function sortedStringify(literal: any): string {
930+
const keys = Object.keys(literal).sort();
931+
let result: string = '';
932+
for (let position in keys) {
933+
let stringified = literal[keys[position]];
934+
if (stringified instanceof Object) {
935+
stringified = sortedStringify(test);
936+
} else if (typeof stringified === 'string') {
937+
stringified = stringified.replace(/,/g, ',,');
938+
}
939+
result += keys[position] + ',' + stringified + ',';
940+
}
941+
return result;
942+
}
943+
export function create(value: TaskIdentifier): KeyedTaskIdentifier {
944+
const resultKey = sortedStringify(value);
945+
console.log(resultKey);
946+
return { _key: resultKey, type: value.taskType };
947+
}
948+
}
949+
950+
export namespace TaskDefinition {
951+
export function createTaskIdentifier(external: TaskIdentifier, reporter: { error(message: string): void; }): KeyedTaskIdentifier | undefined {
952+
let definition = TaskDefinitionRegistry.get(external.type);
953+
if (definition === undefined) {
954+
// We have no task definition so we can't sanitize the literal. Take it as is
955+
let copy = Objects.deepClone(external);
956+
delete copy._key;
957+
return KeyedTaskIdentifier.create(copy);
958+
}
959+
960+
let literal: { type: string;[name: string]: any } = Object.create(null);
961+
literal.type = definition.taskType;
962+
let required: Set<string> = new Set();
963+
definition.required.forEach(element => required.add(element));
964+
965+
let properties = definition.properties;
966+
for (let property of Object.keys(properties)) {
967+
let value = external[property];
968+
if (value !== undefined && value !== null) {
969+
literal[property] = value;
970+
} else if (required.has(property)) {
971+
let schema = properties[property];
972+
if (schema.default !== undefined) {
973+
literal[property] = Objects.deepClone(schema.default);
974+
} else {
975+
switch (schema.type) {
976+
case 'boolean':
977+
literal[property] = false;
978+
break;
979+
case 'number':
980+
case 'integer':
981+
literal[property] = 0;
982+
break;
983+
case 'string':
984+
literal[property] = '';
985+
break;
986+
default:
987+
reporter.error(nls.localize(
988+
'TaskDefinition.missingRequiredProperty',
989+
'Error: the task identifier \'{0}\' is missing the required property \'{1}\'. The task identifier will be ignored.', JSON.stringify(external, undefined, 0), property
990+
));
991+
return undefined;
992+
}
993+
}
994+
}
995+
}
996+
return KeyedTaskIdentifier.create(literal);
997+
}
998+
}

src/vs/workbench/contrib/tasks/electron-browser/task.contribution.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,13 @@ import { ITaskSystem, ITaskResolver, ITaskSummary, TaskExecuteKind, TaskError, T
7373
import {
7474
Task, CustomTask, ConfiguringTask, ContributedTask, InMemoryTask, TaskEvent,
7575
TaskEventKind, TaskSet, TaskGroup, GroupType, ExecutionEngine, JsonSchemaVersion, TaskSourceKind,
76-
TaskSorter, TaskIdentifier, KeyedTaskIdentifier, TASK_RUNNING_STATE, TaskRunSource
76+
TaskSorter, TaskIdentifier, KeyedTaskIdentifier, TASK_RUNNING_STATE, TaskRunSource,
77+
KeyedTaskIdentifier as NKeyedTaskIdentifier, TaskDefinition
7778
} from 'vs/workbench/contrib/tasks/common/tasks';
7879
import { ITaskService, ITaskProvider, ProblemMatcherRunOptions, CustomizationProperties, TaskFilter, WorkspaceFolderTaskResult } from 'vs/workbench/contrib/tasks/common/taskService';
7980
import { getTemplates as getTaskTemplates } from 'vs/workbench/contrib/tasks/common/taskTemplates';
8081

81-
import { KeyedTaskIdentifier as NKeyedTaskIdentifier, TaskDefinition } from 'vs/workbench/contrib/tasks/node/tasks';
82-
83-
import * as TaskConfig from '../node/taskConfiguration';
82+
import * as TaskConfig from '../common/taskConfiguration';
8483
import { ProcessTaskSystem } from 'vs/workbench/contrib/tasks/node/processTaskSystem';
8584
import { TerminalTaskSystem } from './terminalTaskSystem';
8685
import { ProcessRunnerDetector } from 'vs/workbench/contrib/tasks/node/processRunnerDetector';

src/vs/workbench/contrib/tasks/node/processRunnerDetector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { IFileService } from 'vs/platform/files/common/files';
1414
import { IWorkspaceContextService, IWorkspaceFolder, WorkbenchState } from 'vs/platform/workspace/common/workspace';
1515
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
1616
import * as Tasks from '../common/tasks';
17-
import * as TaskConfig from './taskConfiguration';
17+
import * as TaskConfig from '../common/taskConfiguration';
1818

1919
const build = 'build';
2020
const test = 'test';

src/vs/workbench/contrib/tasks/node/tasks.ts

Lines changed: 0 additions & 85 deletions
This file was deleted.

src/vs/workbench/contrib/tasks/test/electron-browser/configuration.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { ProblemMatcher, FileLocationKind, ProblemPattern, ApplyToKind } from 'v
1313
import { IWorkspaceFolder, WorkspaceFolder } from 'vs/platform/workspace/common/workspace';
1414

1515
import * as Tasks from 'vs/workbench/contrib/tasks/common/tasks';
16-
import { parse, ParseResult, IProblemReporter, ExternalTaskRunnerConfiguration, CustomTask } from 'vs/workbench/contrib/tasks/node/taskConfiguration';
16+
import { parse, ParseResult, IProblemReporter, ExternalTaskRunnerConfiguration, CustomTask } from 'vs/workbench/contrib/tasks/common/taskConfiguration';
1717

1818
const workspaceFolder: IWorkspaceFolder = new WorkspaceFolder({
1919
uri: URI.file('/workspace/folderOne'),

0 commit comments

Comments
 (0)