From fc3083ddf83377840f8dd6c9e88b43ffb8f72de1 Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Tue, 13 Nov 2018 10:20:22 +0100 Subject: [PATCH] tasks.json should use deprecation message for env. config. and command. (#62787) Fixes #21340 --- src/vs/workbench/parts/debug/node/debugger.ts | 5 ++--- .../parts/tasks/electron-browser/jsonSchema_v2.ts | 14 +++++++++++++- .../common/configurationResolverUtils.ts | 12 ++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/vs/workbench/services/configurationResolver/common/configurationResolverUtils.ts diff --git a/src/vs/workbench/parts/debug/node/debugger.ts b/src/vs/workbench/parts/debug/node/debugger.ts index 77e3f7b49f6..dd4486b9b32 100644 --- a/src/vs/workbench/parts/debug/node/debugger.ts +++ b/src/vs/workbench/parts/debug/node/debugger.ts @@ -17,6 +17,7 @@ import { ICommandService } from 'vs/platform/commands/common/commands'; import { IOutputService } from 'vs/workbench/parts/output/common/output'; import { ExecutableDebugAdapter, SocketDebugAdapter } from 'vs/workbench/parts/debug/node/debugAdapter'; import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; +import * as ConfigurationResolverUtils from 'vs/workbench/services/configurationResolver/common/configurationResolverUtils'; import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { memoize } from 'vs/base/common/decorators'; @@ -291,9 +292,7 @@ export class Debugger implements IDebugger { }; Object.keys(attributes.properties).forEach(name => { // Use schema allOf property to get independent error reporting #21113 - attributes.properties[name].pattern = attributes.properties[name].pattern || '^(?!.*\\$\\{(env|config|command)\\.)'; - attributes.properties[name].patternErrorMessage = attributes.properties[name].patternErrorMessage || - nls.localize('deprecatedVariables', "'env.', 'config.' and 'command.' are deprecated, use 'env:', 'config:' and 'command:' instead."); + ConfigurationResolverUtils.applyDeprecatedVariableMessage(attributes.properties[name]); }); return attributes; 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 bef22d20af1..8759d4367ae 100644 --- a/src/vs/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts +++ b/src/vs/workbench/parts/tasks/electron-browser/jsonSchema_v2.ts @@ -5,12 +5,13 @@ import * as nls from 'vs/nls'; import * as Objects from 'vs/base/common/objects'; -import { IJSONSchema } from 'vs/base/common/jsonSchema'; +import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema'; import commonSchema from './jsonSchemaCommon'; import { ProblemMatcherRegistry } from 'vs/workbench/parts/tasks/common/problemMatcher'; import { TaskDefinitionRegistry } from '../common/taskDefinitionRegistry'; +import * as ConfigurationResolverUtils from 'vs/workbench/services/configurationResolver/common/configurationResolverUtils'; function fixReferences(literal: any) { if (Array.isArray(literal)) { @@ -458,10 +459,21 @@ const schema: IJSONSchema = { schema.definitions = definitions; +function deprecatedVariableMessage(schemaMap: IJSONSchemaMap, property: string) { + if (schemaMap[property].properties) { + Object.keys(schemaMap[property].properties).forEach(name => { + deprecatedVariableMessage(schemaMap[property].properties, name); + }); + } else { + ConfigurationResolverUtils.applyDeprecatedVariableMessage(schemaMap[property]); + } +} + Object.getOwnPropertyNames(definitions).forEach(key => { let newKey = key + '2'; definitions[newKey] = definitions[key]; delete definitions[key]; + deprecatedVariableMessage(definitions, newKey); }); fixReferences(schema); diff --git a/src/vs/workbench/services/configurationResolver/common/configurationResolverUtils.ts b/src/vs/workbench/services/configurationResolver/common/configurationResolverUtils.ts new file mode 100644 index 00000000000..cb0d1eeb3f0 --- /dev/null +++ b/src/vs/workbench/services/configurationResolver/common/configurationResolverUtils.ts @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as nls from 'vs/nls'; +import { IJSONSchema } from 'vs/base/common/jsonSchema'; + +export function applyDeprecatedVariableMessage(schema: IJSONSchema) { + schema.pattern = schema.pattern || '^(?!.*\\$\\{(env|config|command)\\.)'; + schema.patternErrorMessage = schema.patternErrorMessage || + nls.localize('deprecatedVariables', "'env.', 'config.' and 'command.' are deprecated, use 'env:', 'config:' and 'command:' instead."); +} \ No newline at end of file