diff --git a/src/language/typescript/workerManager.ts b/src/language/typescript/workerManager.ts index 08a676a1..8ae5a78f 100644 --- a/src/language/typescript/workerManager.ts +++ b/src/language/typescript/workerManager.ts @@ -8,8 +8,6 @@ import type { TypeScriptWorker } from './tsWorker'; import { editor, Uri, IDisposable } from '../../fillers/monaco-editor-core'; export class WorkerManager { - private _modeId: string; - private _defaults: LanguageServiceDefaults; private _configChangeListener: IDisposable; private _updateExtraLibsToken: number; private _extraLibsChangeListener: IDisposable; @@ -17,9 +15,10 @@ export class WorkerManager { private _worker: editor.MonacoWebWorker | null; private _client: Promise | null; - constructor(modeId: string, defaults: LanguageServiceDefaults) { - this._modeId = modeId; - this._defaults = defaults; + constructor( + private readonly _modeId: string, + private readonly _defaults: LanguageServiceDefaults + ) { this._worker = null; this._client = null; this._configChangeListener = this._defaults.onDidChange(() => this._stopWorker()); @@ -29,6 +28,12 @@ export class WorkerManager { ); } + dispose(): void { + this._configChangeListener.dispose(); + this._extraLibsChangeListener.dispose(); + this._stopWorker(); + } + private _stopWorker(): void { if (this._worker) { this._worker.dispose(); @@ -37,12 +42,6 @@ export class WorkerManager { this._client = null; } - dispose(): void { - this._configChangeListener.dispose(); - this._extraLibsChangeListener.dispose(); - this._stopWorker(); - } - private async _updateExtraLibs(): Promise { if (!this._worker) { return; @@ -58,56 +57,45 @@ export class WorkerManager { private _getClient(): Promise { if (!this._client) { - this._worker = editor.createWebWorker({ - // module that exports the create() method and returns a `TypeScriptWorker` instance - moduleId: 'vs/language/typescript/tsWorker', - - label: this._modeId, + this._client = (async () => { + this._worker = editor.createWebWorker({ + // module that exports the create() method and returns a `TypeScriptWorker` instance + moduleId: 'vs/language/typescript/tsWorker', - keepIdleModels: true, - - // passed in to the create() method - createData: { - compilerOptions: this._defaults.getCompilerOptions(), - extraLibs: this._defaults.getExtraLibs(), - customWorkerPath: this._defaults.workerOptions.customWorkerPath, - inlayHintsOptions: this._defaults.inlayHintsOptions - } - }); + label: this._modeId, - let p = >this._worker.getProxy(); + keepIdleModels: true, - if (this._defaults.getEagerModelSync()) { - p = p.then((worker) => { - if (this._worker) { - return this._worker.withSyncedResources( - editor - .getModels() - .filter((model) => model.getLanguageId() === this._modeId) - .map((model) => model.uri) - ); + // passed in to the create() method + createData: { + compilerOptions: this._defaults.getCompilerOptions(), + extraLibs: this._defaults.getExtraLibs(), + customWorkerPath: this._defaults.workerOptions.customWorkerPath, + inlayHintsOptions: this._defaults.inlayHintsOptions } - return worker; }); - } - this._client = p; + if (this._defaults.getEagerModelSync()) { + return await this._worker.withSyncedResources( + editor + .getModels() + .filter((model) => model.getLanguageId() === this._modeId) + .map((model) => model.uri) + ); + } + + return await this._worker.getProxy(); + })(); } return this._client; } - getLanguageServiceWorker(...resources: Uri[]): Promise { - let _client: TypeScriptWorker; - return this._getClient() - .then((client) => { - _client = client; - }) - .then((_) => { - if (this._worker) { - return this._worker.withSyncedResources(resources); - } - }) - .then((_) => _client); + async getLanguageServiceWorker(...resources: Uri[]): Promise { + const client = await this._getClient(); + if (this._worker) { + await this._worker.withSyncedResources(resources); + } + return client; } }