Skip to content

Commit 83ab341

Browse files
authored
Allow variable statements used as declaration sites to be marked visible (#22798)
* Allow variable statements used as declaration sites to be marked visible and included in declaration emit by alias marking * Dont forget to transform statements * Accept baselines * Accept updated baselines for new test * Emit scope fix markers * Add partial private variable declaration emit test
1 parent 71b3901 commit 83ab341

22 files changed

+491
-174
lines changed

src/compiler/checker.ts

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)