Filter out private fields in string literal property completions.

Also some minor simplifications.

Fixes 36082.
This commit is contained in:
Eli Barzilay 2020-01-28 13:47:55 -05:00
parent 75d1ead3fd
commit ad8feb5f90
3 changed files with 25 additions and 10 deletions

View File

@ -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;
}

View File

@ -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<true>()): readonly StringLiteralType[] {

View File

@ -0,0 +1,15 @@
/// <reference path="fourslash.ts" />
// @allowNonTsExtensions: true
// @Filename: file.js
////class Prv {
//// #privatething = 1;
//// notSoPrivate = 1;
////}
////new Prv()['/**/'];
verify.completions({
marker: "",
exact: ["notSoPrivate"]
});