diff --git a/src/vs/platform/node/product.ts b/src/vs/platform/node/product.ts index aec3cd8a91a01eb9904fdf492494e1a1a9bf2f64..68802e24d9b91aba528759a6e16de6a693a4901c 100644 --- a/src/vs/platform/node/product.ts +++ b/src/vs/platform/node/product.ts @@ -31,6 +31,7 @@ export interface IProductConfiguration { exeBasedExtensionTips: { [id: string]: any; }; extensionKeywords: { [extension: string]: string[]; }; extensionAllowedBadgeProviders: string[]; + extensionAllowedProposedApi: string[]; keymapExtensionTips: string[]; crashReporter: { companyName: string; diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 2fbe3f0ec196facb6f332437a89e1b2f74dd1daf..22201ab41be5c1d4639f45553d6eab0925b79499 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -58,6 +58,7 @@ import { ExtHostDecorations } from 'vs/workbench/api/node/extHostDecorations'; import { toGlobPattern, toLanguageSelector } from 'vs/workbench/api/node/extHostTypeConverters'; import { ExtensionActivatedByAPI } from 'vs/workbench/api/node/extHostExtensionActivator'; import { ILogService } from 'vs/platform/log/common/log'; +import { isFalsyOrEmpty } from 'vs/base/common/arrays'; export interface IExtensionApiFactory { (extension: IExtensionDescription): typeof vscode; @@ -128,8 +129,14 @@ export function createApiFactory( const EXTENSION_ID = extension.id; - if (extension.enableProposedApi && !extension.isBuiltin) { + if (!isFalsyOrEmpty(product.extensionAllowedProposedApi) + && product.extensionAllowedProposedApi.indexOf(extension.id) >= 0 + ) { + // fast lane -> proposed api is available to all extensions + // that are listed in product.json-files + extension.enableProposedApi = true; + } else if (extension.enableProposedApi && !extension.isBuiltin) { if ( !initData.environment.enableProposedApiForAll && initData.environment.enableProposedApiFor.indexOf(extension.id) < 0