@@ -2755,7 +2755,7 @@ namespace ts {
27552755 }
27562756
27572757 function hasVisibleDeclarations(symbol: Symbol, shouldComputeAliasToMakeVisible: boolean): SymbolVisibilityResult {
2758- let aliasesToMakeVisible: AnyImportSyntax [];
2758+ let aliasesToMakeVisible: LateVisibilityPaintedStatement [];
27592759 if (forEach(symbol.declarations, declaration => !getIsDeclarationVisible(declaration))) {
27602760 return undefined;
27612761 }
@@ -2769,15 +2769,13 @@ namespace ts {
27692769 const anyImportSyntax = getAnyImportSyntax(declaration);
27702770 if (anyImportSyntax &&
27712771 !hasModifier(anyImportSyntax, ModifierFlags.Export) && // import clause without export
2772- isDeclarationVisible(<Declaration>anyImportSyntax.parent)) {
2773- // In function "buildTypeDisplay" where we decide whether to write type-alias or serialize types,
2774- // we want to just check if type- alias is accessible or not but we don't care about emitting those alias at that time
2775- // since we will do the emitting later in trackSymbol.
2776- if (shouldComputeAliasToMakeVisible) {
2777- getNodeLinks(declaration).isVisible = true;
2778- aliasesToMakeVisible = appendIfUnique(aliasesToMakeVisible, anyImportSyntax);
2779- }
2780- return true;
2772+ isDeclarationVisible(anyImportSyntax.parent)) {
2773+ return addVisibleAlias(declaration, anyImportSyntax);
2774+ }
2775+ else if (isVariableDeclaration(declaration) && isVariableStatement(declaration.parent.parent) &&
2776+ !hasModifier(declaration.parent.parent, ModifierFlags.Export) && // unexported variable statement
2777+ isDeclarationVisible(declaration.parent.parent.parent)) {
2778+ return addVisibleAlias(declaration, declaration.parent.parent);
27812779 }
27822780
27832781 // Declaration is not visible
@@ -2786,6 +2784,17 @@ namespace ts {
27862784
27872785 return true;
27882786 }
2787+
2788+ function addVisibleAlias(declaration: Declaration, aliasingStatement: LateVisibilityPaintedStatement) {
2789+ // In function "buildTypeDisplay" where we decide whether to write type-alias or serialize types,
2790+ // we want to just check if type- alias is accessible or not but we don't care about emitting those alias at that time
2791+ // since we will do the emitting later in trackSymbol.
2792+ if (shouldComputeAliasToMakeVisible) {
2793+ getNodeLinks(declaration).isVisible = true;
2794+ aliasesToMakeVisible = appendIfUnique(aliasesToMakeVisible, aliasingStatement);
2795+ }
2796+ return true;
2797+ }
27892798 }
27902799
27912800 function isEntityNameVisible(entityName: EntityNameOrEntityNameExpression, enclosingDeclaration: Node): SymbolVisibilityResult {
@@ -3850,7 +3859,7 @@ namespace ts {
38503859 return symbolName(symbol);
38513860 }
38523861
3853- function isDeclarationVisible(node: Declaration | AnyImportSyntax ): boolean {
3862+ function isDeclarationVisible(node: Node ): boolean {
38543863 if (node) {
38553864 const links = getNodeLinks(node);
38563865 if (links.isVisible === undefined) {
@@ -3864,7 +3873,7 @@ namespace ts {
38643873 function determineIfDeclarationIsVisible() {
38653874 switch (node.kind) {
38663875 case SyntaxKind.BindingElement:
3867- return isDeclarationVisible(<Declaration> node.parent.parent);
3876+ return isDeclarationVisible(node.parent.parent);
38683877 case SyntaxKind.VariableDeclaration:
38693878 if (isBindingPattern((node as VariableDeclaration).name) &&
38703879 !((node as VariableDeclaration).name as BindingPattern).elements.length) {
@@ -3890,7 +3899,7 @@ namespace ts {
38903899 return isGlobalSourceFile(parent);
38913900 }
38923901 // Exported members/ambient module elements (exception import declaration) are visible if parent is visible
3893- return isDeclarationVisible(<Declaration> parent);
3902+ return isDeclarationVisible(parent);
38943903
38953904 case SyntaxKind.PropertyDeclaration:
38963905 case SyntaxKind.PropertySignature:
@@ -3920,7 +3929,7 @@ namespace ts {
39203929 case SyntaxKind.UnionType:
39213930 case SyntaxKind.IntersectionType:
39223931 case SyntaxKind.ParenthesizedType:
3923- return isDeclarationVisible(<Declaration> node.parent);
3932+ return isDeclarationVisible(node.parent);
39243933
39253934 // Default binding, import specifier and namespace import is visible
39263935 // only on demand so by default it is not visible
0 commit comments