Skip to content

Commit 5795354

Browse files
authored
Rename transform-relevant subtree facts with what they actually should track (#1277)
1 parent e00c12f commit 5795354

File tree

4 files changed

+42
-30
lines changed

4 files changed

+42
-30
lines changed

internal/ast/ast.go

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1999,10 +1999,8 @@ func (node *Token) Clone(f NodeFactoryCoercible) *Node {
19991999

20002000
func (node *Token) computeSubtreeFacts() SubtreeFacts {
20012001
switch node.Kind {
2002-
case KindAsyncKeyword:
2003-
return SubtreeContainsES2017 | SubtreeContainsES2018
20042002
case KindUsingKeyword:
2005-
return SubtreeContainsESNext
2003+
return SubtreeContainsUsing
20062004
case KindPublicKeyword,
20072005
KindPrivateKeyword,
20082006
KindProtectedKeyword,
@@ -2029,11 +2027,11 @@ func (node *Token) computeSubtreeFacts() SubtreeFacts {
20292027
case KindAccessorKeyword:
20302028
return SubtreeContainsClassFields
20312029
case KindAsteriskAsteriskToken, KindAsteriskAsteriskEqualsToken:
2032-
return SubtreeContainsES2016
2030+
return SubtreeContainsExponentiationOperator
20332031
case KindQuestionQuestionToken, KindQuestionDotToken:
2034-
return SubtreeContainsES2020
2032+
return SubtreeContainsOptionalChaining
20352033
case KindQuestionQuestionEqualsToken, KindBarBarEqualsToken, KindAmpersandAmpersandEqualsToken:
2036-
return SubtreeContainsES2021
2034+
return SubtreeContainsLogicalAssignments
20372035
}
20382036
return SubtreeFactsNone
20392037
}
@@ -2930,7 +2928,7 @@ func (node *CatchClause) computeSubtreeFacts() SubtreeFacts {
29302928
res := propagateSubtreeFacts(node.VariableDeclaration) |
29312929
propagateSubtreeFacts(node.Block)
29322930
if node.VariableDeclaration == nil {
2933-
res |= SubtreeContainsES2019
2931+
res |= SubtreeContainsMissingCatchClauseVariable
29342932
}
29352933
return res
29362934
}
@@ -3224,7 +3222,7 @@ func (node *VariableDeclarationList) Clone(f NodeFactoryCoercible) *Node {
32243222

32253223
func (node *VariableDeclarationList) computeSubtreeFacts() SubtreeFacts {
32263224
return propagateNodeListSubtreeFacts(node.Declarations, propagateSubtreeFacts) |
3227-
core.IfElse(node.Flags&NodeFlagsUsing != 0, SubtreeContainsESNext, SubtreeFactsNone)
3225+
core.IfElse(node.Flags&NodeFlagsUsing != 0, SubtreeContainsUsing, SubtreeFactsNone)
32283226
}
32293227

32303228
func (node *VariableDeclarationList) propagateSubtreeFacts() SubtreeFacts {
@@ -3516,8 +3514,8 @@ func (node *FunctionDeclaration) computeSubtreeFacts() SubtreeFacts {
35163514
propagateNodeListSubtreeFacts(node.Parameters, propagateSubtreeFacts) |
35173515
propagateEraseableSyntaxSubtreeFacts(node.Type) |
35183516
propagateSubtreeFacts(node.Body) |
3519-
core.IfElse(isAsync && isGenerator, SubtreeContainsES2018, SubtreeFactsNone) |
3520-
core.IfElse(isAsync && !isGenerator, SubtreeContainsES2017, SubtreeFactsNone)
3517+
core.IfElse(isAsync && isGenerator, SubtreeContainsForAwaitOrAsyncGenerator, SubtreeFactsNone) |
3518+
core.IfElse(isAsync && !isGenerator, SubtreeContainsAnyAwait, SubtreeFactsNone)
35213519
}
35223520
}
35233521

@@ -5219,8 +5217,8 @@ func (node *MethodDeclaration) computeSubtreeFacts() SubtreeFacts {
52195217
propagateNodeListSubtreeFacts(node.Parameters, propagateSubtreeFacts) |
52205218
propagateSubtreeFacts(node.Body) |
52215219
propagateEraseableSyntaxSubtreeFacts(node.Type) |
5222-
core.IfElse(isAsync && isGenerator, SubtreeContainsES2018, SubtreeFactsNone) |
5223-
core.IfElse(isAsync && !isGenerator, SubtreeContainsES2017, SubtreeFactsNone)
5220+
core.IfElse(isAsync && isGenerator, SubtreeContainsForAwaitOrAsyncGenerator, SubtreeFactsNone) |
5221+
core.IfElse(isAsync && !isGenerator, SubtreeContainsAnyAwait, SubtreeFactsNone)
52245222
}
52255223
}
52265224

@@ -5524,7 +5522,7 @@ func (node *BigIntLiteral) Clone(f NodeFactoryCoercible) *Node {
55245522
}
55255523

55265524
func (node *BigIntLiteral) computeSubtreeFacts() SubtreeFacts {
5527-
return SubtreeContainsES2020
5525+
return SubtreeFactsNone // `bigint` is not downleveled in any way
55285526
}
55295527

55305528
func IsBigIntLiteral(node *Node) bool {
@@ -5802,7 +5800,7 @@ func (node *ArrowFunction) computeSubtreeFacts() SubtreeFacts {
58025800
propagateNodeListSubtreeFacts(node.Parameters, propagateSubtreeFacts) |
58035801
propagateEraseableSyntaxSubtreeFacts(node.Type) |
58045802
propagateSubtreeFacts(node.Body) |
5805-
core.IfElse(node.ModifierFlags()&ModifierFlagsAsync != 0, SubtreeContainsES2017, SubtreeFactsNone)
5803+
core.IfElse(node.ModifierFlags()&ModifierFlagsAsync != 0, SubtreeContainsAnyAwait, SubtreeFactsNone)
58065804
}
58075805

58085806
func (node *ArrowFunction) propagateSubtreeFacts() SubtreeFacts {
@@ -5872,8 +5870,8 @@ func (node *FunctionExpression) computeSubtreeFacts() SubtreeFacts {
58725870
propagateNodeListSubtreeFacts(node.Parameters, propagateSubtreeFacts) |
58735871
propagateEraseableSyntaxSubtreeFacts(node.Type) |
58745872
propagateSubtreeFacts(node.Body) |
5875-
core.IfElse(isAsync && isGenerator, SubtreeContainsES2018, SubtreeFactsNone) |
5876-
core.IfElse(isAsync && !isGenerator, SubtreeContainsES2017, SubtreeFactsNone)
5873+
core.IfElse(isAsync && isGenerator, SubtreeContainsForAwaitOrAsyncGenerator, SubtreeFactsNone) |
5874+
core.IfElse(isAsync && !isGenerator, SubtreeContainsAnyAwait, SubtreeFactsNone)
58775875
}
58785876

58795877
func (node *FunctionExpression) propagateSubtreeFacts() SubtreeFacts {
@@ -6283,8 +6281,7 @@ func (node *MetaProperty) Name() *DeclarationName {
62836281
}
62846282

62856283
func (node *MetaProperty) computeSubtreeFacts() SubtreeFacts {
6286-
return propagateSubtreeFacts(node.name) |
6287-
core.IfElse(node.KeywordToken == KindImportKeyword, SubtreeContainsES2020, SubtreeFactsNone)
6284+
return propagateSubtreeFacts(node.name) // `import.meta` is not downleveled in any way
62886285
}
62896286

62906287
func IsMetaProperty(node *Node) bool {
@@ -6943,7 +6940,7 @@ func (node *AwaitExpression) Clone(f NodeFactoryCoercible) *Node {
69436940
}
69446941

69456942
func (node *AwaitExpression) computeSubtreeFacts() SubtreeFacts {
6946-
return propagateSubtreeFacts(node.Expression) | SubtreeContainsES2017 | SubtreeContainsES2018 | SubtreeContainsAwait
6943+
return propagateSubtreeFacts(node.Expression) | SubtreeContainsAwait
69476944
}
69486945

69496946
func IsAwaitExpression(node *Node) bool {

internal/ast/subtreefacts.go

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,22 @@ type SubtreeFacts int32
88

99
const (
1010
// Facts
11-
// - Flags used to indicate that a node or subtree contains syntax specific to a particular ECMAScript variant.
11+
// - Flags used to indicate that a node or subtree contains syntax relevant to a specific transform
1212

1313
SubtreeContainsTypeScript SubtreeFacts = 1 << iota
1414
SubtreeContainsJsx
15-
SubtreeContainsESNext
16-
SubtreeContainsES2022
17-
SubtreeContainsES2021
18-
SubtreeContainsES2020
19-
SubtreeContainsES2019
20-
SubtreeContainsES2018
21-
SubtreeContainsES2017
22-
SubtreeContainsES2016
15+
SubtreeContainsESDecorators
16+
SubtreeContainsUsing
17+
SubtreeContainsClassStaticBlocks
18+
SubtreeContainsESClassFields
19+
SubtreeContainsLogicalAssignments
20+
SubtreeContainsNullishCoalescing
21+
SubtreeContainsOptionalChaining
22+
SubtreeContainsMissingCatchClauseVariable
23+
SubtreeContainsESObjectRestOrSpread
24+
SubtreeContainsForAwaitOrAsyncGenerator
25+
SubtreeContainsAnyAwait
26+
SubtreeContainsExponentiationOperator
2327

2428
// Markers
2529
// - Flags used to indicate that a node or subtree contains a particular kind of syntax.
@@ -37,6 +41,17 @@ const (
3741
SubtreeFactsComputed // NOTE: This should always be last
3842
SubtreeFactsNone SubtreeFacts = 0
3943

44+
// Aliases (unused, for documentation purposes only - correspond to combinations in transformers/estransforms/definitions.go)
45+
46+
SubtreeContainsESNext = SubtreeContainsESDecorators | SubtreeContainsUsing
47+
SubtreeContainsES2022 = SubtreeContainsClassStaticBlocks | SubtreeContainsESClassFields
48+
SubtreeContainsES2021 = SubtreeContainsLogicalAssignments
49+
SubtreeContainsES2020 = SubtreeContainsNullishCoalescing | SubtreeContainsOptionalChaining
50+
SubtreeContainsES2019 = SubtreeContainsMissingCatchClauseVariable
51+
SubtreeContainsES2018 = SubtreeContainsESObjectRestOrSpread | SubtreeContainsForAwaitOrAsyncGenerator
52+
SubtreeContainsES2017 = SubtreeContainsAnyAwait
53+
SubtreeContainsES2016 = SubtreeContainsExponentiationOperator
54+
4055
// Scope Exclusions
4156
// - Bitmasks that exclude flags from propagating out of a specific context
4257
// into the subtree flags of their container.

internal/transformers/estransforms/optionalcatch.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ type optionalCatchTransformer struct {
1111
}
1212

1313
func (ch *optionalCatchTransformer) visit(node *ast.Node) *ast.Node {
14-
if node.SubtreeFacts()&ast.SubtreeContainsES2019 == 0 {
14+
if node.SubtreeFacts()&ast.SubtreeContainsMissingCatchClauseVariable == 0 {
1515
return node
1616
}
1717
switch node.Kind {

internal/transformers/estransforms/using.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const (
3333
)
3434

3535
func (tx *usingDeclarationTransformer) visit(node *ast.Node) *ast.Node {
36-
if node.SubtreeFacts()&ast.SubtreeContainsESNext == 0 {
36+
if node.SubtreeFacts()&ast.SubtreeContainsUsing == 0 {
3737
return node
3838
}
3939

0 commit comments

Comments
 (0)