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 : [], });