diff --git a/extensions/typescript-language-features/src/features/completionItemProvider.ts b/extensions/typescript-language-features/src/features/completionItemProvider.ts index 803342d7ffa..c7f191c2f28 100644 --- a/extensions/typescript-language-features/src/features/completionItemProvider.ts +++ b/extensions/typescript-language-features/src/features/completionItemProvider.ts @@ -242,6 +242,9 @@ namespace CompletionConfiguration { } export default class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider { + + public static readonly triggerCharacters = ['.', '"', '\'', '/', '@']; + constructor( private readonly client: ITypeScriptServiceClient, private readonly typingsStatus: TypingsStatus, @@ -279,10 +282,11 @@ export default class TypeScriptCompletionItemProvider implements vscode.Completi return []; } - const args: Proto.CompletionsRequestArgs = { + const args: Proto.CompletionsRequestArgs & { triggerCharacter?: string } = { ...typeConverters.Position.toFileLocationRequestArgs(file, position), includeExternalModuleExports: completionConfiguration.autoImportSuggestions, - includeInsertTextCompletions: true + includeInsertTextCompletions: true, + triggerCharacter: context.triggerCharacter }; let msg: Proto.CompletionEntry[] | undefined = undefined; @@ -437,7 +441,7 @@ export default class TypeScriptCompletionItemProvider implements vscode.Completi line: vscode.TextLine, position: vscode.Position ): boolean { - if (context.triggerCharacter === '"' || context.triggerCharacter === '\'') { + if ((context.triggerCharacter === '"' || context.triggerCharacter === '\'') && !this.client.apiVersion.has290Features()) { if (!config.quickSuggestionsForPaths) { return false; } diff --git a/extensions/typescript-language-features/src/languageProvider.ts b/extensions/typescript-language-features/src/languageProvider.ts index b2cdbf56456..cb5bee33845 100644 --- a/extensions/typescript-language-features/src/languageProvider.ts +++ b/extensions/typescript-language-features/src/languageProvider.ts @@ -92,9 +92,10 @@ export default class LanguageProvider { const selector = this.documentSelector; const config = workspace.getConfiguration(this.id); + const TypeScriptCompletionItemProvider = (await import('./features/completionItemProvider')).default; this.disposables.push(languages.registerCompletionItemProvider(selector, - new (await import('./features/completionItemProvider')).default(client, typingsStatus, commandManager), - '.', '"', '\'', '/', '@')); + new TypeScriptCompletionItemProvider(client, typingsStatus, commandManager), + ...TypeScriptCompletionItemProvider.triggerCharacters)); this.disposables.push(languages.registerCompletionItemProvider(selector, new (await import('./features/directiveCommentCompletionProvider')).default(client), '@')); diff --git a/extensions/typescript-language-features/src/utils/api.ts b/extensions/typescript-language-features/src/utils/api.ts index 7dadfd840f1..344687f4f54 100644 --- a/extensions/typescript-language-features/src/utils/api.ts +++ b/extensions/typescript-language-features/src/utils/api.ts @@ -101,4 +101,9 @@ export default class API { public has280Features(): boolean { return semver.gte(this.version, '2.8.0'); } + + @memoize + public has290Features(): boolean { + return semver.gte(this.version, '2.9.0'); + } } \ No newline at end of file