From c4b6a6b537de49a734d0eedea06152ea37dfdb6a Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 27 Jan 2020 19:05:45 -0800 Subject: [PATCH] Send `#` as a completion trigger character to TS 3.8.1+ https://github.com/microsoft/TypeScript/issues/36367 added support for `#` as a TS completion trigger --- .../src/features/completions.ts | 27 ++++++++++--------- .../src/utils/api.ts | 1 + 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/extensions/typescript-language-features/src/features/completions.ts b/extensions/typescript-language-features/src/features/completions.ts index 73db713846b..00e0dd4d74e 100644 --- a/extensions/typescript-language-features/src/features/completions.ts +++ b/extensions/typescript-language-features/src/features/completions.ts @@ -23,8 +23,6 @@ import FileConfigurationManager from './fileConfigurationManager'; const localize = nls.loadMessageBundle(); -const knownTsTriggerCharacters = new Set(['.', '"', '\'', '`', '/', '@', '<']); - interface DotAccessorContext { readonly range: vscode.Range; readonly text: string; @@ -461,18 +459,23 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider } private getTsTriggerCharacter(context: vscode.CompletionContext): Proto.CompletionsTriggerCharacter | undefined { - // Workaround for https://github.com/Microsoft/TypeScript/issues/27321 - if (context.triggerCharacter === '@' - && this.client.apiVersion.gte(API.v310) && this.client.apiVersion.lt(API.v320) - ) { - return undefined; + switch (context.triggerCharacter) { + case '@': // Workaround for https://github.com/Microsoft/TypeScript/issues/27321 + return this.client.apiVersion.gte(API.v310) && this.client.apiVersion.lt(API.v320) ? undefined : '@'; + + case '#': // Workaround for https://github.com/microsoft/TypeScript/issues/36367 + return this.client.apiVersion.lt(API.v381) ? undefined : '#' as Proto.CompletionsTriggerCharacter; + + case '.': + case '"': + case '\'': + case '`': + case '/': + case '<': + return context.triggerCharacter; } - if (context.triggerCharacter && !knownTsTriggerCharacters.has(context.triggerCharacter)) { - return undefined; - } - - return context.triggerCharacter as Proto.CompletionsTriggerCharacter; + return undefined; } public async resolveCompletionItem( diff --git a/extensions/typescript-language-features/src/utils/api.ts b/extensions/typescript-language-features/src/utils/api.ts index fd2625b950e..4a1c217471d 100644 --- a/extensions/typescript-language-features/src/utils/api.ts +++ b/extensions/typescript-language-features/src/utils/api.ts @@ -32,6 +32,7 @@ export default class API { public static readonly v345 = API.fromSimpleString('3.4.5'); public static readonly v350 = API.fromSimpleString('3.5.0'); public static readonly v380 = API.fromSimpleString('3.8.0'); + public static readonly v381 = API.fromSimpleString('3.8.1'); public static fromVersionString(versionString: string): API { let version = semver.valid(versionString);