diff --git a/src/services/completions.ts b/src/services/completions.ts index 562cdd5cbb..f1e7fac2a4 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1839,6 +1839,18 @@ namespace ts.Completions { } } + // If the symbol is for a member of an object type and is the internal name of an ES + // symbol, it is not a valid entry. Internal names for ES symbols start with "__@" + if (symbol.flags & SymbolFlags.ClassMember) { + const escapedName = symbol.escapedName as string; + if (escapedName.length >= 3 && + escapedName.charCodeAt(0) === CharacterCodes._ && + escapedName.charCodeAt(1) === CharacterCodes._ && + escapedName.charCodeAt(2) === CharacterCodes.at) { + return undefined; + } + } + return getCompletionEntryDisplayName(name, target, performCharacterChecks, allowStringLiteral); } diff --git a/tests/cases/fourslash/completionForStringLiteral13.ts b/tests/cases/fourslash/completionForStringLiteral13.ts new file mode 100644 index 0000000000..391a1ed508 --- /dev/null +++ b/tests/cases/fourslash/completionForStringLiteral13.ts @@ -0,0 +1,14 @@ +/// + +////interface SymbolConstructor { +//// readonly species: symbol; +////} +////var Symbol: SymbolConstructor; +////interface PromiseConstructor { +//// [Symbol.species]: PromiseConstructor; +////} +////var Promise: PromiseConstructor; +////Promise["/*1*/"]; + +goTo.marker('1'); +verify.not.completionListContains("__@species");