diff --git a/src/vs/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts b/src/vs/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts index 191204144ef34a95f23ba542d1535a0b64bdbdad..4f3218fda3712056f065d93844893c1f503cd641 100644 --- a/src/vs/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts +++ b/src/vs/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts @@ -152,14 +152,36 @@ const taskType: IJSONSchema = { const command: IJSONSchema = { oneOf: [ { - type: 'string', + oneOf: [ + { + type: 'string' + }, + { + type: 'array', + items: { + type: 'string' + }, + description: nls.localize('JsonSchema.commandArray', 'The shell command to be executed. Array items will be joined using a space character') + } + ] }, { type: 'object', required: ['value', 'quoting'], properties: { value: { - type: 'string', + oneOf: [ + { + type: 'string' + }, + { + type: 'array', + items: { + type: 'string' + }, + description: nls.localize('JsonSchema.commandArray', 'The shell command to be executed. Array items will be joined using a space character') + } + ], description: nls.localize('JsonSchema.command.quotedString.value', 'The actual command value') }, quoting: { diff --git a/src/vs/workbench/parts/tasks/node/taskConfiguration.ts b/src/vs/workbench/parts/tasks/node/taskConfiguration.ts index 1e7e48d3ad0fbf8943d9389725d01db83a844ded..70046911938f3b6034996f292cc7ef5f1b6d5c4e 100644 --- a/src/vs/workbench/parts/tasks/node/taskConfiguration.ts +++ b/src/vs/workbench/parts/tasks/node/taskConfiguration.ts @@ -182,14 +182,20 @@ export interface LegacyCommandProperties { isShellCommand?: boolean | ShellConfiguration; } -export type CommandString = string | { value: string, quoting: 'escape' | 'strong' | 'weak' }; +export type CommandString = string | string[] | { value: string | string[], quoting: 'escape' | 'strong' | 'weak' }; export namespace CommandString { export function value(value: CommandString): string { if (Types.isString(value)) { return value; + } else if (Types.isStringArray(value)) { + return value.join(' '); } else { - return value.value; + if (Types.isString(value.value)) { + return value.value; + } else { + return value.value.join(' '); + } } } } @@ -787,14 +793,20 @@ namespace CommandConfiguration { } if (Types.isString(value)) { return value; + } else if (Types.isStringArray(value)) { + return value.join(' '); + } else { + let quoting = Tasks.ShellQuoting.from(value.quoting); + let result = Types.isString(value.value) ? value.value : Types.isStringArray(value.value) ? value.value.join(' ') : undefined; + if (result) { + return { + value: result, + quoting: quoting + }; + } else { + return undefined; + } } - if (Types.isString(value.value)) { - return { - value: value.value, - quoting: Tasks.ShellQuoting.from(value.quoting) - }; - } - return undefined; } }