Skip to content

Commit 1e02881

Browse files
authored
Port checkSourceElement, checkExpression, checkBinaryExpression (#90)
1 parent 03f8d9a commit 1e02881

File tree

6 files changed

+1847
-179
lines changed

6 files changed

+1847
-179
lines changed

internal/ast/ast.go

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,24 +170,42 @@ func (node *Node) Expression() *Node {
170170
return node.AsAsExpression().Expression
171171
case KindSatisfiesExpression:
172172
return node.AsSatisfiesExpression().Expression
173+
case KindTypeOfExpression:
174+
return node.AsTypeOfExpression().Expression
173175
case KindSpreadAssignment:
174176
return node.AsSpreadAssignment().Expression
177+
case KindSpreadElement:
178+
return node.AsSpreadElement().Expression
175179
case KindTemplateSpan:
176180
return node.AsTemplateSpan().Expression
181+
case KindDeleteExpression:
182+
return node.AsDeleteExpression().Expression
183+
case KindVoidExpression:
184+
return node.AsVoidExpression().Expression
185+
case KindAwaitExpression:
186+
return node.AsAwaitExpression().Expression
187+
case KindYieldExpression:
188+
return node.AsYieldExpression().Expression
177189
case KindForInStatement, KindForOfStatement:
178190
return node.AsForInOrOfStatement().Expression
179191
}
180192
panic("Unhandled case in Node.Expression")
181193
}
182194

183195
func (node *Node) Arguments() []*Node {
196+
var arguments *NodeList
184197
switch node.Kind {
185198
case KindCallExpression:
186-
return node.AsCallExpression().Arguments.Nodes
199+
arguments = node.AsCallExpression().Arguments
187200
case KindNewExpression:
188-
return node.AsNewExpression().Arguments.Nodes
201+
arguments = node.AsNewExpression().Arguments
202+
default:
203+
panic("Unhandled case in Node.Arguments")
189204
}
190-
panic("Unhandled case in Node.Arguments")
205+
if arguments != nil {
206+
return arguments.Nodes
207+
}
208+
return nil
191209
}
192210

193211
func (node *Node) ModifierFlags() ModifierFlags {
@@ -677,6 +695,15 @@ func (n *Node) AsJSDocNameReference() *JSDocNameReference {
677695
func (n *Node) AsTemplateLiteralTypeNode() *TemplateLiteralTypeNode {
678696
return n.data.(*TemplateLiteralTypeNode)
679697
}
698+
func (n *Node) AsVoidExpression() *VoidExpression {
699+
return n.data.(*VoidExpression)
700+
}
701+
func (n *Node) AsAwaitExpression() *AwaitExpression {
702+
return n.data.(*AwaitExpression)
703+
}
704+
func (n *Node) AsYieldExpression() *YieldExpression {
705+
return n.data.(*YieldExpression)
706+
}
680707

681708
// NodeData
682709

@@ -1186,8 +1213,15 @@ func (node *ForInOrOfStatement) ForEachChild(v Visitor) bool {
11861213
return visit(v, node.AwaitModifier) || visit(v, node.Initializer) || visit(v, node.Expression) || visit(v, node.Statement)
11871214
}
11881215

1216+
func IsForInStatement(node *Node) bool {
1217+
return node.Kind == KindForInStatement
1218+
}
1219+
func IsForOfStatement(node *Node) bool {
1220+
return node.Kind == KindForOfStatement
1221+
}
1222+
11891223
func IsForInOrOfStatement(node *Node) bool {
1190-
return node.Kind == KindForInStatement || node.Kind == KindForOfStatement
1224+
return IsForInStatement(node) || IsForOfStatement(node)
11911225
}
11921226

11931227
// BreakStatement
@@ -1859,6 +1893,10 @@ func (node *EnumMember) Name() *DeclarationName {
18591893
return node.name
18601894
}
18611895

1896+
func IsEnumMember(node *Node) bool {
1897+
return node.Kind == KindEnumMember
1898+
}
1899+
18621900
// EnumDeclaration
18631901

18641902
type EnumDeclaration struct {
@@ -2654,6 +2692,10 @@ func (f *NodeFactory) NewOmittedExpression() *Node {
26542692
return f.newNode(KindOmittedExpression, &OmittedExpression{})
26552693
}
26562694

2695+
func IsOmittedExpression(node *Node) bool {
2696+
return node.Kind == KindOmittedExpression
2697+
}
2698+
26572699
// KeywordExpression
26582700

26592701
type KeywordExpression struct {
@@ -3223,6 +3265,10 @@ func (node *TaggedTemplateExpression) ForEachChild(v Visitor) bool {
32233265
return visit(v, node.Tag) || visit(v, node.QuestionDotToken) || visitNodeList(v, node.TypeArguments) || visit(v, node.Template)
32243266
}
32253267

3268+
func IsTaggedTemplateExpression(node *Node) bool {
3269+
return node.Kind == KindTaggedTemplateExpression
3270+
}
3271+
32263272
// ParenthesizedExpression
32273273

32283274
type ParenthesizedExpression struct {
@@ -3870,6 +3916,10 @@ func (node *TypeLiteralNode) ForEachChild(v Visitor) bool {
38703916
return visitNodeList(v, node.Members)
38713917
}
38723918

3919+
func IsTypeLiteralNode(node *Node) bool {
3920+
return node.Kind == KindTypeLiteral
3921+
}
3922+
38733923
// TupleTypeNode
38743924

38753925
type TupleTypeNode struct {

0 commit comments

Comments
 (0)