diff --git a/extensions/typescript/src/features/taskProvider.ts b/extensions/typescript/src/features/taskProvider.ts index 4f64dff5c4145f6a39eea1816c38be1378c7e9a0..bf14526a810b1fc0c617cf3e7fad89c322a5ce27 100644 --- a/extensions/typescript/src/features/taskProvider.ts +++ b/extensions/typescript/src/features/taskProvider.ts @@ -42,10 +42,6 @@ class TscTaskProvider implements vscode.TaskProvider { this.tsconfigProvider = new TsConfigProvider(); } - dispose() { - this.tsconfigProvider.dispose(); - } - public async provideTasks(token: vscode.CancellationToken): Promise { const folders = vscode.workspace.workspaceFolders; if (!folders || !folders.length) { diff --git a/extensions/typescript/src/utils/tsconfigProvider.ts b/extensions/typescript/src/utils/tsconfigProvider.ts index ef69aab5e30b83ff34b95c18af52e049f757a271..851786d29cd040de07522d0ecdeac98b64317966 100644 --- a/extensions/typescript/src/utils/tsconfigProvider.ts +++ b/extensions/typescript/src/utils/tsconfigProvider.ts @@ -9,70 +9,21 @@ export interface TSConfig { workspaceFolder?: vscode.WorkspaceFolder; } -const tsconfigGlob = '**/tsconfig*.json'; - -export default class TsConfigProvider extends vscode.Disposable { - private readonly tsconfigs = new Map(); - - private activated: boolean = false; - private disposables: vscode.Disposable[] = []; - - constructor() { - super(() => this.dispose()); - } - - dispose(): void { - this.disposables.forEach(d => d.dispose()); - } - +export default class TsConfigProvider { public async getConfigsForWorkspace(): Promise> { if (!vscode.workspace.workspaceFolders) { return []; } - await this.ensureActivated(); - return this.tsconfigs.values(); - } - - private async ensureActivated(): Promise { - if (this.activated) { - return this; + const configs = new Map(); + for (const config of await vscode.workspace.findFiles('**/tsconfig*.json', '**/node_modules/**')) { + const root = vscode.workspace.getWorkspaceFolder(config); + if (root) { + configs.set(config.fsPath, { + path: config.fsPath, + workspaceFolder: root + }); + } } - this.activated = true; - - await this.reloadWorkspaceConfigs(); - - const configFileWatcher = vscode.workspace.createFileSystemWatcher(tsconfigGlob); - this.disposables.push(configFileWatcher); - configFileWatcher.onDidCreate(this.handleProjectUpdate, this, this.disposables); - configFileWatcher.onDidChange(this.handleProjectUpdate, this, this.disposables); - configFileWatcher.onDidDelete(this.handleProjectDelete, this, this.disposables); - - vscode.workspace.onDidChangeWorkspaceFolders(() => { - this.reloadWorkspaceConfigs(); - }, this, this.disposables); - - return this; - } - - private async reloadWorkspaceConfigs(): Promise { - this.tsconfigs.clear(); - for (const config of await vscode.workspace.findFiles(tsconfigGlob, '**/node_modules/**')) { - this.handleProjectUpdate(config); - } - return this; - } - - private handleProjectUpdate(config: vscode.Uri) { - const root = vscode.workspace.getWorkspaceFolder(config); - if (root) { - this.tsconfigs.set(config.fsPath, { - path: config.fsPath, - workspaceFolder: root - }); - } - } - - private handleProjectDelete(e: vscode.Uri) { - this.tsconfigs.delete(e.fsPath); + return configs.values(); } }