From 6b89247875e7c8d0a91a4f28000f44da5411cd8d Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 13 Dec 2018 14:29:20 -0800 Subject: [PATCH] Allow extension contributed TS plugins to be loaded for workspace versions of TS Fixes #65031 Adds a `enableForWorkspaceTypeScriptVersions` flag (default false) to the plugins contributions that allows a contributed plugin to be loaded for workspace versions of ts --- .../schemas/package.schema.json | 5 +++++ .../typescript-language-features/src/tsServer/server.ts | 7 +++++-- .../typescript-language-features/src/utils/plugins.ts | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/extensions/typescript-language-features/schemas/package.schema.json b/extensions/typescript-language-features/schemas/package.schema.json index 3e77cb4cc89..c26af63c93b 100644 --- a/extensions/typescript-language-features/schemas/package.schema.json +++ b/extensions/typescript-language-features/schemas/package.schema.json @@ -16,6 +16,11 @@ "name": { "type": "string", "description": "Name of the plugin as listed in the package.json." + }, + "enableForWorkspaceTypeScriptVersions": { + "type": "boolean", + "default": false, + "description": "Should the plugin be loaded when using workspace versions of TypeScript?" } } } diff --git a/extensions/typescript-language-features/src/tsServer/server.ts b/extensions/typescript-language-features/src/tsServer/server.ts index cde2df2c2b7..e3c1dbff0af 100644 --- a/extensions/typescript-language-features/src/tsServer/server.ts +++ b/extensions/typescript-language-features/src/tsServer/server.ts @@ -113,8 +113,11 @@ export class TypeScriptServerSpawner { if (pluginManager.plugins.length) { args.push('--globalPlugins', pluginManager.plugins.map(x => x.name).join(',')); - if (currentVersion.path === this._versionProvider.defaultVersion.path) { - pluginPaths.push(...pluginManager.plugins.map(x => x.path)); + const isUsingBundledTypeScriptVersion = currentVersion.path === this._versionProvider.defaultVersion.path; + for (const plugin of pluginManager.plugins) { + if (isUsingBundledTypeScriptVersion || plugin.enableForWorkspaceTypeScriptVersions) { + pluginPaths.push(plugin.path); + } } } diff --git a/extensions/typescript-language-features/src/utils/plugins.ts b/extensions/typescript-language-features/src/utils/plugins.ts index 9b398d96393..3b0cf217b92 100644 --- a/extensions/typescript-language-features/src/utils/plugins.ts +++ b/extensions/typescript-language-features/src/utils/plugins.ts @@ -10,6 +10,7 @@ import { memoize } from './memoize'; export interface TypeScriptServerPlugin { readonly path: string; readonly name: string; + readonly enableForWorkspaceTypeScriptVersions: boolean; readonly languages: ReadonlyArray; } @@ -25,6 +26,7 @@ export class PluginManager extends Disposable { for (const plugin of pack.contributes.typescriptServerPlugins) { plugins.push({ name: plugin.name, + enableForWorkspaceTypeScriptVersions: !!plugin.enableForWorkspaceTypeScriptVersions, path: extension.extensionPath, languages: Array.isArray(plugin.languages) ? plugin.languages : [], });