Skip to content

Commit b1430e5

Browse files
author
Andy
authored
Avoid adding duplicate completion from contextual keyword (#26947)
1 parent f8b6a8f commit b1430e5

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

src/services/completions.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,14 @@ namespace ts.Completions {
144144
getCompletionEntriesFromSymbols(symbols, entries, location, sourceFile, typeChecker, compilerOptions.target!, log, completionKind, preferences, propertyAccessToConvert, isJsxInitializer, recommendedCompletion, symbolToOriginInfoMap);
145145
}
146146

147-
addRange(entries, getKeywordCompletions(keywordFilters));
147+
if (keywordFilters !== KeywordCompletionFilters.None) {
148+
const entryNames = arrayToSet(entries, e => e.name);
149+
for (const keywordEntry of getKeywordCompletions(keywordFilters)) {
150+
if (!entryNames.has(keywordEntry.name)) {
151+
entries.push(keywordEntry);
152+
}
153+
}
154+
}
148155

149156
for (const literal of literals) {
150157
entries.push(createCompletionEntryForLiteral(literal));
@@ -180,7 +187,7 @@ namespace ts.Completions {
180187
return;
181188
}
182189
const realName = unescapeLeadingUnderscores(name);
183-
if (addToSeen(uniqueNames, realName) && isIdentifierText(realName, target) && !isStringANonContextualKeyword(realName)) {
190+
if (addToSeen(uniqueNames, realName) && isIdentifierText(realName, target)) {
184191
entries.push({
185192
name: realName,
186193
kind: ScriptElementKind.warning,

tests/cases/fourslash/server/completionEntryDetailAcrossFiles02.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
//// import a = require("./a");
1515
//// a.fo/*2*/
1616

17-
goTo.marker('1');
18-
verify.completionEntryDetailIs("foo", "var foo: (p1: string) => void", "Modify the parameter");
19-
goTo.marker('2');
20-
verify.completionEntryDetailIs("foo", "(property) a.foo: (p1: string) => void", "Modify the parameter");
17+
verify.completions(
18+
{ marker: "1", includes: { name: "foo", text: "var foo: (p1: string) => void", documentation: "Modify the parameter" } },
19+
{ marker: "2", exact: { name: "foo", text: "(property) a.foo: (p1: string) => void", documentation: "Modify the parameter" } },
20+
);

0 commit comments

Comments
 (0)