Skip to content

Commit f3ceebe

Browse files
author
Andy
authored
Fix duplicate completions bugs (microsoft#26648)
* Fix duplicate completions bugs * Remove old TODO
1 parent 6ea2278 commit f3ceebe

File tree

5 files changed

+43
-63
lines changed

5 files changed

+43
-63
lines changed

src/harness/fourslash.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -868,8 +868,7 @@ namespace FourSlash {
868868
const actualByName = ts.createMap<ts.CompletionEntry>();
869869
for (const entry of actualCompletions.entries) {
870870
if (actualByName.has(entry.name)) {
871-
// TODO: GH#23587
872-
if (entry.name !== "undefined" && entry.name !== "require") this.raiseError(`Duplicate (${actualCompletions.entries.filter(a => a.name === entry.name).length}) completions for ${entry.name}`);
871+
this.raiseError(`Duplicate (${actualCompletions.entries.filter(a => a.name === entry.name).length}) completions for ${entry.name}`);
873872
}
874873
else {
875874
actualByName.set(entry.name, entry);

src/services/completions.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -2116,8 +2116,8 @@ namespace ts.Completions {
21162116
const kind = stringToToken(entry.name)!;
21172117
switch (keywordFilter) {
21182118
case KeywordCompletionFilters.None:
2119-
// "undefined" is a global variable, so don't need a keyword completion for it.
2120-
return kind !== SyntaxKind.UndefinedKeyword;
2119+
return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind) || kind === SyntaxKind.DeclareKeyword || kind === SyntaxKind.ModuleKeyword
2120+
|| isTypeKeyword(kind) && kind !== SyntaxKind.UndefinedKeyword;
21212121
case KeywordCompletionFilters.ClassElementKeywords:
21222122
return isClassMemberCompletionKeyword(kind);
21232123
case KeywordCompletionFilters.InterfaceElementKeywords:
@@ -2152,7 +2152,7 @@ namespace ts.Completions {
21522152
}
21532153

21542154
function isFunctionLikeBodyKeyword(kind: SyntaxKind) {
2155-
return kind === SyntaxKind.AsyncKeyword || !isClassMemberCompletionKeyword(kind);
2155+
return kind === SyntaxKind.AsyncKeyword || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind);
21562156
}
21572157

21582158
function keywordForNode(node: Node): SyntaxKind {

tests/cases/fourslash/completionEntryForPrimitive.ts

-8
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,42 @@
11
/// <reference path="fourslash.ts"/>
22

3-
/////**/
3+
////
44

5-
goTo.marker();
6-
verify.completionListContains("break");
7-
verify.completionListContains("case");
8-
verify.completionListContains("catch");
9-
verify.completionListContains("class");
10-
verify.completionListContains("constructor");
11-
verify.completionListContains("continue");
12-
verify.completionListContains("debugger");
13-
verify.completionListContains("declare");
14-
verify.completionListContains("default");
15-
verify.completionListContains("delete");
16-
verify.completionListContains("do");
17-
verify.completionListContains("else");
18-
verify.completionListContains("enum");
19-
verify.completionListContains("export");
20-
verify.completionListContains("extends");
21-
verify.completionListContains("false");
22-
verify.completionListContains("finally");
23-
verify.completionListContains("for");
24-
verify.completionListContains("function");
25-
verify.completionListContains("get");
26-
verify.completionListContains("if");
27-
verify.completionListContains("implements");
28-
verify.completionListContains("import");
29-
verify.completionListContains("in");
30-
verify.completionListContains("instanceof");
31-
verify.completionListContains("interface");
32-
verify.completionListContains("module");
33-
verify.completionListContains("new");
34-
verify.completionListContains("private");
35-
verify.completionListContains("public");
36-
verify.completionListContains("return");
37-
verify.completionListContains("set");
38-
verify.completionListContains("static");
39-
verify.completionListContains("super");
40-
verify.completionListContains("switch");
41-
verify.completionListContains("this");
42-
verify.completionListContains("throw");
43-
verify.completionListContains("true");
44-
verify.completionListContains("try");
45-
verify.completionListContains("typeof");
46-
verify.completionListContains("var");
47-
verify.completionListContains("while");
48-
verify.completionListContains("with");
5+
verify.completions({
6+
includes: [
7+
"break",
8+
"case",
9+
"catch",
10+
"class",
11+
"continue",
12+
"debugger",
13+
"declare",
14+
"default",
15+
"delete",
16+
"do",
17+
"else",
18+
"enum",
19+
"export",
20+
"extends",
21+
"false",
22+
"finally",
23+
"for",
24+
"function",
25+
"if",
26+
"instanceof",
27+
"interface",
28+
"module",
29+
"new",
30+
"return",
31+
"super",
32+
"switch",
33+
"this",
34+
"throw",
35+
"true",
36+
"try",
37+
"typeof",
38+
"var",
39+
"while",
40+
"with",
41+
],
42+
});

tests/cases/fourslash/completionListPrimitives.ts

-5
This file was deleted.

0 commit comments

Comments
 (0)