Fix duplicate completions bugs (#26648)
* Fix duplicate completions bugs * Remove old TODO
This commit is contained in:
parent
6ea2278c7a
commit
f3ceebe552
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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");
|
|
@ -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",
|
||||
],
|
||||
});
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
/// <reference path="fourslash.ts"/>
|
||||
|
||||
////
|
||||
|
||||
verify.completions({ includes: ["any", "boolean", "null", "number", "string", "undefined", "void"] })
|
Loading…
Reference in a new issue