Use Promise.all to perform config finding in parallel instead of sequentially

For #87494
This commit is contained in:
Matt Bierner 2020-09-18 16:13:55 -07:00
parent bf2448549d
commit 017a42552b

View file

@ -9,6 +9,7 @@ import * as vscode from 'vscode';
import * as nls from 'vscode-nls'; import * as nls from 'vscode-nls';
import { wait } from '../test/testUtils'; import { wait } from '../test/testUtils';
import { ITypeScriptServiceClient, ServerResponse } from '../typescriptService'; import { ITypeScriptServiceClient, ServerResponse } from '../typescriptService';
import { coalesce, flatten } from '../utils/arrays';
import { isTsConfigFileName } from '../utils/languageDescription'; import { isTsConfigFileName } from '../utils/languageDescription';
import { Lazy } from '../utils/lazy'; import { Lazy } from '../utils/lazy';
import { isImplicitProjectConfigFile } from '../utils/tsconfig'; import { isImplicitProjectConfigFile } from '../utils/tsconfig';
@ -103,17 +104,14 @@ class TscTaskProvider implements vscode.TaskProvider {
} }
private async getAllTsConfigs(token: vscode.CancellationToken): Promise<TSConfig[]> { private async getAllTsConfigs(token: vscode.CancellationToken): Promise<TSConfig[]> {
const out = new Set<TSConfig>(); const configs = flatten(await Promise.all([
const configs = [ this.getTsConfigForActiveFile(token),
...await this.getTsConfigForActiveFile(token), this.getTsConfigsInWorkspace(token),
...await this.getTsConfigsInWorkspace(token) ]));
];
for (const config of configs) { return Promise.all(
if (await exists(config.uri)) { configs.map(async config => await exists(config.uri) ? config : undefined),
out.add(config); ).then(coalesce);
}
}
return Array.from(out);
} }
private async getTsConfigForActiveFile(token: vscode.CancellationToken): Promise<TSConfig[]> { private async getTsConfigForActiveFile(token: vscode.CancellationToken): Promise<TSConfig[]> {