Make sure we only send TS trigger characters they know about

This commit is contained in:
Matt Bierner 2020-01-17 10:41:12 -08:00
parent 2fd0153d56
commit cb0cd66791

View file

@ -23,6 +23,8 @@ import FileConfigurationManager from './fileConfigurationManager';
const localize = nls.loadMessageBundle();
const knownTsTriggerCharacters = new Set<string>(['.', '"', '\'', '`', '/', '@', '<']);
interface DotAccessorContext {
readonly range: vscode.Range;
readonly text: string;
@ -459,11 +461,6 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
}
private getTsTriggerCharacter(context: vscode.CompletionContext): Proto.CompletionsTriggerCharacter | undefined {
// Workaround for https://github.com/microsoft/TypeScript/issues/36234
if (context.triggerCharacter === '#') {
return 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)
@ -471,10 +468,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
return 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)
) {
if (context.triggerCharacter && !knownTsTriggerCharacters.has(context.triggerCharacter)) {
return undefined;
}
@ -524,7 +518,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
}
item.additionalTextEdits = codeAction.additionalTextEdits;
if (detail && item.useCodeSnippet) {
if (item.useCodeSnippet) {
const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, item.position, item.document, token);
if (shouldCompleteFunction) {
const { snippet, parameterCount } = snippetForFunctionCall(item, detail.displayParts);