diff --git a/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts b/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts index fd3f84963e6..9986e0fb004 100644 --- a/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts +++ b/extensions/typescript-language-features/src/languageFeatures/fileConfigurationManager.ts @@ -77,24 +77,27 @@ export default class FileConfigurationManager extends Disposable { const cachedOptions = this.formatOptions.get(document.uri); if (cachedOptions) { const cachedOptionsValue = await cachedOptions; + if (token.isCancellationRequested) { + return; + } + if (cachedOptionsValue && areFileConfigurationsEqual(cachedOptionsValue, currentOptions)) { return; } } - let resolve: (x: FileConfiguration | undefined) => void; - this.formatOptions.set(document.uri, new Promise(r => resolve = r)); + const task = (async () => { + try { + const response = await this.client.execute('configure', { file, ...currentOptions }, token); + return response.type === 'response' ? currentOptions : undefined; + } catch { + return undefined; + } + })(); - const args: Proto.ConfigureRequestArguments = { - file, - ...currentOptions, - }; - try { - const response = await this.client.execute('configure', args, token); - resolve!(response.type === 'response' ? currentOptions : undefined); - } finally { - resolve!(undefined); - } + this.formatOptions.set(document.uri, task); + + await task; } public async setGlobalConfigurationFromDocument(