diff --git a/extensions/typescript-language-features/src/extension.browser.ts b/extensions/typescript-language-features/src/extension.browser.ts index f9da3836cc2..d9c22cdb1a7 100644 --- a/extensions/typescript-language-features/src/extension.browser.ts +++ b/extensions/typescript-language-features/src/extension.browser.ts @@ -55,7 +55,14 @@ export function activate( '/builtin-extension/typescript-language-features/dist/browser/typescript-web/tsserver.js', API.v400)); - const lazyClientHost = createLazyClientHost(context, false, pluginManager, commandManager, noopLogDirectoryProvider, noopRequestCancellerFactory, versionProvider, WorkerServerProcess, item => { + const lazyClientHost = createLazyClientHost(context, false, { + pluginManager, + commandManager, + logDirectoryProvider: noopLogDirectoryProvider, + cancellerFactory: noopRequestCancellerFactory, + versionProvider, + processFactory: WorkerServerProcess + }, item => { onCompletionAccepted.fire(item); }); diff --git a/extensions/typescript-language-features/src/extension.ts b/extensions/typescript-language-features/src/extension.ts index 9f38dda83ba..99e304b6758 100644 --- a/extensions/typescript-language-features/src/extension.ts +++ b/extensions/typescript-language-features/src/extension.ts @@ -35,7 +35,14 @@ export function activate( context.subscriptions.push(new LanguageConfigurationManager()); - const lazyClientHost = createLazyClientHost(context, onCaseInsenitiveFileSystem(), pluginManager, commandManager, logDirectoryProvider, nodeRequestCancellerFactory, versionProvider, ChildServerProcess, item => { + const lazyClientHost = createLazyClientHost(context, onCaseInsenitiveFileSystem(), { + pluginManager, + commandManager, + logDirectoryProvider, + cancellerFactory: nodeRequestCancellerFactory, + versionProvider, + processFactory: ChildServerProcess, + }, item => { onCompletionAccepted.fire(item); }); diff --git a/extensions/typescript-language-features/src/lazyClientHost.ts b/extensions/typescript-language-features/src/lazyClientHost.ts index b98816183c7..4fb37e643e1 100644 --- a/extensions/typescript-language-features/src/lazyClientHost.ts +++ b/extensions/typescript-language-features/src/lazyClientHost.ts @@ -20,12 +20,14 @@ import { PluginManager } from './utils/plugins'; export function createLazyClientHost( context: vscode.ExtensionContext, onCaseInsenitiveFileSystem: boolean, - pluginManager: PluginManager, - commandManager: CommandManager, - logDirectoryProvider: ILogDirectoryProvider, - cancellerFactory: OngoingRequestCancellerFactory, - versionProvider: ITypeScriptVersionProvider, - processFactory: TsServerProcessFactory, + services: { + pluginManager: PluginManager, + commandManager: CommandManager, + logDirectoryProvider: ILogDirectoryProvider, + cancellerFactory: OngoingRequestCancellerFactory, + versionProvider: ITypeScriptVersionProvider, + processFactory: TsServerProcessFactory, + }, onCompletionAccepted: (item: vscode.CompletionItem) => void, ): Lazy { return lazy(() => { @@ -33,12 +35,7 @@ export function createLazyClientHost( standardLanguageDescriptions, context.workspaceState, onCaseInsenitiveFileSystem, - pluginManager, - commandManager, - logDirectoryProvider, - cancellerFactory, - versionProvider, - processFactory, + services, onCompletionAccepted); context.subscriptions.push(clientHost); @@ -57,7 +54,7 @@ export function createLazyClientHost( export function lazilyActivateClient( lazyClientHost: Lazy, pluginManager: PluginManager, -) { +): vscode.Disposable { const disposables: vscode.Disposable[] = []; const supportedLanguage = flatten([ diff --git a/extensions/typescript-language-features/src/test/server.test.ts b/extensions/typescript-language-features/src/test/server.test.ts index c225fc3c859..7e27e366b5c 100644 --- a/extensions/typescript-language-features/src/test/server.test.ts +++ b/extensions/typescript-language-features/src/test/server.test.ts @@ -10,7 +10,7 @@ import type * as Proto from '../protocol'; import { NodeRequestCanceller } from '../tsServer/cancellation.electron'; import { ProcessBasedTsServer, TsServerProcess } from '../tsServer/server'; import { nulToken } from '../utils/cancellation'; -import Logger from '../utils/logger'; +import { Logger } from '../utils/logger'; import { TelemetryReporter } from '../utils/telemetry'; import Tracer from '../utils/tracer'; diff --git a/extensions/typescript-language-features/src/tsServer/spawner.ts b/extensions/typescript-language-features/src/tsServer/spawner.ts index 5d7e31deca6..a3187efc35e 100644 --- a/extensions/typescript-language-features/src/tsServer/spawner.ts +++ b/extensions/typescript-language-features/src/tsServer/spawner.ts @@ -9,7 +9,7 @@ import { OngoingRequestCancellerFactory } from '../tsServer/cancellation'; import { ClientCapabilities, ClientCapability } from '../typescriptService'; import API from '../utils/api'; import { SeparateSyntaxServerConfiguration, TsServerLogLevel, TypeScriptServiceConfiguration } from '../utils/configuration'; -import Logger from '../utils/logger'; +import { Logger } from '../utils/logger'; import { TypeScriptPluginPathsProvider } from '../utils/pluginPathsProvider'; import { PluginManager } from '../utils/plugins'; import { TelemetryReporter } from '../utils/telemetry'; diff --git a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts index a6eb9713c46..4827250bda8 100644 --- a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts +++ b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts @@ -58,29 +58,31 @@ export default class TypeScriptServiceClientHost extends Disposable { private reportStyleCheckAsWarnings: boolean = true; + private readonly commandManager: CommandManager; + constructor( descriptions: LanguageDescription[], workspaceState: vscode.Memento, onCaseInsenitiveFileSystem: boolean, - pluginManager: PluginManager, - private readonly commandManager: CommandManager, - logDirectoryProvider: ILogDirectoryProvider, - cancellerFactory: OngoingRequestCancellerFactory, - versionProvider: ITypeScriptVersionProvider, - processFactory: TsServerProcessFactory, + services: { + pluginManager: PluginManager, + commandManager: CommandManager, + logDirectoryProvider: ILogDirectoryProvider, + cancellerFactory: OngoingRequestCancellerFactory, + versionProvider: ITypeScriptVersionProvider, + processFactory: TsServerProcessFactory, + }, onCompletionAccepted: (item: vscode.CompletionItem) => void, ) { super(); - const allModeIds = this.getAllModeIds(descriptions, pluginManager); + this.commandManager = services.commandManager; + + const allModeIds = this.getAllModeIds(descriptions, services.pluginManager); this.client = this._register(new TypeScriptServiceClient( workspaceState, onCaseInsenitiveFileSystem, - pluginManager, - logDirectoryProvider, - cancellerFactory, - versionProvider, - processFactory, + services, allModeIds)); this.client.onDiagnosticsReceived(({ kind, resource, diagnostics }) => { @@ -90,7 +92,7 @@ export default class TypeScriptServiceClientHost extends Disposable { this.client.onConfigDiagnosticsReceived(diag => this.configFileDiagnosticsReceived(diag), null, this._disposables); this.client.onResendModelsRequested(() => this.populateService(), null, this._disposables); - this._register(new VersionStatus(this.client, commandManager)); + this._register(new VersionStatus(this.client, services.commandManager)); this._register(new AtaProgressReporter(this.client)); this.typingsStatus = this._register(new TypingsStatus(this.client)); this.fileConfigurationManager = this._register(new FileConfigurationManager(this.client, onCaseInsenitiveFileSystem)); @@ -111,7 +113,7 @@ export default class TypeScriptServiceClientHost extends Disposable { this.client.ensureServiceStarted(); this.client.onReady(() => { const languages = new Set(); - for (const plugin of pluginManager.plugins) { + for (const plugin of services.pluginManager.plugins) { if (plugin.configNamespace && plugin.languages.length) { this.registerExtensionLanguageProvider({ id: plugin.configNamespace, diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index f4879d4d928..d0465fed605 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -22,7 +22,7 @@ import API from './utils/api'; import { TsServerLogLevel, TypeScriptServiceConfiguration } from './utils/configuration'; import { Disposable } from './utils/dispose'; import * as fileSchemes from './utils/fileSchemes'; -import Logger from './utils/logger'; +import { Logger } from './utils/logger'; import { isWeb } from './utils/platform'; import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider'; import { PluginManager } from './utils/plugins'; @@ -119,17 +119,32 @@ export default class TypeScriptServiceClient extends Disposable implements IType public readonly bufferSyncSupport: BufferSyncSupport; public readonly diagnosticsManager: DiagnosticsManager; + public readonly pluginManager: PluginManager; + private readonly logDirectoryProvider: ILogDirectoryProvider; + private readonly cancellerFactory: OngoingRequestCancellerFactory; + private readonly versionProvider: ITypeScriptVersionProvider; + private readonly processFactory: TsServerProcessFactory; + constructor( private readonly workspaceState: vscode.Memento, onCaseInsenitiveFileSystem: boolean, - public readonly pluginManager: PluginManager, - private readonly logDirectoryProvider: ILogDirectoryProvider, - private readonly cancellerFactory: OngoingRequestCancellerFactory, - private readonly versionProvider: ITypeScriptVersionProvider, - private readonly processFactory: TsServerProcessFactory, + services: { + pluginManager: PluginManager, + logDirectoryProvider: ILogDirectoryProvider, + cancellerFactory: OngoingRequestCancellerFactory, + versionProvider: ITypeScriptVersionProvider, + processFactory: TsServerProcessFactory, + }, allModeIds: readonly string[] ) { super(); + + this.pluginManager = services.pluginManager; + this.logDirectoryProvider = services.logDirectoryProvider; + this.cancellerFactory = services.cancellerFactory; + this.versionProvider = services.versionProvider; + this.processFactory = services.processFactory; + this.pathSeparator = path.sep; this.lastStart = Date.now(); diff --git a/extensions/typescript-language-features/src/utils/logger.ts b/extensions/typescript-language-features/src/utils/logger.ts index 18317e58e00..74b9fbcbf08 100644 --- a/extensions/typescript-language-features/src/utils/logger.ts +++ b/extensions/typescript-language-features/src/utils/logger.ts @@ -11,7 +11,7 @@ const localize = nls.loadMessageBundle(); type LogLevel = 'Trace' | 'Info' | 'Error'; -export default class Logger { +export class Logger { @memoize private get output(): vscode.OutputChannel { diff --git a/extensions/typescript-language-features/src/utils/tracer.ts b/extensions/typescript-language-features/src/utils/tracer.ts index 134ae13d5de..445b828d0c6 100644 --- a/extensions/typescript-language-features/src/utils/tracer.ts +++ b/extensions/typescript-language-features/src/utils/tracer.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode'; import type * as Proto from '../protocol'; -import Logger from './logger'; +import { Logger } from './logger'; enum Trace { Off,