Skip to content

Commit ad8feb5

Browse files
committed
Filter out private fields in string literal property completions.
Also some minor simplifications. Fixes 36082.
1 parent 75d1ead commit ad8feb5

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

src/services/completions.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -403,8 +403,8 @@ namespace ts.Completions {
403403
kindModifiers: SymbolDisplay.getSymbolModifiers(symbol),
404404
sortText,
405405
source: getSourceFromOrigin(origin),
406-
hasAction: trueOrUndefined(!!origin && originIsExport(origin)),
407-
isRecommended: trueOrUndefined(isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker)),
406+
hasAction: origin && originIsExport(origin) || undefined,
407+
isRecommended: isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker) || undefined,
408408
insertText,
409409
replacementSpan,
410410
};
@@ -415,10 +415,6 @@ namespace ts.Completions {
415415
!!(localSymbol.flags & SymbolFlags.ExportValue) && checker.getExportSymbolOfSymbol(localSymbol) === recommendedCompletion;
416416
}
417417

418-
function trueOrUndefined(b: boolean): true | undefined {
419-
return b ? true : undefined;
420-
}
421-
422418
function getSourceFromOrigin(origin: SymbolOriginInfo | undefined): string | undefined {
423419
return origin && originIsExport(origin) ? stripQuotes(origin.moduleSymbol.name) : undefined;
424420
}

src/services/stringCompletions.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ namespace ts.Completions.StringCompletions {
66
return entries && convertPathCompletions(entries);
77
}
88
if (isInString(sourceFile, position, contextToken)) {
9-
return !contextToken || !isStringLiteralLike(contextToken)
10-
? undefined
11-
: convertStringLiteralCompletions(getStringLiteralCompletionEntries(sourceFile, contextToken, position, checker, options, host), sourceFile, checker, log, preferences);
9+
if (!contextToken || !isStringLiteralLike(contextToken)) return undefined;
10+
const entries = getStringLiteralCompletionEntries(sourceFile, contextToken, position, checker, options, host);
11+
return convertStringLiteralCompletions(entries, sourceFile, checker, log, preferences);
1212
}
1313
}
1414

@@ -214,7 +214,11 @@ namespace ts.Completions.StringCompletions {
214214
}
215215

216216
function stringLiteralCompletionsFromProperties(type: Type | undefined): StringLiteralCompletionsFromProperties | undefined {
217-
return type && { kind: StringLiteralCompletionKind.Properties, symbols: type.getApparentProperties(), hasIndexSignature: hasIndexSignature(type) };
217+
return type && {
218+
kind: StringLiteralCompletionKind.Properties,
219+
symbols: type.getApparentProperties().filter(prop => !isPrivateIdentifierPropertyDeclaration(prop.valueDeclaration)),
220+
hasIndexSignature: hasIndexSignature(type)
221+
};
218222
}
219223

220224
function getStringLiteralTypes(type: Type | undefined, uniques = createMap<true>()): readonly StringLiteralType[] {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @allowNonTsExtensions: true
4+
// @Filename: file.js
5+
6+
////class Prv {
7+
//// #privatething = 1;
8+
//// notSoPrivate = 1;
9+
////}
10+
////new Prv()['/**/'];
11+
12+
verify.completions({
13+
marker: "",
14+
exact: ["notSoPrivate"]
15+
});

0 commit comments

Comments
 (0)