Fix duplicate completions bugs (#26648)

* Fix duplicate completions bugs

* Remove old TODO
This commit is contained in:
Andy 2018-08-23 18:22:07 -07:00 committed by GitHub
parent 6ea2278c7a
commit f3ceebe552
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 43 additions and 63 deletions

View file

@ -868,8 +868,7 @@ namespace FourSlash {
const actualByName = ts.createMap<ts.CompletionEntry>();
for (const entry of actualCompletions.entries) {
if (actualByName.has(entry.name)) {
// TODO: GH#23587
if (entry.name !== "undefined" && entry.name !== "require") this.raiseError(`Duplicate (${actualCompletions.entries.filter(a => a.name === entry.name).length}) completions for ${entry.name}`);
this.raiseError(`Duplicate (${actualCompletions.entries.filter(a => a.name === entry.name).length}) completions for ${entry.name}`);
}
else {
actualByName.set(entry.name, entry);

View file

@ -2116,8 +2116,8 @@ namespace ts.Completions {
const kind = stringToToken(entry.name)!;
switch (keywordFilter) {
case KeywordCompletionFilters.None:
// "undefined" is a global variable, so don't need a keyword completion for it.
return kind !== SyntaxKind.UndefinedKeyword;
return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind) || kind === SyntaxKind.DeclareKeyword || kind === SyntaxKind.ModuleKeyword
|| isTypeKeyword(kind) && kind !== SyntaxKind.UndefinedKeyword;
case KeywordCompletionFilters.ClassElementKeywords:
return isClassMemberCompletionKeyword(kind);
case KeywordCompletionFilters.InterfaceElementKeywords:
@ -2152,7 +2152,7 @@ namespace ts.Completions {
}
function isFunctionLikeBodyKeyword(kind: SyntaxKind) {
return kind === SyntaxKind.AsyncKeyword || !isClassMemberCompletionKeyword(kind);
return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind);
}
function keywordForNode(node: Node): SyntaxKind {

View file

@ -1,8 +0,0 @@
///<reference path="fourslash.ts" />
////var x = Object.create(/**/
goTo.marker();
verify.not.completionListIsEmpty();
edit.insert("nu");
verify.completionListContains("number", undefined, undefined, "keyword");

View file

@ -1,48 +1,42 @@
/// <reference path="fourslash.ts"/>
/////**/
////
goTo.marker();
verify.completionListContains("break");
verify.completionListContains("case");
verify.completionListContains("catch");
verify.completionListContains("class");
verify.completionListContains("constructor");
verify.completionListContains("continue");
verify.completionListContains("debugger");
verify.completionListContains("declare");
verify.completionListContains("default");
verify.completionListContains("delete");
verify.completionListContains("do");
verify.completionListContains("else");
verify.completionListContains("enum");
verify.completionListContains("export");
verify.completionListContains("extends");
verify.completionListContains("false");
verify.completionListContains("finally");
verify.completionListContains("for");
verify.completionListContains("function");
verify.completionListContains("get");
verify.completionListContains("if");
verify.completionListContains("implements");
verify.completionListContains("import");
verify.completionListContains("in");
verify.completionListContains("instanceof");
verify.completionListContains("interface");
verify.completionListContains("module");
verify.completionListContains("new");
verify.completionListContains("private");
verify.completionListContains("public");
verify.completionListContains("return");
verify.completionListContains("set");
verify.completionListContains("static");
verify.completionListContains("super");
verify.completionListContains("switch");
verify.completionListContains("this");
verify.completionListContains("throw");
verify.completionListContains("true");
verify.completionListContains("try");
verify.completionListContains("typeof");
verify.completionListContains("var");
verify.completionListContains("while");
verify.completionListContains("with");
verify.completions({
includes: [
"break",
"case",
"catch",
"class",
"continue",
"debugger",
"declare",
"default",
"delete",
"do",
"else",
"enum",
"export",
"extends",
"false",
"finally",
"for",
"function",
"if",
"instanceof",
"interface",
"module",
"new",
"return",
"super",
"switch",
"this",
"throw",
"true",
"try",
"typeof",
"var",
"while",
"with",
],
});

View file

@ -1,5 +0,0 @@
/// <reference path="fourslash.ts"/>
////
verify.completions({ includes: ["any", "boolean", "null", "number", "string", "undefined", "void"] })