diff --git a/src/services/completions.ts b/src/services/completions.ts index 2d2ee7c328b..84d1fb0d44f 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -403,8 +403,8 @@ namespace ts.Completions { kindModifiers: SymbolDisplay.getSymbolModifiers(symbol), sortText, source: getSourceFromOrigin(origin), - hasAction: trueOrUndefined(!!origin && originIsExport(origin)), - isRecommended: trueOrUndefined(isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker)), + hasAction: origin && originIsExport(origin) || undefined, + isRecommended: isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker) || undefined, insertText, replacementSpan, }; @@ -415,10 +415,6 @@ namespace ts.Completions { !!(localSymbol.flags & SymbolFlags.ExportValue) && checker.getExportSymbolOfSymbol(localSymbol) === recommendedCompletion; } - function trueOrUndefined(b: boolean): true | undefined { - return b ? true : undefined; - } - function getSourceFromOrigin(origin: SymbolOriginInfo | undefined): string | undefined { return origin && originIsExport(origin) ? stripQuotes(origin.moduleSymbol.name) : undefined; } diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts index b474f391049..313b37430e2 100644 --- a/src/services/stringCompletions.ts +++ b/src/services/stringCompletions.ts @@ -6,9 +6,9 @@ namespace ts.Completions.StringCompletions { return entries && convertPathCompletions(entries); } if (isInString(sourceFile, position, contextToken)) { - return !contextToken || !isStringLiteralLike(contextToken) - ? undefined - : convertStringLiteralCompletions(getStringLiteralCompletionEntries(sourceFile, contextToken, position, checker, options, host), sourceFile, checker, log, preferences); + if (!contextToken || !isStringLiteralLike(contextToken)) return undefined; + const entries = getStringLiteralCompletionEntries(sourceFile, contextToken, position, checker, options, host); + return convertStringLiteralCompletions(entries, sourceFile, checker, log, preferences); } } @@ -214,7 +214,11 @@ namespace ts.Completions.StringCompletions { } function stringLiteralCompletionsFromProperties(type: Type | undefined): StringLiteralCompletionsFromProperties | undefined { - return type && { kind: StringLiteralCompletionKind.Properties, symbols: type.getApparentProperties(), hasIndexSignature: hasIndexSignature(type) }; + return type && { + kind: StringLiteralCompletionKind.Properties, + symbols: type.getApparentProperties().filter(prop => !isPrivateIdentifierPropertyDeclaration(prop.valueDeclaration)), + hasIndexSignature: hasIndexSignature(type) + }; } function getStringLiteralTypes(type: Type | undefined, uniques = createMap()): readonly StringLiteralType[] { diff --git a/tests/cases/fourslash/getJavaScriptCompletions21.ts b/tests/cases/fourslash/getJavaScriptCompletions21.ts new file mode 100644 index 00000000000..e7dad574428 --- /dev/null +++ b/tests/cases/fourslash/getJavaScriptCompletions21.ts @@ -0,0 +1,15 @@ +/// + +// @allowNonTsExtensions: true +// @Filename: file.js + +////class Prv { +//// #privatething = 1; +//// notSoPrivate = 1; +////} +////new Prv()['/**/']; + +verify.completions({ + marker: "", + exact: ["notSoPrivate"] +});