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
This commit is contained in:
Matt Bierner 2020-01-27 19:05:45 -08:00
parent c0c9e0043c
commit c4b6a6b537
2 changed files with 16 additions and 12 deletions

View file

@ -23,8 +23,6 @@ import FileConfigurationManager from './fileConfigurationManager';
const localize = nls.loadMessageBundle();
const knownTsTriggerCharacters = new Set<string>(['.', '"', '\'', '`', '/', '@', '<']);
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(

View file

@ -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);