Skip to content

Commit 66f48e3

Browse files
committed
Switch to isSymbolAccessible for both.
1. Switch to isSymbolAccessible for both types and values, then unify to a single function. 2. Remove inaccesible base error. We can put it back after making @implements type reference lookup looser (which may or may not happen).
1 parent 9b4a83e commit 66f48e3

File tree

5 files changed

+20
-42
lines changed

5 files changed

+20
-42
lines changed

src/compiler/checker.ts

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3855,8 +3855,8 @@ namespace ts {
38553855
return false;
38563856
}
38573857

3858-
function isTypeSymbolAccessible(typeSymbol: Symbol, enclosingDeclaration: Node | undefined, allowModules: boolean): boolean {
3859-
const access = isSymbolAccessibleWorker(typeSymbol, enclosingDeclaration, SymbolFlags.Type, /*shouldComputeAliasesToMakeVisible*/ false, allowModules);
3858+
function isTypeSymbolAccessible(typeSymbol: Symbol, enclosingDeclaration: Node | undefined): boolean {
3859+
const access = isSymbolAccessibleWorker(typeSymbol, enclosingDeclaration, SymbolFlags.Type, /*shouldComputeAliasesToMakeVisible*/ false, /*allowModules*/ true);
38603860
return access.accessibility === SymbolAccessibility.Accessible;
38613861
}
38623862

@@ -3865,6 +3865,11 @@ namespace ts {
38653865
return access.accessibility === SymbolAccessibility.Accessible;
38663866
}
38673867

3868+
function isSymbolAccessibleByFlags(typeSymbol: Symbol, enclosingDeclaration: Node | undefined, flags: SymbolFlags): boolean {
3869+
const access = isSymbolAccessibleWorker(typeSymbol, enclosingDeclaration, flags, /*shouldComputeAliasesToMakeVisible*/ false, /*allowModules*/ false);
3870+
return access.accessibility === SymbolAccessibility.Accessible;
3871+
}
3872+
38683873
function isAnySymbolAccessible(symbols: Symbol[] | undefined, enclosingDeclaration: Node | undefined, initialSymbol: Symbol, meaning: SymbolFlags, shouldComputeAliasesToMakeVisible: boolean, allowModules: boolean): SymbolAccessibilityResult | undefined {
38693874
if (!length(symbols)) return;
38703875

@@ -4335,7 +4340,7 @@ namespace ts {
43354340
return createThis();
43364341
}
43374342

4338-
if (!inTypeAlias && type.aliasSymbol && (context.flags & NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope || isTypeSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration, /*allowModules*/ true))) {
4343+
if (!inTypeAlias && type.aliasSymbol && (context.flags & NodeBuilderFlags.UseAliasDefinedOutsideCurrentScope || isTypeSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration))) {
43394344
const typeArgumentNodes = mapToTypeNodes(type.aliasTypeArguments, context);
43404345
if (isReservedMemberName(type.aliasSymbol.escapedName) && !(type.aliasSymbol.flags & SymbolFlags.Class)) return createTypeReferenceNode(createIdentifier(""), typeArgumentNodes);
43414346
return symbolToTypeNode(type.aliasSymbol, context, SymbolFlags.Type, typeArgumentNodes);
@@ -4354,7 +4359,7 @@ namespace ts {
43544359
}
43554360
if (context.flags & NodeBuilderFlags.GenerateNamesForShadowedTypeParams &&
43564361
type.flags & TypeFlags.TypeParameter &&
4357-
!isTypeSymbolAccessible(type.symbol, context.enclosingDeclaration, /*allowModules*/ true)) {
4362+
!isTypeSymbolAccessible(type.symbol, context.enclosingDeclaration)) {
43584363
const name = typeParameterToName(type, context);
43594364
context.approximateLength += idText(name).length;
43604365
return createTypeReferenceNode(createIdentifier(idText(name)), /*typeArguments*/ undefined);
@@ -4602,7 +4607,7 @@ namespace ts {
46024607
else if (context.flags & NodeBuilderFlags.WriteClassExpressionAsTypeLiteral &&
46034608
type.symbol.valueDeclaration &&
46044609
isClassLike(type.symbol.valueDeclaration) &&
4605-
!isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)
4610+
!isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)
46064611
) {
46074612
return createAnonymousTypeNode(type);
46084613
}
@@ -6126,7 +6131,7 @@ namespace ts {
61266131
const constructSignatures = serializeSignatures(SignatureKind.Construct, interfaceType, baseType, SyntaxKind.ConstructSignature) as ConstructSignatureDeclaration[];
61276132
const indexSignatures = serializeIndexSignatures(interfaceType, baseType);
61286133

6129-
const heritageClauses = !length(baseTypes) ? undefined : [createHeritageClause(SyntaxKind.ExtendsKeyword, mapDefined(baseTypes, b => trySerializeAsTypeReference(b)))];
6134+
const heritageClauses = !length(baseTypes) ? undefined : [createHeritageClause(SyntaxKind.ExtendsKeyword, mapDefined(baseTypes, b => trySerializeAsTypeReference(b, SymbolFlags.Value)))];
61306135
addResult(createInterfaceDeclaration(
61316136
/*decorators*/ undefined,
61326137
/*modifiers*/ undefined,
@@ -6833,7 +6838,7 @@ namespace ts {
68336838
}
68346839

68356840
function serializeBaseType(t: Type, staticType: Type, rootName: string) {
6836-
const ref = trySerializeAsTypeReference(t);
6841+
const ref = trySerializeAsTypeReference(t, SymbolFlags.Value);
68376842
if (ref) {
68386843
return ref;
68396844
}
@@ -6845,16 +6850,17 @@ namespace ts {
68456850
return createExpressionWithTypeArguments(/*typeArgs*/ undefined, createIdentifier(tempName));
68466851
}
68476852

6848-
function trySerializeAsTypeReference(t: Type) {
6853+
function trySerializeAsTypeReference(t: Type, flags: SymbolFlags) {
68496854
let typeArgs: TypeNode[] | undefined;
68506855
let reference: Expression | undefined;
6856+
68516857
// We don't use `isValueSymbolAccessible` below. since that considers alternative containers (like modules)
68526858
// which we can't write out in a syntactically valid way as an expression
6853-
if ((t as TypeReference).target && getAccessibleSymbolChain((t as TypeReference).target.symbol, enclosingDeclaration, SymbolFlags.Value, /*useOnlyExternalAliasing*/ false)) {
6859+
if ((t as TypeReference).target && isSymbolAccessibleByFlags((t as TypeReference).target.symbol, enclosingDeclaration, flags)) {
68546860
typeArgs = map(getTypeArguments(t as TypeReference), t => typeToTypeNodeHelper(t, context));
68556861
reference = symbolToExpression((t as TypeReference).target.symbol, context, SymbolFlags.Type);
68566862
}
6857-
else if (t.symbol && getAccessibleSymbolChain(t.symbol, enclosingDeclaration, SymbolFlags.Value, /*useOnlyExternalAliasing*/ false)) {
6863+
else if (t.symbol && isSymbolAccessibleByFlags(t.symbol, enclosingDeclaration, flags)) {
68586864
reference = symbolToExpression(t.symbol, context, SymbolFlags.Type);
68596865
}
68606866
if (reference) {
@@ -6863,25 +6869,11 @@ namespace ts {
68636869
}
68646870

68656871
function serializeImplementedType(t: Type) {
6866-
let typeArgs: TypeNode[] | undefined;
6867-
let reference: Expression | undefined;
6868-
if ((t as TypeReference).target && isTypeSymbolAccessible((t as TypeReference).target.symbol, enclosingDeclaration, /*allowModules*/ false)) {
6869-
typeArgs = map(getTypeArguments(t as TypeReference), t => typeToTypeNodeHelper(t, context));
6870-
reference = symbolToExpression((t as TypeReference).target.symbol, context, SymbolFlags.Type);
6871-
}
6872-
else if (t.symbol && isTypeSymbolAccessible(t.symbol, enclosingDeclaration, /*allowModules*/ false)) {
6873-
reference = symbolToExpression(t.symbol, context, SymbolFlags.Type);
6874-
}
6875-
if (reference) {
6876-
return createExpressionWithTypeArguments(typeArgs, reference);
6877-
}
6878-
else if (context.tracker.reportInaccessibleBaseType) {
6879-
context.tracker.reportInaccessibleBaseType();
6880-
return createExpressionWithTypeArguments(/*typeArgs*/ undefined, symbolToExpression(t.symbol, context, SymbolFlags.Type));
6881-
}
6882-
else {
6883-
Debug.fail("context.tracker missing some error reporting methods");
6872+
const ref = trySerializeAsTypeReference(t, SymbolFlags.Type);
6873+
if (ref) {
6874+
return ref;
68846875
}
6876+
return createExpressionWithTypeArguments(/*typeArgs*/ undefined, symbolToExpression(t.symbol, context, SymbolFlags.Type));
68856877
}
68866878

68876879
function getUnusedName(input: string, symbol?: Symbol): string {

src/compiler/diagnosticMessages.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2971,10 +2971,6 @@
29712971
"category": "Error",
29722972
"code": 2791
29732973
},
2974-
"The type '{0}' references an inaccessible base type.": {
2975-
"category": "Error",
2976-
"code": 2792
2977-
},
29782974

29792975
"Import declaration '{0}' is using private name '{1}'.": {
29802976
"category": "Error",

src/compiler/transformers/declarations.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ namespace ts {
7070
const host = context.getEmitHost();
7171
const symbolTracker: SymbolTracker = {
7272
trackSymbol,
73-
reportInaccessibleBaseType,
7473
reportInaccessibleThisError,
7574
reportInaccessibleUniqueSymbolError,
7675
reportPrivateInBaseOfClassExpression,
@@ -176,13 +175,6 @@ namespace ts {
176175
}
177176
}
178177

179-
function reportInaccessibleBaseType() {
180-
if (errorNameNode) {
181-
context.addDiagnostic(createDiagnosticForNode(errorNameNode, Diagnostics.The_type_0_references_an_inaccessible_base_type,
182-
declarationNameToString(errorNameNode)));
183-
}
184-
}
185-
186178
function reportInaccessibleThisError() {
187179
if (errorNameNode) {
188180
context.addDiagnostic(createDiagnosticForNode(errorNameNode, Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary,

src/compiler/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6478,7 +6478,6 @@ namespace ts {
64786478
// declaration emitter to help determine if it should patch up the final declaration file
64796479
// with import statements it previously saw (but chose not to emit).
64806480
trackSymbol?(symbol: Symbol, enclosingDeclaration: Node | undefined, meaning: SymbolFlags): void;
6481-
reportInaccessibleBaseType?(): void;
64826481
reportInaccessibleThisError?(): void;
64836482
reportPrivateInBaseOfClassExpression?(propertyName: string): void;
64846483
reportInaccessibleUniqueSymbolError?(): void;

src/compiler/utilities.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ namespace ts {
8080
decreaseIndent: noop,
8181
clear: () => str = "",
8282
trackSymbol: noop,
83-
reportInaccessibleBaseType: noop,
8483
reportInaccessibleThisError: noop,
8584
reportInaccessibleUniqueSymbolError: noop,
8685
reportPrivateInBaseOfClassExpression: noop,

0 commit comments

Comments
 (0)