Files
kjol/tools/tsgo/internal/ast/ast_generated.go
2026-07-09 16:50:43 -04:00

10048 lines
409 KiB
Go

// Code generated by _scripts/generate-go-ast.ts. DO NOT EDIT.
package ast
import (
"sync/atomic"
"github.com/microsoft/typescript-go/internal/core"
)
var (
_ = core.Same[string] // prevent unused import
_ atomic.Uint32 // prevent unused import
)
// ──────────────────────────────────────────────────────────────────────
// NodeFactory
// ──────────────────────────────────────────────────────────────────────
type NodeFactory struct {
hooks NodeFactoryHooks
arrayTypeNodeArena core.Arena[ArrayTypeNode]
binaryExpressionArena core.Arena[BinaryExpression]
blockArena core.Arena[Block]
callExpressionArena core.Arena[CallExpression]
conditionalExpressionArena core.Arena[ConditionalExpression]
constructSignatureDeclarationArena core.Arena[ConstructSignatureDeclaration]
elementAccessExpressionArena core.Arena[ElementAccessExpression]
expressionStatementArena core.Arena[ExpressionStatement]
expressionWithTypeArgumentsArena core.Arena[ExpressionWithTypeArguments]
functionDeclarationArena core.Arena[FunctionDeclaration]
functionTypeNodeArena core.Arena[FunctionTypeNode]
heritageClauseArena core.Arena[HeritageClause]
identifierArena core.Arena[Identifier]
ifStatementArena core.Arena[IfStatement]
importSpecifierArena core.Arena[ImportSpecifier]
indexedAccessTypeNodeArena core.Arena[IndexedAccessTypeNode]
interfaceDeclarationArena core.Arena[InterfaceDeclaration]
intersectionTypeNodeArena core.Arena[IntersectionTypeNode]
jsdocArena core.Arena[JSDoc]
jsdocDeprecatedTagArena core.Arena[JSDocDeprecatedTag]
jsdocTextArena core.Arena[JSDocText]
jsdocUnknownTagArena core.Arena[JSDocUnknownTag]
keywordExpressionArena core.Arena[KeywordExpression]
keywordTypeNodeArena core.Arena[KeywordTypeNode]
literalTypeNodeArena core.Arena[LiteralTypeNode]
methodSignatureDeclarationArena core.Arena[MethodSignatureDeclaration]
modifierListArena core.Arena[ModifierList]
nodeListArena core.Arena[NodeList]
numericLiteralArena core.Arena[NumericLiteral]
parameterDeclarationArena core.Arena[ParameterDeclaration]
parenthesizedExpressionArena core.Arena[ParenthesizedExpression]
parenthesizedTypeNodeArena core.Arena[ParenthesizedTypeNode]
prefixUnaryExpressionArena core.Arena[PrefixUnaryExpression]
propertyAccessExpressionArena core.Arena[PropertyAccessExpression]
propertyAssignmentArena core.Arena[PropertyAssignment]
propertySignatureDeclarationArena core.Arena[PropertySignatureDeclaration]
returnStatementArena core.Arena[ReturnStatement]
stringLiteralArena core.Arena[StringLiteral]
tokenArena core.Arena[Token]
typeAliasDeclarationArena core.Arena[TypeAliasDeclaration]
typeLiteralNodeArena core.Arena[TypeLiteralNode]
typeOperatorNodeArena core.Arena[TypeOperatorNode]
typeParameterDeclarationArena core.Arena[TypeParameterDeclaration]
typeReferenceNodeArena core.Arena[TypeReferenceNode]
unionTypeNodeArena core.Arena[UnionTypeNode]
variableDeclarationArena core.Arena[VariableDeclaration]
variableDeclarationListArena core.Arena[VariableDeclarationList]
variableStatementArena core.Arena[VariableStatement]
nodeCount int
textCount int
}
// ──────────────────────────────────────────────────────────────────────
// Base struct definitions
// ──────────────────────────────────────────────────────────────────────
type StatementBase struct {
NodeBase
FlowNodeBase
}
type IterationStatementBase struct {
StatementBase
Statement *Statement
}
type ExpressionBase struct {
NodeBase
}
type UnaryExpressionBase struct {
ExpressionBase
}
type UpdateExpressionBase struct {
UnaryExpressionBase
}
type LeftHandSideExpressionBase struct {
UpdateExpressionBase
}
type MemberExpressionBase struct {
LeftHandSideExpressionBase
}
type PrimaryExpressionBase struct {
MemberExpressionBase
}
type TypeNodeBase struct {
NodeBase
TypeSyntaxBase
}
type NodeWithTypeArgumentsBase struct {
TypeNodeBase
TypeArguments *TypeList // Optional
}
type JSDocTypeBase struct {
TypeNodeBase
}
type DeclarationBase struct {
Symbol *Symbol
}
type ExportableBase struct {
LocalSymbol *Symbol
}
type ModifiersBase struct {
modifiers *ModifierList // Optional
}
type LocalsContainerBase struct {
Locals SymbolTable
NextContainer *Node
}
type FlowNodeBase struct {
FlowNode *FlowNode
}
type CompositeBase struct {
facts atomic.Uint32
}
type TypeSyntaxBase struct{}
type FunctionLikeBase struct {
DeclarationBase
LocalsContainerBase
TypeParameters *TypeParameterList // Optional
Parameters *ParameterList
Type *TypeNode // Optional
FullSignature *TypeNode // Optional
}
type BodyBase struct {
AsteriskToken *AsteriskToken // Optional
Body *NodeBody // Optional
EndFlowNode *FlowNode
}
type FunctionLikeWithBodyBase struct {
FunctionLikeBase
BodyBase
}
type ClassLikeBase struct {
DeclarationBase
ExportableBase
ModifiersBase
LocalsContainerBase
CompositeBase
name *IdentifierNode // Optional
TypeParameters *TypeParameterList // Optional
HeritageClauses *HeritageClauseList // Optional
Members *ClassElementList
}
type LiteralLikeNodeBase struct {
Text string
TokenFlags TokenFlags
}
type LiteralExpressionBase struct {
LiteralLikeNodeBase
PrimaryExpressionBase
}
type TemplateLiteralLikeNodeBase struct {
LiteralLikeNodeBase
RawText string
TemplateFlags TokenFlags
}
type TypeElementBase struct{}
type ClassElementBase struct{}
type NamedMemberBase struct {
DeclarationBase
ModifiersBase
name *PropertyName
PostfixToken *TokenNode // Optional
}
type ObjectLiteralElementBase struct{}
type AccessorDeclarationBase struct {
NamedMemberBase
FunctionLikeWithBodyBase
FlowNodeBase
TypeElementBase
ClassElementBase
ObjectLiteralElementBase
CompositeBase
NodeBase
}
type FunctionOrConstructorTypeNodeBase struct {
TypeNodeBase
ModifiersBase
FunctionLikeBase
}
type UnionOrIntersectionTypeNodeBase struct {
TypeNodeBase
Types *TypeList
}
type JSDocTagBase struct {
NodeBase
TagName *IdentifierNode
Comment *NodeList // Optional
}
type JSDocCommentBase struct {
NodeBase
text []string
}
// ──────────────────────────────────────────────────────────────────────
// Node type aliases
// ──────────────────────────────────────────────────────────────────────
type (
TokenNode = Node
IdentifierNode = Node
PrivateIdentifierNode = Node
QualifiedNameNode = Node
ComputedPropertyNameNode = Node
DecoratorNode = Node
EmptyStatementNode = Node
IfStatementNode = Node
DoStatementNode = Node
WhileStatementNode = Node
ForStatementNode = Node
ForInOrOfStatementNode = Node
BreakStatementNode = Node
ContinueStatementNode = Node
ReturnStatementNode = Node
WithStatementNode = Node
SwitchStatementNode = Node
CaseBlockNode = Node
CaseOrDefaultClauseNode = Node
ThrowStatementNode = Node
TryStatementNode = Node
CatchClauseNode = Node
DebuggerStatementNode = Node
LabeledStatementNode = Node
ExpressionStatementNode = Node
BlockNode = Node
VariableStatementNode = Node
VariableDeclarationNode = Node
VariableDeclarationListNode = Node
BindingPatternNode = Node
ParameterDeclarationNode = Node
BindingElementNode = Node
MissingDeclarationNode = Node
FunctionDeclarationNode = Node
ClassDeclarationNode = Node
ClassExpressionNode = Node
HeritageClauseNode = Node
InterfaceDeclarationNode = Node
TypeAliasDeclarationNode = Node
EnumMemberNode = Node
EnumDeclarationNode = Node
ModuleBlockNode = Node
NotEmittedStatementNode = Node
NotEmittedTypeElementNode = Node
ImportDeclarationNode = Node
ExternalModuleReferenceNode = Node
NamespaceImportNode = Node
NamedImportsNode = Node
ExportAssignmentNode = Node
NamespaceExportDeclarationNode = Node
NamespaceExportNode = Node
NamedExportsNode = Node
ExportSpecifierNode = Node
CallSignatureDeclarationNode = Node
ConstructSignatureDeclarationNode = Node
ConstructorDeclarationNode = Node
GetAccessorDeclarationNode = Node
SetAccessorDeclarationNode = Node
IndexSignatureDeclarationNode = Node
MethodSignatureDeclarationNode = Node
MethodDeclarationNode = Node
PropertySignatureDeclarationNode = Node
PropertyDeclarationNode = Node
SemicolonClassElementNode = Node
ClassStaticBlockDeclarationNode = Node
OmittedExpressionNode = Node
KeywordExpressionNode = Node
StringLiteralNode = Node
NumericLiteralNode = Node
BigIntLiteralNode = Node
RegularExpressionLiteralNode = Node
NoSubstitutionTemplateLiteralNode = Node
BinaryExpressionNode = Node
PrefixUnaryExpressionNode = Node
PostfixUnaryExpressionNode = Node
YieldExpressionNode = Node
ArrowFunctionNode = Node
FunctionExpressionNode = Node
AsExpressionNode = Node
SatisfiesExpressionNode = Node
ConditionalExpressionNode = Node
PropertyAccessExpressionNode = Node
ElementAccessExpressionNode = Node
CallExpressionNode = Node
NewExpressionNode = Node
MetaPropertyNode = Node
NonNullExpressionNode = Node
SpreadElementNode = Node
TemplateExpressionNode = Node
TemplateSpanNode = Node
TaggedTemplateExpressionNode = Node
ParenthesizedExpressionNode = Node
ArrayLiteralExpressionNode = Node
ObjectLiteralExpressionNode = Node
SpreadAssignmentNode = Node
PropertyAssignmentNode = Node
ShorthandPropertyAssignmentNode = Node
DeleteExpressionNode = Node
TypeOfExpressionNode = Node
VoidExpressionNode = Node
AwaitExpressionNode = Node
TypeAssertionNode = Node
KeywordTypeNodeNode = Node
UnionTypeNodeNode = Node
IntersectionTypeNodeNode = Node
ConditionalTypeNodeNode = Node
TypeOperatorNodeNode = Node
InferTypeNodeNode = Node
ArrayTypeNodeNode = Node
IndexedAccessTypeNodeNode = Node
TypeReferenceNodeNode = Node
ExpressionWithTypeArgumentsNode = Node
LiteralTypeNodeNode = Node
ThisTypeNodeNode = Node
TypePredicateNodeNode = Node
ImportAttributeNode = Node
ImportAttributesNode = Node
TypeQueryNodeNode = Node
MappedTypeNodeNode = Node
TypeLiteralNodeNode = Node
TupleTypeNodeNode = Node
NamedTupleMemberNode = Node
OptionalTypeNodeNode = Node
RestTypeNodeNode = Node
ParenthesizedTypeNodeNode = Node
FunctionTypeNodeNode = Node
ConstructorTypeNodeNode = Node
TemplateHeadNode = Node
TemplateMiddleNode = Node
TemplateTailNode = Node
TemplateLiteralTypeNodeNode = Node
TemplateLiteralTypeSpanNode = Node
SyntheticExpressionNode = Node
PartiallyEmittedExpressionNode = Node
JsxElementNode = Node
JsxAttributesNode = Node
JsxNamespacedNameNode = Node
JsxOpeningElementNode = Node
JsxSelfClosingElementNode = Node
JsxFragmentNode = Node
JsxOpeningFragmentNode = Node
JsxClosingFragmentNode = Node
JsxAttributeNode = Node
JsxSpreadAttributeNode = Node
JsxClosingElementNode = Node
JsxExpressionNode = Node
JsxTextNode = Node
SyntaxListNode = Node
JSDocNode = Node
JSDocTypeExpressionNode = Node
JSDocNonNullableTypeNode = Node
JSDocNullableTypeNode = Node
JSDocAllTypeNode = Node
JSDocVariadicTypeNode = Node
JSDocOptionalTypeNode = Node
JSDocTypeTagNode = Node
JSDocUnknownTagNode = Node
JSDocTemplateTagNode = Node
JSDocReturnTagNode = Node
JSDocPublicTagNode = Node
JSDocPrivateTagNode = Node
JSDocProtectedTagNode = Node
JSDocReadonlyTagNode = Node
JSDocOverrideTagNode = Node
JSDocDeprecatedTagNode = Node
JSDocSeeTagNode = Node
JSDocImplementsTagNode = Node
JSDocAugmentsTagNode = Node
JSDocSatisfiesTagNode = Node
JSDocThrowsTagNode = Node
JSDocThisTagNode = Node
JSDocImportTagNode = Node
JSDocCallbackTagNode = Node
JSDocOverloadTagNode = Node
JSDocTypedefTagNode = Node
JSDocSignatureNode = Node
JSDocNameReferenceNode = Node
SourceFileNode = Node
ModuleDeclarationNode = Node
ImportEqualsDeclarationNode = Node
ExportDeclarationNode = Node
ImportTypeNodeNode = Node
ImportClauseNode = Node
ImportSpecifierNode = Node
JSDocTextNode = Node
JSDocLinkNode = Node
JSDocLinkPlainNode = Node
JSDocLinkCodeNode = Node
TypeParameterDeclarationNode = Node
SyntheticReferenceExpressionNode = Node
JSDocTypeLiteralNode = Node
JSDocParameterOrPropertyTagNode = Node
EndOfFile = Node
DotToken = Node
DotDotDotToken = Node
QuestionToken = Node
ExclamationToken = Node
ColonToken = Node
EqualsToken = Node
AsteriskToken = Node
EqualsGreaterThanToken = Node
PlusToken = Node
MinusToken = Node
QuestionDotToken = Node
AssertsKeyword = Node
AssertKeyword = Node
AwaitKeyword = Node
CaseKeyword = Node
AbstractKeyword = Node
AccessorKeyword = Node
AsyncKeyword = Node
ConstKeyword = Node
DeclareKeyword = Node
DefaultKeyword = Node
ExportKeyword = Node
InKeyword = Node
PrivateKeyword = Node
ProtectedKeyword = Node
PublicKeyword = Node
ReadonlyKeyword = Node
OutKeyword = Node
OverrideKeyword = Node
StaticKeyword = Node
BinaryOperatorToken = Node
AssignmentOperatorToken = Node
NullLiteral = Node
TrueLiteral = Node
FalseLiteral = Node
ThisExpression = Node
SuperExpression = Node
ImportExpression = Node
)
type (
StatementList = NodeList // NodeList[*Statement]
CaseClausesList = NodeList // NodeList[*CaseOrDefaultClause]
VariableDeclarationNodeList = NodeList // NodeList[*VariableDeclaration]
BindingElementList = NodeList // NodeList[*BindingElement]
TypeParameterList = NodeList // NodeList[*TypeParameterDeclaration]
ParameterList = NodeList // NodeList[*ParameterDeclaration]
HeritageClauseList = NodeList // NodeList[*HeritageClause]
ClassElementList = NodeList // NodeList[*ClassElement]
TypeElementList = NodeList // NodeList[*TypeElement]
ExpressionWithTypeArgumentsList = NodeList // NodeList[*ExpressionWithTypeArguments]
EnumMemberList = NodeList // NodeList[*EnumMember]
ImportSpecifierList = NodeList // NodeList[*ImportSpecifier]
ExportSpecifierList = NodeList // NodeList[*ExportSpecifier]
TypeArgumentList = NodeList // NodeList[*TypeNode]
ArgumentList = NodeList // NodeList[*Expression]
TemplateSpanList = NodeList // NodeList[*TemplateSpan]
ElementList = NodeList // NodeList[*Expression]
PropertyDefinitionList = NodeList // NodeList[*ObjectLiteralElement]
TypeList = NodeList // NodeList[*TypeNode]
ImportAttributeList = NodeList // NodeList[*ImportAttribute]
TemplateLiteralTypeSpanList = NodeList // NodeList[*TemplateLiteralTypeSpan]
JsxChildList = NodeList // NodeList[*JsxChild]
JsxAttributeList = NodeList // NodeList[*JsxAttributeLike]
)
// ──────────────────────────────────────────────────────────────────────
// Node union aliases
// ──────────────────────────────────────────────────────────────────────
type (
Expression = Node // Node with ExpressionBase
Statement = Node // Node with StatementBase
TypeNode = Node // Node with TypeNodeBase
BlockOrExpression = Node // Block | Expression
NodeBody = Node // Block | Expression | ModuleBlock | ModuleDeclaration
AccessExpression = Node // PropertyAccessExpression | ElementAccessExpression
DeclarationName = Node // Identifier | PrivateIdentifier | StringLiteral | NumericLiteral | BigIntLiteral | NoSubstitutionTemplateLiteral | ComputedPropertyName | BindingPattern | ElementAccessExpression
ModuleName = Node // Identifier | StringLiteral
ModuleExportName = Node // Identifier | StringLiteral
PropertyName = Node // Identifier | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier | BigIntLiteral
ModuleBody = Node // ModuleBlock | ModuleDeclaration
JSDocFullName = Node // Identifier | ModuleDeclaration
ForInitializer = Node // Expression | MissingDeclaration | VariableDeclarationList
ModuleReference = Node // Identifier | QualifiedName | ExternalModuleReference
NamedImportBindings = Node // NamespaceImport | NamedImports
NamedExportBindings = Node // NamespaceExport | NamedExports
MemberName = Node // Identifier | PrivateIdentifier
EntityName = Node // Identifier | QualifiedName
BindingName = Node // Identifier | BindingPattern
ModifierLike = Node // Modifier | Decorator
JsxChild = Node // JsxText | JsxExpression | JsxElement | JsxSelfClosingElement | JsxFragment
JsxAttributeLike = Node // JsxAttribute | JsxSpreadAttribute
JsxAttributeName = Node // Identifier | JsxNamespacedName
JsxAttributeValue = Node // StringLiteral | JsxExpression | JsxElement | JsxSelfClosingElement | JsxFragment
JsxTagNameExpression = Node // Identifier | ThisExpression | JsxTagNamePropertyAccess | JsxNamespacedName
ClassLikeDeclaration = Node // ClassDeclaration | ClassExpression
AccessorDeclaration = Node // GetAccessorDeclaration | SetAccessorDeclaration
LiteralLikeNode = Node // StringLiteral | NumericLiteral | BigIntLiteral | RegularExpressionLiteral | TemplateLiteralLikeNode | JsxText
LiteralExpression = Node // StringLiteral | NumericLiteral | BigIntLiteral | RegularExpressionLiteral | NoSubstitutionTemplateLiteral
UnionOrIntersectionTypeNode = Node // UnionTypeNode | IntersectionTypeNode
TemplateLiteralLikeNode = Node // PseudoLiteralSyntaxKind
TemplateMiddleOrTail = Node // TemplateMiddle | TemplateTail
TemplateLiteral = Node // TemplateExpression | NoSubstitutionTemplateLiteral
TypePredicateParameterName = Node // Identifier | ThisTypeNode
ImportAttributeName = Node // Identifier | StringLiteral
LeftHandSideExpression = Node // Node with LeftHandSideExpressionBase
JSDocComment = Node // JSDocText | JSDocLink | JSDocLinkCode | JSDocLinkPlain
SignatureDeclaration = Node // CallSignatureDeclaration | ConstructSignatureDeclaration | MethodSignatureDeclaration | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | FunctionDeclaration | MethodDeclaration | ConstructorDeclaration | AccessorDeclaration | FunctionExpression | ArrowFunction
StringLiteralLikeNode = Node // StringLiteral | NoSubstitutionTemplateLiteral
NumericOrStringLikeLiteral = Node // StringLiteralLikeNode | NumericLiteral
ObjectLiteralLikeNode = Node // ObjectLiteralExpression | ObjectBindingPattern
ObjectTypeDeclaration = Node // ClassLikeDeclaration | InterfaceDeclaration | TypeLiteralNode
JsxOpeningLikeElement = Node // JsxOpeningElement | JsxSelfClosingElement
NamedImportsOrExports = Node // NamedImports | NamedExports
BreakOrContinueStatement = Node // BreakStatement | ContinueStatement
CallLikeExpression = Node // CallExpression | NewExpression | TaggedTemplateExpression | Decorator | JsxOpeningLikeElement | BinaryExpression
FunctionLikeDeclaration = Node // FunctionDeclaration | MethodDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | ConstructorDeclaration | FunctionExpression | ArrowFunction
VariableOrParameterDeclaration = Node // VariableDeclaration | ParameterDeclaration
VariableOrPropertyDeclaration = Node // VariableDeclaration | PropertyDeclaration
CallOrNewExpression = Node // CallExpression | NewExpression
ImportClauseOrBindingPattern = Node // ImportClause | BindingPattern
AnyImportSyntax = Node // ImportDeclaration | ImportEqualsDeclaration
Declaration = Node // Node with DeclarationBase
ClassElement = Node // Node with ClassElementBase
TypeElement = Node // Node with TypeElementBase
ObjectLiteralElement = Node // Node with ObjectLiteralElementBase
JSDocTag = Node // Node with JSDocTagBase
ArrayBindingElement = Node // BindingElement | OmittedExpression
AssertionExpression = Node // TypeAssertion | AsExpression
BooleanLiteral = Node // TrueLiteral | FalseLiteral
ConciseBody = Node // Block | Expression
DestructuringAssignment = Node // ObjectDestructuringAssignment | ArrayDestructuringAssignment
LiteralToken = Node // NumericLiteral | BigIntLiteral | StringLiteral | JsxText | RegularExpressionLiteral | NoSubstitutionTemplateLiteral
Modifier = Node // ModifierSyntaxKind
ObjectLiteralElementLike = Node // PropertyAssignment | ShorthandPropertyAssignment | SpreadAssignment | MethodDeclaration | GetAccessorDeclaration | SetAccessorDeclaration
PropertyNameLiteral = Node // Identifier | StringLiteral | NumericLiteral
PseudoLiteralToken = Node // PseudoLiteralSyntaxKind
TemplateLiteralToken = Node // NoSubstitutionTemplateLiteral | PseudoLiteralToken
ArrayDestructuringAssignment = Node // BinaryExpression
ObjectDestructuringAssignment = Node // BinaryExpression
FunctionBody = Node // Block
IncrementExpression = Node // UpdateExpressionBase
)
// ──────────────────────────────────────────────────────────────────────
// Token
// ──────────────────────────────────────────────────────────────────────
type Token struct {
NodeBase
}
func (f *NodeFactory) NewToken(kind TokenSyntaxKind) *Node {
data := f.tokenArena.New()
return f.newNode(kind, data)
}
func (node *Token) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewToken(node.Kind), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsToken(node *Node) bool {
switch node.Kind {
case KindUnknown, KindEndOfFile, KindSingleLineCommentTrivia, KindMultiLineCommentTrivia, KindNewLineTrivia, KindWhitespaceTrivia, KindConflictMarkerTrivia, KindNonTextFileMarkerTrivia, KindNumericLiteral, KindBigIntLiteral, KindStringLiteral, KindJsxText, KindJsxTextAllWhiteSpaces, KindRegularExpressionLiteral, KindNoSubstitutionTemplateLiteral, KindTemplateHead, KindTemplateMiddle, KindTemplateTail, KindOpenBraceToken, KindCloseBraceToken, KindOpenParenToken, KindCloseParenToken, KindOpenBracketToken, KindCloseBracketToken, KindDotToken, KindDotDotDotToken, KindSemicolonToken, KindCommaToken, KindQuestionDotToken, KindLessThanToken, KindLessThanSlashToken, KindGreaterThanToken, KindLessThanEqualsToken, KindGreaterThanEqualsToken, KindEqualsEqualsToken, KindExclamationEqualsToken, KindEqualsEqualsEqualsToken, KindExclamationEqualsEqualsToken, KindEqualsGreaterThanToken, KindPlusToken, KindMinusToken, KindAsteriskToken, KindAsteriskAsteriskToken, KindSlashToken, KindPercentToken, KindPlusPlusToken, KindMinusMinusToken, KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken, KindAmpersandToken, KindBarToken, KindCaretToken, KindExclamationToken, KindTildeToken, KindAmpersandAmpersandToken, KindBarBarToken, KindQuestionToken, KindColonToken, KindAtToken, KindQuestionQuestionToken, KindBacktickToken, KindHashToken, KindEqualsToken, KindPlusEqualsToken, KindMinusEqualsToken, KindAsteriskEqualsToken, KindAsteriskAsteriskEqualsToken, KindSlashEqualsToken, KindPercentEqualsToken, KindLessThanLessThanEqualsToken, KindGreaterThanGreaterThanEqualsToken, KindGreaterThanGreaterThanGreaterThanEqualsToken, KindAmpersandEqualsToken, KindBarEqualsToken, KindBarBarEqualsToken, KindAmpersandAmpersandEqualsToken, KindQuestionQuestionEqualsToken, KindCaretEqualsToken, KindIdentifier, KindPrivateIdentifier, KindJSDocCommentTextToken, KindBreakKeyword, KindCaseKeyword, KindCatchKeyword, KindClassKeyword, KindConstKeyword, KindContinueKeyword, KindDebuggerKeyword, KindDefaultKeyword, KindDeleteKeyword, KindDoKeyword, KindElseKeyword, KindEnumKeyword, KindExportKeyword, KindExtendsKeyword, KindFalseKeyword, KindFinallyKeyword, KindForKeyword, KindFunctionKeyword, KindIfKeyword, KindImportKeyword, KindInKeyword, KindInstanceOfKeyword, KindNewKeyword, KindNullKeyword, KindReturnKeyword, KindSuperKeyword, KindSwitchKeyword, KindThisKeyword, KindThrowKeyword, KindTrueKeyword, KindTryKeyword, KindTypeOfKeyword, KindVarKeyword, KindVoidKeyword, KindWhileKeyword, KindWithKeyword, KindImplementsKeyword, KindInterfaceKeyword, KindLetKeyword, KindPackageKeyword, KindPrivateKeyword, KindProtectedKeyword, KindPublicKeyword, KindStaticKeyword, KindYieldKeyword, KindAbstractKeyword, KindAccessorKeyword, KindAsKeyword, KindAssertsKeyword, KindAssertKeyword, KindAnyKeyword, KindAsyncKeyword, KindAwaitKeyword, KindBooleanKeyword, KindConstructorKeyword, KindDeclareKeyword, KindGetKeyword, KindImmediateKeyword, KindInferKeyword, KindIntrinsicKeyword, KindIsKeyword, KindKeyOfKeyword, KindModuleKeyword, KindNamespaceKeyword, KindNeverKeyword, KindOutKeyword, KindReadonlyKeyword, KindRequireKeyword, KindNumberKeyword, KindObjectKeyword, KindSatisfiesKeyword, KindSetKeyword, KindStringKeyword, KindSymbolKeyword, KindTypeKeyword, KindUndefinedKeyword, KindUniqueKeyword, KindUnknownKeyword, KindUsingKeyword, KindFromKeyword, KindGlobalKeyword, KindBigIntKeyword, KindOverrideKeyword, KindOfKeyword, KindDeferKeyword:
return true
}
return false
}
// ──────────────────────────────────────────────────────────────────────
// Identifier
// ──────────────────────────────────────────────────────────────────────
type Identifier struct {
PrimaryExpressionBase
FlowNodeBase
Text string
}
func (f *NodeFactory) NewIdentifier(text string) *Node {
data := f.identifierArena.New()
data.Text = text
f.textCount++
return f.newNode(KindIdentifier, data)
}
func (node *Identifier) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewIdentifier(node.Text), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsIdentifier(node *Node) bool {
return node.Kind == KindIdentifier
}
// ──────────────────────────────────────────────────────────────────────
// PrivateIdentifier
// ──────────────────────────────────────────────────────────────────────
type PrivateIdentifier struct {
PrimaryExpressionBase
Text string
}
func (f *NodeFactory) NewPrivateIdentifier(text string) *Node {
data := &PrivateIdentifier{}
data.Text = text
f.textCount++
return f.newNode(KindPrivateIdentifier, data)
}
func (node *PrivateIdentifier) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewPrivateIdentifier(node.Text), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsPrivateIdentifier(node *Node) bool {
return node.Kind == KindPrivateIdentifier
}
// ──────────────────────────────────────────────────────────────────────
// QualifiedName
// ──────────────────────────────────────────────────────────────────────
type QualifiedName struct {
NodeBase
FlowNodeBase
CompositeBase
Left *EntityName
Right *IdentifierNode
}
func (f *NodeFactory) NewQualifiedName(left *EntityName, right *IdentifierNode) *Node {
data := &QualifiedName{}
data.Left = left
data.Right = right
return f.newNode(KindQualifiedName, data)
}
func (f *NodeFactory) UpdateQualifiedName(node *QualifiedName, left *EntityName, right *IdentifierNode) *Node {
if left != node.Left || right != node.Right {
return updateNode(f.NewQualifiedName(left, right), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *QualifiedName) ForEachChild(v Visitor) bool {
return visit(v, node.Left) || visit(v, node.Right)
}
func (node *QualifiedName) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateQualifiedName(node, v.visitNode(node.Left), v.visitNode(node.Right))
}
func (node *QualifiedName) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewQualifiedName(node.Left, node.Right), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *QualifiedName) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Left) |
propagateSubtreeFacts(node.Right)
}
func IsQualifiedName(node *Node) bool {
return node.Kind == KindQualifiedName
}
// ──────────────────────────────────────────────────────────────────────
// ComputedPropertyName
// ──────────────────────────────────────────────────────────────────────
type ComputedPropertyName struct {
NodeBase
CompositeBase
Expression *Expression
}
func (f *NodeFactory) NewComputedPropertyName(expression *Expression) *Node {
data := &ComputedPropertyName{}
data.Expression = expression
return f.newNode(KindComputedPropertyName, data)
}
func (f *NodeFactory) UpdateComputedPropertyName(node *ComputedPropertyName, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewComputedPropertyName(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ComputedPropertyName) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *ComputedPropertyName) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateComputedPropertyName(node, v.visitNode(node.Expression))
}
func (node *ComputedPropertyName) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewComputedPropertyName(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ComputedPropertyName) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsComputedPropertyName(node *Node) bool {
return node.Kind == KindComputedPropertyName
}
// ──────────────────────────────────────────────────────────────────────
// Decorator
// ──────────────────────────────────────────────────────────────────────
type Decorator struct {
NodeBase
CompositeBase
Expression *LeftHandSideExpression
}
func (f *NodeFactory) NewDecorator(expression *LeftHandSideExpression) *Node {
data := &Decorator{}
data.Expression = expression
return f.newNode(KindDecorator, data)
}
func (f *NodeFactory) UpdateDecorator(node *Decorator, expression *LeftHandSideExpression) *Node {
if expression != node.Expression {
return updateNode(f.NewDecorator(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *Decorator) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *Decorator) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateDecorator(node, v.visitNode(node.Expression))
}
func (node *Decorator) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewDecorator(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsDecorator(node *Node) bool {
return node.Kind == KindDecorator
}
// ──────────────────────────────────────────────────────────────────────
// EmptyStatement
// ──────────────────────────────────────────────────────────────────────
type EmptyStatement struct {
StatementBase
}
func (f *NodeFactory) NewEmptyStatement() *Node {
data := &EmptyStatement{}
return f.newNode(KindEmptyStatement, data)
}
func (node *EmptyStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewEmptyStatement(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsEmptyStatement(node *Node) bool {
return node.Kind == KindEmptyStatement
}
// ──────────────────────────────────────────────────────────────────────
// IfStatement
// ──────────────────────────────────────────────────────────────────────
type IfStatement struct {
StatementBase
CompositeBase
Expression *Expression
ThenStatement *Statement
ElseStatement *Statement // Optional
}
func (f *NodeFactory) NewIfStatement(expression *Expression, thenStatement *Statement, elseStatement *Statement) *Node {
data := f.ifStatementArena.New()
data.Expression = expression
data.ThenStatement = thenStatement
data.ElseStatement = elseStatement
return f.newNode(KindIfStatement, data)
}
func (f *NodeFactory) UpdateIfStatement(node *IfStatement, expression *Expression, thenStatement *Statement, elseStatement *Statement) *Node {
if expression != node.Expression || thenStatement != node.ThenStatement || elseStatement != node.ElseStatement {
return updateNode(f.NewIfStatement(expression, thenStatement, elseStatement), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *IfStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.ThenStatement) || visit(v, node.ElseStatement)
}
func (node *IfStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateIfStatement(node, v.visitNode(node.Expression), v.visitEmbeddedStatement(node.ThenStatement), v.visitEmbeddedStatement(node.ElseStatement))
}
func (node *IfStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewIfStatement(node.Expression, node.ThenStatement, node.ElseStatement), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *IfStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression) |
propagateSubtreeFacts(node.ThenStatement) |
propagateSubtreeFacts(node.ElseStatement)
}
func IsIfStatement(node *Node) bool {
return node.Kind == KindIfStatement
}
// ──────────────────────────────────────────────────────────────────────
// DoStatement
// ──────────────────────────────────────────────────────────────────────
type DoStatement struct {
IterationStatementBase
CompositeBase
Expression *Expression
}
func (f *NodeFactory) NewDoStatement(statement *Statement, expression *Expression) *Node {
data := &DoStatement{}
data.Statement = statement
data.Expression = expression
return f.newNode(KindDoStatement, data)
}
func (f *NodeFactory) UpdateDoStatement(node *DoStatement, statement *Statement, expression *Expression) *Node {
if statement != node.Statement || expression != node.Expression {
return updateNode(f.NewDoStatement(statement, expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *DoStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Statement) || visit(v, node.Expression)
}
func (node *DoStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateDoStatement(node, v.visitIterationBody(node.Statement), v.visitNode(node.Expression))
}
func (node *DoStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewDoStatement(node.Statement, node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *DoStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Statement) |
propagateSubtreeFacts(node.Expression)
}
func IsDoStatement(node *Node) bool {
return node.Kind == KindDoStatement
}
// ──────────────────────────────────────────────────────────────────────
// WhileStatement
// ──────────────────────────────────────────────────────────────────────
type WhileStatement struct {
IterationStatementBase
CompositeBase
Expression *Expression
}
func (f *NodeFactory) NewWhileStatement(expression *Expression, statement *Statement) *Node {
data := &WhileStatement{}
data.Expression = expression
data.Statement = statement
return f.newNode(KindWhileStatement, data)
}
func (f *NodeFactory) UpdateWhileStatement(node *WhileStatement, expression *Expression, statement *Statement) *Node {
if expression != node.Expression || statement != node.Statement {
return updateNode(f.NewWhileStatement(expression, statement), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *WhileStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.Statement)
}
func (node *WhileStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateWhileStatement(node, v.visitNode(node.Expression), v.visitIterationBody(node.Statement))
}
func (node *WhileStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewWhileStatement(node.Expression, node.Statement), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *WhileStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression) |
propagateSubtreeFacts(node.Statement)
}
func IsWhileStatement(node *Node) bool {
return node.Kind == KindWhileStatement
}
// ──────────────────────────────────────────────────────────────────────
// ForStatement
// ──────────────────────────────────────────────────────────────────────
type ForStatement struct {
IterationStatementBase
LocalsContainerBase
CompositeBase
Initializer *ForInitializer // Optional
Condition *Expression // Optional
Incrementor *Expression // Optional
}
func (f *NodeFactory) NewForStatement(initializer *ForInitializer, condition *Expression, incrementor *Expression, statement *Statement) *Node {
data := &ForStatement{}
data.Initializer = initializer
data.Condition = condition
data.Incrementor = incrementor
data.Statement = statement
return f.newNode(KindForStatement, data)
}
func (f *NodeFactory) UpdateForStatement(node *ForStatement, initializer *ForInitializer, condition *Expression, incrementor *Expression, statement *Statement) *Node {
if initializer != node.Initializer || condition != node.Condition || incrementor != node.Incrementor || statement != node.Statement {
return updateNode(f.NewForStatement(initializer, condition, incrementor, statement), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ForStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Initializer) ||
visit(v, node.Condition) ||
visit(v, node.Incrementor) ||
visit(v, node.Statement)
}
func (node *ForStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateForStatement(node, v.visitNode(node.Initializer), v.visitNode(node.Condition), v.visitNode(node.Incrementor), v.visitIterationBody(node.Statement))
}
func (node *ForStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewForStatement(node.Initializer, node.Condition, node.Incrementor, node.Statement), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ForStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Initializer) |
propagateSubtreeFacts(node.Condition) |
propagateSubtreeFacts(node.Incrementor) |
propagateSubtreeFacts(node.Statement)
}
func IsForStatement(node *Node) bool {
return node.Kind == KindForStatement
}
// ──────────────────────────────────────────────────────────────────────
// ForInOrOfStatement
// ──────────────────────────────────────────────────────────────────────
type ForInOrOfStatement struct {
StatementBase
LocalsContainerBase
CompositeBase
AwaitModifier *AwaitKeyword // Optional
Initializer *ForInitializer
Expression *Expression
Statement *Statement
}
func (f *NodeFactory) NewForInOrOfStatement(kind Kind, awaitModifier *AwaitKeyword, initializer *ForInitializer, expression *Expression, statement *Statement) *Node {
data := &ForInOrOfStatement{}
data.AwaitModifier = awaitModifier
data.Initializer = initializer
data.Expression = expression
data.Statement = statement
return f.newNode(kind, data)
}
func (f *NodeFactory) UpdateForInOrOfStatement(node *ForInOrOfStatement, awaitModifier *AwaitKeyword, initializer *ForInitializer, expression *Expression, statement *Statement) *Node {
if awaitModifier != node.AwaitModifier || initializer != node.Initializer || expression != node.Expression || statement != node.Statement {
return updateNode(f.NewForInOrOfStatement(node.Kind, awaitModifier, initializer, expression, statement), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ForInOrOfStatement) ForEachChild(v Visitor) bool {
return visit(v, node.AwaitModifier) ||
visit(v, node.Initializer) ||
visit(v, node.Expression) ||
visit(v, node.Statement)
}
func (node *ForInOrOfStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateForInOrOfStatement(node, v.visitNode(node.AwaitModifier), v.visitNode(node.Initializer), v.visitNode(node.Expression), v.visitIterationBody(node.Statement))
}
func (node *ForInOrOfStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewForInOrOfStatement(node.Kind, node.AwaitModifier, node.Initializer, node.Expression, node.Statement), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsForInStatement(node *Node) bool {
return node.Kind == KindForInStatement
}
func IsForOfStatement(node *Node) bool {
return node.Kind == KindForOfStatement
}
// ──────────────────────────────────────────────────────────────────────
// BreakStatement
// ──────────────────────────────────────────────────────────────────────
type BreakStatement struct {
StatementBase
Label *IdentifierNode // Optional
}
func (f *NodeFactory) NewBreakStatement(label *IdentifierNode) *Node {
data := &BreakStatement{}
data.Label = label
return f.newNode(KindBreakStatement, data)
}
func (f *NodeFactory) UpdateBreakStatement(node *BreakStatement, label *IdentifierNode) *Node {
if label != node.Label {
return updateNode(f.NewBreakStatement(label), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *BreakStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Label)
}
func (node *BreakStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateBreakStatement(node, v.visitNode(node.Label))
}
func (node *BreakStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewBreakStatement(node.Label), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsBreakStatement(node *Node) bool {
return node.Kind == KindBreakStatement
}
// ──────────────────────────────────────────────────────────────────────
// ContinueStatement
// ──────────────────────────────────────────────────────────────────────
type ContinueStatement struct {
StatementBase
Label *IdentifierNode // Optional
}
func (f *NodeFactory) NewContinueStatement(label *IdentifierNode) *Node {
data := &ContinueStatement{}
data.Label = label
return f.newNode(KindContinueStatement, data)
}
func (f *NodeFactory) UpdateContinueStatement(node *ContinueStatement, label *IdentifierNode) *Node {
if label != node.Label {
return updateNode(f.NewContinueStatement(label), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ContinueStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Label)
}
func (node *ContinueStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateContinueStatement(node, v.visitNode(node.Label))
}
func (node *ContinueStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewContinueStatement(node.Label), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsContinueStatement(node *Node) bool {
return node.Kind == KindContinueStatement
}
// ──────────────────────────────────────────────────────────────────────
// ReturnStatement
// ──────────────────────────────────────────────────────────────────────
type ReturnStatement struct {
StatementBase
CompositeBase
Expression *Expression // Optional
}
func (f *NodeFactory) NewReturnStatement(expression *Expression) *Node {
data := f.returnStatementArena.New()
data.Expression = expression
return f.newNode(KindReturnStatement, data)
}
func (f *NodeFactory) UpdateReturnStatement(node *ReturnStatement, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewReturnStatement(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ReturnStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *ReturnStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateReturnStatement(node, v.visitNode(node.Expression))
}
func (node *ReturnStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewReturnStatement(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsReturnStatement(node *Node) bool {
return node.Kind == KindReturnStatement
}
// ──────────────────────────────────────────────────────────────────────
// WithStatement
// ──────────────────────────────────────────────────────────────────────
type WithStatement struct {
StatementBase
CompositeBase
Expression *Expression
Statement *Statement
}
func (f *NodeFactory) NewWithStatement(expression *Expression, statement *Statement) *Node {
data := &WithStatement{}
data.Expression = expression
data.Statement = statement
return f.newNode(KindWithStatement, data)
}
func (f *NodeFactory) UpdateWithStatement(node *WithStatement, expression *Expression, statement *Statement) *Node {
if expression != node.Expression || statement != node.Statement {
return updateNode(f.NewWithStatement(expression, statement), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *WithStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.Statement)
}
func (node *WithStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateWithStatement(node, v.visitNode(node.Expression), v.visitEmbeddedStatement(node.Statement))
}
func (node *WithStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewWithStatement(node.Expression, node.Statement), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *WithStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression) |
propagateSubtreeFacts(node.Statement)
}
func IsWithStatement(node *Node) bool {
return node.Kind == KindWithStatement
}
// ──────────────────────────────────────────────────────────────────────
// SwitchStatement
// ──────────────────────────────────────────────────────────────────────
type SwitchStatement struct {
StatementBase
CompositeBase
Expression *Expression
CaseBlock *CaseBlockNode
}
func (f *NodeFactory) NewSwitchStatement(expression *Expression, caseBlock *CaseBlockNode) *Node {
data := &SwitchStatement{}
data.Expression = expression
data.CaseBlock = caseBlock
return f.newNode(KindSwitchStatement, data)
}
func (f *NodeFactory) UpdateSwitchStatement(node *SwitchStatement, expression *Expression, caseBlock *CaseBlockNode) *Node {
if expression != node.Expression || caseBlock != node.CaseBlock {
return updateNode(f.NewSwitchStatement(expression, caseBlock), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *SwitchStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.CaseBlock)
}
func (node *SwitchStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateSwitchStatement(node, v.visitNode(node.Expression), v.visitNode(node.CaseBlock))
}
func (node *SwitchStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSwitchStatement(node.Expression, node.CaseBlock), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *SwitchStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression) |
propagateSubtreeFacts(node.CaseBlock)
}
func IsSwitchStatement(node *Node) bool {
return node.Kind == KindSwitchStatement
}
// ──────────────────────────────────────────────────────────────────────
// CaseBlock
// ──────────────────────────────────────────────────────────────────────
type CaseBlock struct {
NodeBase
LocalsContainerBase
CompositeBase
Clauses *CaseClausesList
}
func (f *NodeFactory) NewCaseBlock(clauses *CaseClausesList) *Node {
data := &CaseBlock{}
data.Clauses = clauses
return f.newNode(KindCaseBlock, data)
}
func (f *NodeFactory) UpdateCaseBlock(node *CaseBlock, clauses *CaseClausesList) *Node {
if clauses != node.Clauses {
return updateNode(f.NewCaseBlock(clauses), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *CaseBlock) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Clauses)
}
func (node *CaseBlock) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateCaseBlock(node, v.visitNodes(node.Clauses))
}
func (node *CaseBlock) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewCaseBlock(node.Clauses), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *CaseBlock) computeSubtreeFacts() SubtreeFacts {
return propagateNodeListSubtreeFacts(node.Clauses, propagateSubtreeFacts)
}
func IsCaseBlock(node *Node) bool {
return node.Kind == KindCaseBlock
}
// ──────────────────────────────────────────────────────────────────────
// CaseOrDefaultClause
// ──────────────────────────────────────────────────────────────────────
type CaseOrDefaultClause struct {
NodeBase
CompositeBase
Expression *Expression
Statements *StatementList
FallthroughFlowNode *FlowNode
}
func (f *NodeFactory) NewCaseOrDefaultClause(kind Kind, expression *Expression, statements *StatementList) *Node {
data := &CaseOrDefaultClause{}
data.Expression = expression
data.Statements = statements
return f.newNode(kind, data)
}
func (f *NodeFactory) UpdateCaseOrDefaultClause(node *CaseOrDefaultClause, expression *Expression, statements *StatementList) *Node {
if expression != node.Expression || statements != node.Statements {
return updateNode(f.NewCaseOrDefaultClause(node.Kind, expression, statements), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *CaseOrDefaultClause) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visitNodeList(v, node.Statements)
}
func (node *CaseOrDefaultClause) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateCaseOrDefaultClause(node, v.visitNode(node.Expression), v.visitNodes(node.Statements))
}
func (node *CaseOrDefaultClause) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewCaseOrDefaultClause(node.Kind, node.Expression, node.Statements), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *CaseOrDefaultClause) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression) |
propagateNodeListSubtreeFacts(node.Statements, propagateSubtreeFacts)
}
func IsCaseClause(node *Node) bool {
return node.Kind == KindCaseClause
}
func IsDefaultClause(node *Node) bool {
return node.Kind == KindDefaultClause
}
// ──────────────────────────────────────────────────────────────────────
// ThrowStatement
// ──────────────────────────────────────────────────────────────────────
type ThrowStatement struct {
StatementBase
CompositeBase
Expression *Expression
}
func (f *NodeFactory) NewThrowStatement(expression *Expression) *Node {
data := &ThrowStatement{}
data.Expression = expression
return f.newNode(KindThrowStatement, data)
}
func (f *NodeFactory) UpdateThrowStatement(node *ThrowStatement, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewThrowStatement(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ThrowStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *ThrowStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateThrowStatement(node, v.visitNode(node.Expression))
}
func (node *ThrowStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewThrowStatement(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ThrowStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsThrowStatement(node *Node) bool {
return node.Kind == KindThrowStatement
}
// ──────────────────────────────────────────────────────────────────────
// TryStatement
// ──────────────────────────────────────────────────────────────────────
type TryStatement struct {
StatementBase
CompositeBase
TryBlock *BlockNode
CatchClause *CatchClauseNode // Optional
FinallyBlock *BlockNode // Optional
}
func (f *NodeFactory) NewTryStatement(tryBlock *BlockNode, catchClause *CatchClauseNode, finallyBlock *BlockNode) *Node {
data := &TryStatement{}
data.TryBlock = tryBlock
data.CatchClause = catchClause
data.FinallyBlock = finallyBlock
return f.newNode(KindTryStatement, data)
}
func (f *NodeFactory) UpdateTryStatement(node *TryStatement, tryBlock *BlockNode, catchClause *CatchClauseNode, finallyBlock *BlockNode) *Node {
if tryBlock != node.TryBlock || catchClause != node.CatchClause || finallyBlock != node.FinallyBlock {
return updateNode(f.NewTryStatement(tryBlock, catchClause, finallyBlock), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TryStatement) ForEachChild(v Visitor) bool {
return visit(v, node.TryBlock) || visit(v, node.CatchClause) || visit(v, node.FinallyBlock)
}
func (node *TryStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTryStatement(node, v.visitNode(node.TryBlock), v.visitNode(node.CatchClause), v.visitNode(node.FinallyBlock))
}
func (node *TryStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTryStatement(node.TryBlock, node.CatchClause, node.FinallyBlock), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *TryStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.TryBlock) |
propagateSubtreeFacts(node.CatchClause) |
propagateSubtreeFacts(node.FinallyBlock)
}
func IsTryStatement(node *Node) bool {
return node.Kind == KindTryStatement
}
// ──────────────────────────────────────────────────────────────────────
// CatchClause
// ──────────────────────────────────────────────────────────────────────
type CatchClause struct {
NodeBase
LocalsContainerBase
CompositeBase
VariableDeclaration *VariableDeclarationNode // Optional
Block *BlockNode
}
func (f *NodeFactory) NewCatchClause(variableDeclaration *VariableDeclarationNode, block *BlockNode) *Node {
data := &CatchClause{}
data.VariableDeclaration = variableDeclaration
data.Block = block
return f.newNode(KindCatchClause, data)
}
func (f *NodeFactory) UpdateCatchClause(node *CatchClause, variableDeclaration *VariableDeclarationNode, block *BlockNode) *Node {
if variableDeclaration != node.VariableDeclaration || block != node.Block {
return updateNode(f.NewCatchClause(variableDeclaration, block), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *CatchClause) ForEachChild(v Visitor) bool {
return visit(v, node.VariableDeclaration) || visit(v, node.Block)
}
func (node *CatchClause) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateCatchClause(node, v.visitNode(node.VariableDeclaration), v.visitNode(node.Block))
}
func (node *CatchClause) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewCatchClause(node.VariableDeclaration, node.Block), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsCatchClause(node *Node) bool {
return node.Kind == KindCatchClause
}
// ──────────────────────────────────────────────────────────────────────
// DebuggerStatement
// ──────────────────────────────────────────────────────────────────────
type DebuggerStatement struct {
StatementBase
}
func (f *NodeFactory) NewDebuggerStatement() *Node {
data := &DebuggerStatement{}
return f.newNode(KindDebuggerStatement, data)
}
func (node *DebuggerStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewDebuggerStatement(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsDebuggerStatement(node *Node) bool {
return node.Kind == KindDebuggerStatement
}
// ──────────────────────────────────────────────────────────────────────
// LabeledStatement
// ──────────────────────────────────────────────────────────────────────
type LabeledStatement struct {
StatementBase
Label *IdentifierNode
Statement *Statement
}
func (f *NodeFactory) NewLabeledStatement(label *IdentifierNode, statement *Statement) *Node {
data := &LabeledStatement{}
data.Label = label
data.Statement = statement
return f.newNode(KindLabeledStatement, data)
}
func (f *NodeFactory) UpdateLabeledStatement(node *LabeledStatement, label *IdentifierNode, statement *Statement) *Node {
if label != node.Label || statement != node.Statement {
return updateNode(f.NewLabeledStatement(label, statement), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *LabeledStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Label) || visit(v, node.Statement)
}
func (node *LabeledStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateLabeledStatement(node, v.visitNode(node.Label), v.visitEmbeddedStatement(node.Statement))
}
func (node *LabeledStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewLabeledStatement(node.Label, node.Statement), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *LabeledStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Label) |
propagateSubtreeFacts(node.Statement)
}
func IsLabeledStatement(node *Node) bool {
return node.Kind == KindLabeledStatement
}
// ──────────────────────────────────────────────────────────────────────
// ExpressionStatement
// ──────────────────────────────────────────────────────────────────────
type ExpressionStatement struct {
StatementBase
Expression *Expression
}
func (f *NodeFactory) NewExpressionStatement(expression *Expression) *Node {
data := f.expressionStatementArena.New()
data.Expression = expression
return f.newNode(KindExpressionStatement, data)
}
func (f *NodeFactory) UpdateExpressionStatement(node *ExpressionStatement, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewExpressionStatement(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ExpressionStatement) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *ExpressionStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateExpressionStatement(node, v.visitNode(node.Expression))
}
func (node *ExpressionStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewExpressionStatement(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ExpressionStatement) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsExpressionStatement(node *Node) bool {
return node.Kind == KindExpressionStatement
}
// ──────────────────────────────────────────────────────────────────────
// Block
// ──────────────────────────────────────────────────────────────────────
type Block struct {
StatementBase
LocalsContainerBase
CompositeBase
Statements *StatementList
MultiLine bool
}
func (f *NodeFactory) NewBlock(statements *StatementList, multiLine bool) *Node {
data := f.blockArena.New()
data.Statements = statements
data.MultiLine = multiLine
return f.newNode(KindBlock, data)
}
func (f *NodeFactory) UpdateBlock(node *Block, statements *StatementList, multiLine bool) *Node {
if statements != node.Statements || multiLine != node.MultiLine {
return updateNode(f.NewBlock(statements, multiLine), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *Block) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Statements)
}
func (node *Block) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateBlock(node, v.visitNodes(node.Statements), node.MultiLine)
}
func (node *Block) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewBlock(node.Statements, node.MultiLine), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *Block) computeSubtreeFacts() SubtreeFacts {
return propagateNodeListSubtreeFacts(node.Statements, propagateSubtreeFacts)
}
func IsBlock(node *Node) bool {
return node.Kind == KindBlock
}
// ──────────────────────────────────────────────────────────────────────
// VariableStatement
// ──────────────────────────────────────────────────────────────────────
type VariableStatement struct {
StatementBase
ModifiersBase
CompositeBase
DeclarationList *VariableDeclarationListNode
}
func (f *NodeFactory) NewVariableStatement(modifiers *ModifierList, declarationList *VariableDeclarationListNode) *Node {
data := f.variableStatementArena.New()
data.modifiers = modifiers
data.DeclarationList = declarationList
return f.newNode(KindVariableStatement, data)
}
func (f *NodeFactory) UpdateVariableStatement(node *VariableStatement, modifiers *ModifierList, declarationList *VariableDeclarationListNode) *Node {
if modifiers != node.modifiers || declarationList != node.DeclarationList {
return updateNode(f.NewVariableStatement(modifiers, declarationList), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *VariableStatement) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) || visit(v, node.DeclarationList)
}
func (node *VariableStatement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateVariableStatement(node, v.visitModifiers(node.modifiers), v.visitNode(node.DeclarationList))
}
func (node *VariableStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewVariableStatement(node.Modifiers(), node.DeclarationList), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsVariableStatement(node *Node) bool {
return node.Kind == KindVariableStatement
}
// ──────────────────────────────────────────────────────────────────────
// VariableDeclaration
// ──────────────────────────────────────────────────────────────────────
type VariableDeclaration struct {
NodeBase
DeclarationBase
ExportableBase
CompositeBase
name *BindingName
ExclamationToken *ExclamationToken // Optional
Type *TypeNode // Optional
Initializer *Expression // Optional
}
func (f *NodeFactory) NewVariableDeclaration(name *BindingName, exclamationToken *ExclamationToken, typeNode *TypeNode, initializer *Expression) *Node {
data := f.variableDeclarationArena.New()
data.name = name
data.ExclamationToken = exclamationToken
data.Type = typeNode
data.Initializer = initializer
return f.newNode(KindVariableDeclaration, data)
}
func (f *NodeFactory) UpdateVariableDeclaration(node *VariableDeclaration, name *BindingName, exclamationToken *ExclamationToken, typeNode *TypeNode, initializer *Expression) *Node {
if name != node.name || exclamationToken != node.ExclamationToken || typeNode != node.Type || initializer != node.Initializer {
return updateNode(f.NewVariableDeclaration(name, exclamationToken, typeNode, initializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *VariableDeclaration) ForEachChild(v Visitor) bool {
return visit(v, node.name) ||
visit(v, node.ExclamationToken) ||
visit(v, node.Type) ||
visit(v, node.Initializer)
}
func (node *VariableDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateVariableDeclaration(node, v.visitNode(node.name), v.visitNode(node.ExclamationToken), v.visitNode(node.Type), v.visitNode(node.Initializer))
}
func (node *VariableDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewVariableDeclaration(node.name, node.ExclamationToken, node.Type, node.Initializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *VariableDeclaration) Name() *DeclarationName {
return node.name
}
func IsVariableDeclaration(node *Node) bool {
return node.Kind == KindVariableDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// VariableDeclarationList
// ──────────────────────────────────────────────────────────────────────
type VariableDeclarationList struct {
NodeBase
CompositeBase
Declarations *VariableDeclarationNodeList
}
func (f *NodeFactory) NewVariableDeclarationList(declarations *VariableDeclarationNodeList, flags NodeFlags) *Node {
data := f.variableDeclarationListArena.New()
data.Declarations = declarations
node := f.newNode(KindVariableDeclarationList, data)
node.Flags = flags
return node
}
func (f *NodeFactory) UpdateVariableDeclarationList(node *VariableDeclarationList, declarations *VariableDeclarationNodeList, flags NodeFlags) *Node {
if declarations != node.Declarations || flags != node.Flags {
return updateNode(f.NewVariableDeclarationList(declarations, flags), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *VariableDeclarationList) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Declarations)
}
func (node *VariableDeclarationList) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateVariableDeclarationList(node, v.visitNodes(node.Declarations), node.Flags)
}
func (node *VariableDeclarationList) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewVariableDeclarationList(node.Declarations, node.Flags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsVariableDeclarationList(node *Node) bool {
return node.Kind == KindVariableDeclarationList
}
// ──────────────────────────────────────────────────────────────────────
// BindingPattern
// ──────────────────────────────────────────────────────────────────────
type BindingPattern struct {
NodeBase
CompositeBase
Elements *BindingElementList
}
func (f *NodeFactory) NewBindingPattern(kind Kind, elements *BindingElementList) *Node {
data := &BindingPattern{}
data.Elements = elements
return f.newNode(kind, data)
}
func (f *NodeFactory) UpdateBindingPattern(node *BindingPattern, elements *BindingElementList) *Node {
if elements != node.Elements {
return updateNode(f.NewBindingPattern(node.Kind, elements), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *BindingPattern) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Elements)
}
func (node *BindingPattern) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateBindingPattern(node, v.visitNodes(node.Elements))
}
func (node *BindingPattern) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewBindingPattern(node.Kind, node.Elements), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsObjectBindingPattern(node *Node) bool {
return node.Kind == KindObjectBindingPattern
}
func IsArrayBindingPattern(node *Node) bool {
return node.Kind == KindArrayBindingPattern
}
// ──────────────────────────────────────────────────────────────────────
// ParameterDeclaration
// ──────────────────────────────────────────────────────────────────────
type ParameterDeclaration struct {
NodeBase
DeclarationBase
ModifiersBase
CompositeBase
DotDotDotToken *DotDotDotToken // Optional
name *BindingName
QuestionToken *QuestionToken // Optional
Type *TypeNode // Optional
Initializer *Expression // Optional
}
func (f *NodeFactory) NewParameterDeclaration(modifiers *ModifierList, dotDotDotToken *DotDotDotToken, name *BindingName, questionToken *QuestionToken, typeNode *TypeNode, initializer *Expression) *Node {
data := f.parameterDeclarationArena.New()
data.modifiers = modifiers
data.DotDotDotToken = dotDotDotToken
data.name = name
data.QuestionToken = questionToken
data.Type = typeNode
data.Initializer = initializer
return f.newNode(KindParameter, data)
}
func (f *NodeFactory) UpdateParameterDeclaration(node *ParameterDeclaration, modifiers *ModifierList, dotDotDotToken *DotDotDotToken, name *BindingName, questionToken *QuestionToken, typeNode *TypeNode, initializer *Expression) *Node {
if modifiers != node.modifiers || dotDotDotToken != node.DotDotDotToken || name != node.name || questionToken != node.QuestionToken || typeNode != node.Type || initializer != node.Initializer {
return updateNode(f.NewParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, typeNode, initializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ParameterDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.DotDotDotToken) ||
visit(v, node.name) ||
visit(v, node.QuestionToken) ||
visit(v, node.Type) ||
visit(v, node.Initializer)
}
func (node *ParameterDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateParameterDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.DotDotDotToken), v.visitNode(node.name), v.visitNode(node.QuestionToken), v.visitNode(node.Type), v.visitNode(node.Initializer))
}
func (node *ParameterDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewParameterDeclaration(node.Modifiers(), node.DotDotDotToken, node.name, node.QuestionToken, node.Type, node.Initializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ParameterDeclaration) Name() *DeclarationName {
return node.name
}
func IsParameterDeclaration(node *Node) bool {
return node.Kind == KindParameter
}
// ──────────────────────────────────────────────────────────────────────
// BindingElement
// ──────────────────────────────────────────────────────────────────────
type BindingElement struct {
NodeBase
DeclarationBase
ExportableBase
FlowNodeBase
CompositeBase
DotDotDotToken *DotDotDotToken // Optional
PropertyName *PropertyName // Optional
name *BindingName // Optional
Initializer *Expression // Optional
}
func (f *NodeFactory) NewBindingElement(dotDotDotToken *DotDotDotToken, propertyName *PropertyName, name *BindingName, initializer *Expression) *Node {
data := &BindingElement{}
data.DotDotDotToken = dotDotDotToken
data.PropertyName = propertyName
data.name = name
data.Initializer = initializer
return f.newNode(KindBindingElement, data)
}
func (f *NodeFactory) UpdateBindingElement(node *BindingElement, dotDotDotToken *DotDotDotToken, propertyName *PropertyName, name *BindingName, initializer *Expression) *Node {
if dotDotDotToken != node.DotDotDotToken || propertyName != node.PropertyName || name != node.name || initializer != node.Initializer {
return updateNode(f.NewBindingElement(dotDotDotToken, propertyName, name, initializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *BindingElement) ForEachChild(v Visitor) bool {
return visit(v, node.DotDotDotToken) ||
visit(v, node.PropertyName) ||
visit(v, node.name) ||
visit(v, node.Initializer)
}
func (node *BindingElement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateBindingElement(node, v.visitNode(node.DotDotDotToken), v.visitNode(node.PropertyName), v.visitNode(node.name), v.visitNode(node.Initializer))
}
func (node *BindingElement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewBindingElement(node.DotDotDotToken, node.PropertyName, node.name, node.Initializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *BindingElement) Name() *DeclarationName {
return node.name
}
func IsBindingElement(node *Node) bool {
return node.Kind == KindBindingElement
}
// ──────────────────────────────────────────────────────────────────────
// MissingDeclaration
// ──────────────────────────────────────────────────────────────────────
type MissingDeclaration struct {
StatementBase
DeclarationBase
ModifiersBase
}
func (f *NodeFactory) NewMissingDeclaration(modifiers *ModifierList) *Node {
data := &MissingDeclaration{}
data.modifiers = modifiers
return f.newNode(KindMissingDeclaration, data)
}
func (f *NodeFactory) UpdateMissingDeclaration(node *MissingDeclaration, modifiers *ModifierList) *Node {
if modifiers != node.modifiers {
return updateNode(f.NewMissingDeclaration(modifiers), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *MissingDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers)
}
func (node *MissingDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateMissingDeclaration(node, v.visitModifiers(node.modifiers))
}
func (node *MissingDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewMissingDeclaration(node.Modifiers()), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsMissingDeclaration(node *Node) bool {
return node.Kind == KindMissingDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// FunctionDeclaration
// ──────────────────────────────────────────────────────────────────────
type FunctionDeclaration struct {
DeclarationBase
StatementBase
ExportableBase
ModifiersBase
FunctionLikeWithBodyBase
CompositeBase
name *IdentifierNode // Optional
ReturnFlowNode *FlowNode
}
func (f *NodeFactory) NewFunctionDeclaration(modifiers *ModifierList, asteriskToken *AsteriskToken, name *IdentifierNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
data := f.functionDeclarationArena.New()
data.modifiers = modifiers
data.AsteriskToken = asteriskToken
data.name = name
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
data.FullSignature = fullSignature
data.Body = body
return f.newNode(KindFunctionDeclaration, data)
}
func (f *NodeFactory) UpdateFunctionDeclaration(node *FunctionDeclaration, modifiers *ModifierList, asteriskToken *AsteriskToken, name *IdentifierNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
if modifiers != node.modifiers || asteriskToken != node.AsteriskToken || name != node.name || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type || fullSignature != node.FullSignature || body != node.Body {
return updateNode(f.NewFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, typeNode, fullSignature, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *FunctionDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.AsteriskToken) ||
visit(v, node.name) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type) ||
visit(v, node.FullSignature) ||
visit(v, node.Body)
}
func (node *FunctionDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateFunctionDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.AsteriskToken), v.visitNode(node.name), v.visitNodes(node.TypeParameters), v.visitParameters(node.Parameters), v.visitNode(node.Type), v.visitNode(node.FullSignature), v.visitFunctionBody(node.Body))
}
func (node *FunctionDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewFunctionDeclaration(node.Modifiers(), node.AsteriskToken, node.name, node.TypeParameters, node.Parameters, node.Type, node.FullSignature, node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *FunctionDeclaration) Name() *DeclarationName {
return node.name
}
func IsFunctionDeclaration(node *Node) bool {
return node.Kind == KindFunctionDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// ClassDeclaration
// ──────────────────────────────────────────────────────────────────────
type ClassDeclaration struct {
DeclarationBase
StatementBase
ClassLikeBase
}
func (f *NodeFactory) NewClassDeclaration(modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, heritageClauses *HeritageClauseList, members *ClassElementList) *Node {
data := &ClassDeclaration{}
data.modifiers = modifiers
data.name = name
data.TypeParameters = typeParameters
data.HeritageClauses = heritageClauses
data.Members = members
return f.newNode(KindClassDeclaration, data)
}
func (f *NodeFactory) UpdateClassDeclaration(node *ClassDeclaration, modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, heritageClauses *HeritageClauseList, members *ClassElementList) *Node {
if modifiers != node.modifiers || name != node.name || typeParameters != node.TypeParameters || heritageClauses != node.HeritageClauses || members != node.Members {
return updateNode(f.NewClassDeclaration(modifiers, name, typeParameters, heritageClauses, members), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ClassDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.HeritageClauses) ||
visitNodeList(v, node.Members)
}
func (node *ClassDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateClassDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNodes(node.TypeParameters), v.visitNodes(node.HeritageClauses), v.visitNodes(node.Members))
}
func (node *ClassDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewClassDeclaration(node.Modifiers(), node.name, node.TypeParameters, node.HeritageClauses, node.Members), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ClassDeclaration) Name() *DeclarationName {
return node.name
}
func IsClassDeclaration(node *Node) bool {
return node.Kind == KindClassDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// ClassExpression
// ──────────────────────────────────────────────────────────────────────
type ClassExpression struct {
PrimaryExpressionBase
ClassLikeBase
}
func (f *NodeFactory) NewClassExpression(modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, heritageClauses *HeritageClauseList, members *ClassElementList) *Node {
data := &ClassExpression{}
data.modifiers = modifiers
data.name = name
data.TypeParameters = typeParameters
data.HeritageClauses = heritageClauses
data.Members = members
return f.newNode(KindClassExpression, data)
}
func (f *NodeFactory) UpdateClassExpression(node *ClassExpression, modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, heritageClauses *HeritageClauseList, members *ClassElementList) *Node {
if modifiers != node.modifiers || name != node.name || typeParameters != node.TypeParameters || heritageClauses != node.HeritageClauses || members != node.Members {
return updateNode(f.NewClassExpression(modifiers, name, typeParameters, heritageClauses, members), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ClassExpression) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.HeritageClauses) ||
visitNodeList(v, node.Members)
}
func (node *ClassExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateClassExpression(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNodes(node.TypeParameters), v.visitNodes(node.HeritageClauses), v.visitNodes(node.Members))
}
func (node *ClassExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewClassExpression(node.Modifiers(), node.name, node.TypeParameters, node.HeritageClauses, node.Members), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ClassExpression) Name() *DeclarationName {
return node.name
}
func IsClassExpression(node *Node) bool {
return node.Kind == KindClassExpression
}
// ──────────────────────────────────────────────────────────────────────
// HeritageClause
// ──────────────────────────────────────────────────────────────────────
type HeritageClause struct {
NodeBase
CompositeBase
Token Kind
Types *ExpressionWithTypeArgumentsList
}
func (f *NodeFactory) NewHeritageClause(token Kind, types *ExpressionWithTypeArgumentsList) *Node {
data := f.heritageClauseArena.New()
data.Token = token
data.Types = types
return f.newNode(KindHeritageClause, data)
}
func (f *NodeFactory) UpdateHeritageClause(node *HeritageClause, token Kind, types *ExpressionWithTypeArgumentsList) *Node {
if token != node.Token || types != node.Types {
return updateNode(f.NewHeritageClause(token, types), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *HeritageClause) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Types)
}
func (node *HeritageClause) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateHeritageClause(node, node.Token, v.visitNodes(node.Types))
}
func (node *HeritageClause) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewHeritageClause(node.Token, node.Types), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsHeritageClause(node *Node) bool {
return node.Kind == KindHeritageClause
}
// ──────────────────────────────────────────────────────────────────────
// InterfaceDeclaration
// ──────────────────────────────────────────────────────────────────────
type InterfaceDeclaration struct {
DeclarationBase
StatementBase
ExportableBase
ModifiersBase
TypeSyntaxBase
name *IdentifierNode
TypeParameters *TypeParameterList // Optional
HeritageClauses *HeritageClauseList // Optional
Members *TypeElementList
}
func (f *NodeFactory) NewInterfaceDeclaration(modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, heritageClauses *HeritageClauseList, members *TypeElementList) *Node {
data := f.interfaceDeclarationArena.New()
data.modifiers = modifiers
data.name = name
data.TypeParameters = typeParameters
data.HeritageClauses = heritageClauses
data.Members = members
return f.newNode(KindInterfaceDeclaration, data)
}
func (f *NodeFactory) UpdateInterfaceDeclaration(node *InterfaceDeclaration, modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, heritageClauses *HeritageClauseList, members *TypeElementList) *Node {
if modifiers != node.modifiers || name != node.name || typeParameters != node.TypeParameters || heritageClauses != node.HeritageClauses || members != node.Members {
return updateNode(f.NewInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *InterfaceDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.HeritageClauses) ||
visitNodeList(v, node.Members)
}
func (node *InterfaceDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateInterfaceDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNodes(node.TypeParameters), v.visitNodes(node.HeritageClauses), v.visitNodes(node.Members))
}
func (node *InterfaceDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewInterfaceDeclaration(node.Modifiers(), node.name, node.TypeParameters, node.HeritageClauses, node.Members), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *InterfaceDeclaration) Name() *DeclarationName {
return node.name
}
func IsInterfaceDeclaration(node *Node) bool {
return node.Kind == KindInterfaceDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// TypeAliasDeclaration
// ──────────────────────────────────────────────────────────────────────
type TypeAliasDeclaration struct {
DeclarationBase
StatementBase
ExportableBase
ModifiersBase
LocalsContainerBase
TypeSyntaxBase
name *IdentifierNode
TypeParameters *TypeParameterList // Optional
Type *TypeNode
}
func (f *NodeFactory) NewTypeAliasDeclaration(modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, typeNode *TypeNode) *Node {
data := f.typeAliasDeclarationArena.New()
data.modifiers = modifiers
data.name = name
data.TypeParameters = typeParameters
data.Type = typeNode
return f.newNode(KindTypeAliasDeclaration, data)
}
func (f *NodeFactory) NewJSTypeAliasDeclaration(modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, typeNode *TypeNode) *Node {
data := f.typeAliasDeclarationArena.New()
data.modifiers = modifiers
data.name = name
data.TypeParameters = typeParameters
data.Type = typeNode
return f.newNode(KindJSTypeAliasDeclaration, data)
}
func (f *NodeFactory) UpdateTypeAliasDeclaration(node *TypeAliasDeclaration, modifiers *ModifierList, name *IdentifierNode, typeParameters *TypeParameterList, typeNode *TypeNode) *Node {
if modifiers != node.modifiers || name != node.name || typeParameters != node.TypeParameters || typeNode != node.Type {
switch node.Kind {
case KindTypeAliasDeclaration:
return updateNode(f.NewTypeAliasDeclaration(modifiers, name, typeParameters, typeNode), node.AsNode(), f.hooks)
case KindJSTypeAliasDeclaration:
return updateNode(f.NewJSTypeAliasDeclaration(modifiers, name, typeParameters, typeNode), node.AsNode(), f.hooks)
default:
panic("unexpected kind in UpdateTypeAliasDeclaration: " + node.Kind.String())
}
}
return node.AsNode()
}
func (node *TypeAliasDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visitNodeList(v, node.TypeParameters) ||
visit(v, node.Type)
}
func (node *TypeAliasDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypeAliasDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNodes(node.TypeParameters), v.visitNode(node.Type))
}
func (node *TypeAliasDeclaration) Clone(f NodeFactoryCoercible) *Node {
switch node.Kind {
case KindTypeAliasDeclaration:
return cloneNode(f.AsNodeFactory().NewTypeAliasDeclaration(node.Modifiers(), node.name, node.TypeParameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
case KindJSTypeAliasDeclaration:
return cloneNode(f.AsNodeFactory().NewJSTypeAliasDeclaration(node.Modifiers(), node.name, node.TypeParameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
default:
panic("unexpected kind in TypeAliasDeclaration.Clone: " + node.Kind.String())
}
}
func (node *TypeAliasDeclaration) Name() *DeclarationName {
return node.name
}
func IsTypeAliasDeclaration(node *Node) bool {
return node.Kind == KindTypeAliasDeclaration
}
func IsJSTypeAliasDeclaration(node *Node) bool {
return node.Kind == KindJSTypeAliasDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// EnumMember
// ──────────────────────────────────────────────────────────────────────
type EnumMember struct {
NodeBase
NamedMemberBase
CompositeBase
Initializer *Expression // Optional
}
func (f *NodeFactory) NewEnumMember(name *PropertyName, initializer *Expression) *Node {
data := &EnumMember{}
data.name = name
data.Initializer = initializer
return f.newNode(KindEnumMember, data)
}
func (f *NodeFactory) UpdateEnumMember(node *EnumMember, name *PropertyName, initializer *Expression) *Node {
if name != node.name || initializer != node.Initializer {
return updateNode(f.NewEnumMember(name, initializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *EnumMember) ForEachChild(v Visitor) bool {
return visit(v, node.name) || visit(v, node.Initializer)
}
func (node *EnumMember) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateEnumMember(node, v.visitNode(node.name), v.visitNode(node.Initializer))
}
func (node *EnumMember) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewEnumMember(node.name, node.Initializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *EnumMember) Name() *DeclarationName {
return node.name
}
func IsEnumMember(node *Node) bool {
return node.Kind == KindEnumMember
}
// ──────────────────────────────────────────────────────────────────────
// EnumDeclaration
// ──────────────────────────────────────────────────────────────────────
type EnumDeclaration struct {
DeclarationBase
StatementBase
ExportableBase
ModifiersBase
CompositeBase
name *IdentifierNode
Members *EnumMemberList
}
func (f *NodeFactory) NewEnumDeclaration(modifiers *ModifierList, name *IdentifierNode, members *EnumMemberList) *Node {
data := &EnumDeclaration{}
data.modifiers = modifiers
data.name = name
data.Members = members
return f.newNode(KindEnumDeclaration, data)
}
func (f *NodeFactory) UpdateEnumDeclaration(node *EnumDeclaration, modifiers *ModifierList, name *IdentifierNode, members *EnumMemberList) *Node {
if modifiers != node.modifiers || name != node.name || members != node.Members {
return updateNode(f.NewEnumDeclaration(modifiers, name, members), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *EnumDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) || visit(v, node.name) || visitNodeList(v, node.Members)
}
func (node *EnumDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateEnumDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNodes(node.Members))
}
func (node *EnumDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewEnumDeclaration(node.Modifiers(), node.name, node.Members), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *EnumDeclaration) Name() *DeclarationName {
return node.name
}
func IsEnumDeclaration(node *Node) bool {
return node.Kind == KindEnumDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// ModuleBlock
// ──────────────────────────────────────────────────────────────────────
type ModuleBlock struct {
StatementBase
CompositeBase
Statements *StatementList
}
func (f *NodeFactory) NewModuleBlock(statements *StatementList) *Node {
data := &ModuleBlock{}
data.Statements = statements
return f.newNode(KindModuleBlock, data)
}
func (f *NodeFactory) UpdateModuleBlock(node *ModuleBlock, statements *StatementList) *Node {
if statements != node.Statements {
return updateNode(f.NewModuleBlock(statements), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ModuleBlock) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Statements)
}
func (node *ModuleBlock) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateModuleBlock(node, v.visitNodes(node.Statements))
}
func (node *ModuleBlock) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewModuleBlock(node.Statements), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ModuleBlock) computeSubtreeFacts() SubtreeFacts {
return propagateNodeListSubtreeFacts(node.Statements, propagateSubtreeFacts)
}
func IsModuleBlock(node *Node) bool {
return node.Kind == KindModuleBlock
}
// ──────────────────────────────────────────────────────────────────────
// NotEmittedStatement
// ──────────────────────────────────────────────────────────────────────
type NotEmittedStatement struct {
StatementBase
}
func (f *NodeFactory) NewNotEmittedStatement() *Node {
data := &NotEmittedStatement{}
return f.newNode(KindNotEmittedStatement, data)
}
func (node *NotEmittedStatement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNotEmittedStatement(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsNotEmittedStatement(node *Node) bool {
return node.Kind == KindNotEmittedStatement
}
// ──────────────────────────────────────────────────────────────────────
// NotEmittedTypeElement
// ──────────────────────────────────────────────────────────────────────
type NotEmittedTypeElement struct {
NodeBase
TypeElementBase
}
func (f *NodeFactory) NewNotEmittedTypeElement() *Node {
data := &NotEmittedTypeElement{}
return f.newNode(KindNotEmittedTypeElement, data)
}
func (node *NotEmittedTypeElement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNotEmittedTypeElement(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsNotEmittedTypeElement(node *Node) bool {
return node.Kind == KindNotEmittedTypeElement
}
// ──────────────────────────────────────────────────────────────────────
// ImportDeclaration
// ──────────────────────────────────────────────────────────────────────
type ImportDeclaration struct {
StatementBase
ModifiersBase
CompositeBase
DeclarationBase
ImportClause *ImportClauseNode // Optional
ModuleSpecifier *Expression
Attributes *ImportAttributesNode // Optional
}
func (f *NodeFactory) NewImportDeclaration(modifiers *ModifierList, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
data := &ImportDeclaration{}
data.modifiers = modifiers
data.ImportClause = importClause
data.ModuleSpecifier = moduleSpecifier
data.Attributes = attributes
return f.newNode(KindImportDeclaration, data)
}
func (f *NodeFactory) NewJSImportDeclaration(modifiers *ModifierList, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
data := &ImportDeclaration{}
data.modifiers = modifiers
data.ImportClause = importClause
data.ModuleSpecifier = moduleSpecifier
data.Attributes = attributes
return f.newNode(KindJSImportDeclaration, data)
}
func (f *NodeFactory) UpdateImportDeclaration(node *ImportDeclaration, modifiers *ModifierList, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
if modifiers != node.modifiers || importClause != node.ImportClause || moduleSpecifier != node.ModuleSpecifier || attributes != node.Attributes {
switch node.Kind {
case KindImportDeclaration:
return updateNode(f.NewImportDeclaration(modifiers, importClause, moduleSpecifier, attributes), node.AsNode(), f.hooks)
case KindJSImportDeclaration:
return updateNode(f.NewJSImportDeclaration(modifiers, importClause, moduleSpecifier, attributes), node.AsNode(), f.hooks)
default:
panic("unexpected kind in UpdateImportDeclaration: " + node.Kind.String())
}
}
return node.AsNode()
}
func (node *ImportDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.ImportClause) ||
visit(v, node.ModuleSpecifier) ||
visit(v, node.Attributes)
}
func (node *ImportDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateImportDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.ImportClause), v.visitNode(node.ModuleSpecifier), v.visitNode(node.Attributes))
}
func (node *ImportDeclaration) Clone(f NodeFactoryCoercible) *Node {
switch node.Kind {
case KindImportDeclaration:
return cloneNode(f.AsNodeFactory().NewImportDeclaration(node.Modifiers(), node.ImportClause, node.ModuleSpecifier, node.Attributes), node.AsNode(), f.AsNodeFactory().hooks)
case KindJSImportDeclaration:
return cloneNode(f.AsNodeFactory().NewJSImportDeclaration(node.Modifiers(), node.ImportClause, node.ModuleSpecifier, node.Attributes), node.AsNode(), f.AsNodeFactory().hooks)
default:
panic("unexpected kind in ImportDeclaration.Clone: " + node.Kind.String())
}
}
func (node *ImportDeclaration) computeSubtreeFacts() SubtreeFacts {
return propagateModifierListSubtreeFacts(node.modifiers) |
propagateSubtreeFacts(node.ImportClause) |
propagateSubtreeFacts(node.ModuleSpecifier) |
propagateSubtreeFacts(node.Attributes)
}
func IsImportDeclaration(node *Node) bool {
return node.Kind == KindImportDeclaration
}
func IsJSImportDeclaration(node *Node) bool {
return node.Kind == KindJSImportDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// ExternalModuleReference
// ──────────────────────────────────────────────────────────────────────
type ExternalModuleReference struct {
NodeBase
Expression *Expression
}
func (f *NodeFactory) NewExternalModuleReference(expression *Expression) *Node {
data := &ExternalModuleReference{}
data.Expression = expression
return f.newNode(KindExternalModuleReference, data)
}
func (f *NodeFactory) UpdateExternalModuleReference(node *ExternalModuleReference, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewExternalModuleReference(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ExternalModuleReference) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *ExternalModuleReference) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateExternalModuleReference(node, v.visitNode(node.Expression))
}
func (node *ExternalModuleReference) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewExternalModuleReference(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ExternalModuleReference) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsExternalModuleReference(node *Node) bool {
return node.Kind == KindExternalModuleReference
}
// ──────────────────────────────────────────────────────────────────────
// NamespaceImport
// ──────────────────────────────────────────────────────────────────────
type NamespaceImport struct {
NodeBase
DeclarationBase
ExportableBase
name *IdentifierNode
}
func (f *NodeFactory) NewNamespaceImport(name *IdentifierNode) *Node {
data := &NamespaceImport{}
data.name = name
return f.newNode(KindNamespaceImport, data)
}
func (f *NodeFactory) UpdateNamespaceImport(node *NamespaceImport, name *IdentifierNode) *Node {
if name != node.name {
return updateNode(f.NewNamespaceImport(name), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *NamespaceImport) ForEachChild(v Visitor) bool {
return visit(v, node.name)
}
func (node *NamespaceImport) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateNamespaceImport(node, v.visitNode(node.name))
}
func (node *NamespaceImport) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNamespaceImport(node.name), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *NamespaceImport) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.name)
}
func (node *NamespaceImport) Name() *DeclarationName {
return node.name
}
func IsNamespaceImport(node *Node) bool {
return node.Kind == KindNamespaceImport
}
// ──────────────────────────────────────────────────────────────────────
// NamedImports
// ──────────────────────────────────────────────────────────────────────
type NamedImports struct {
NodeBase
CompositeBase
Elements *ImportSpecifierList
}
func (f *NodeFactory) NewNamedImports(elements *ImportSpecifierList) *Node {
data := &NamedImports{}
data.Elements = elements
return f.newNode(KindNamedImports, data)
}
func (f *NodeFactory) UpdateNamedImports(node *NamedImports, elements *ImportSpecifierList) *Node {
if elements != node.Elements {
return updateNode(f.NewNamedImports(elements), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *NamedImports) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Elements)
}
func (node *NamedImports) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateNamedImports(node, v.visitNodes(node.Elements))
}
func (node *NamedImports) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNamedImports(node.Elements), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *NamedImports) computeSubtreeFacts() SubtreeFacts {
return propagateNodeListSubtreeFacts(node.Elements, propagateSubtreeFacts)
}
func IsNamedImports(node *Node) bool {
return node.Kind == KindNamedImports
}
// ──────────────────────────────────────────────────────────────────────
// ExportAssignment
// ──────────────────────────────────────────────────────────────────────
type ExportAssignment struct {
DeclarationBase
StatementBase
ModifiersBase
CompositeBase
IsExportEquals bool
Type *TypeNode
Expression *Expression
}
func (f *NodeFactory) NewExportAssignment(modifiers *ModifierList, isExportEquals bool, typeNode *TypeNode, expression *Expression) *Node {
data := &ExportAssignment{}
data.modifiers = modifiers
data.IsExportEquals = isExportEquals
data.Type = typeNode
data.Expression = expression
return f.newNode(KindExportAssignment, data)
}
func (f *NodeFactory) UpdateExportAssignment(node *ExportAssignment, modifiers *ModifierList, isExportEquals bool, typeNode *TypeNode, expression *Expression) *Node {
if modifiers != node.modifiers || isExportEquals != node.IsExportEquals || typeNode != node.Type || expression != node.Expression {
return updateNode(f.NewExportAssignment(modifiers, isExportEquals, typeNode, expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ExportAssignment) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) || visit(v, node.Type) || visit(v, node.Expression)
}
func (node *ExportAssignment) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateExportAssignment(node, v.visitModifiers(node.modifiers), node.IsExportEquals, v.visitNode(node.Type), v.visitNode(node.Expression))
}
func (node *ExportAssignment) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewExportAssignment(node.Modifiers(), node.IsExportEquals, node.Type, node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsExportAssignment(node *Node) bool {
return node.Kind == KindExportAssignment
}
// ──────────────────────────────────────────────────────────────────────
// NamespaceExportDeclaration
// ──────────────────────────────────────────────────────────────────────
type NamespaceExportDeclaration struct {
DeclarationBase
StatementBase
ModifiersBase
TypeSyntaxBase
name *IdentifierNode
}
func (f *NodeFactory) NewNamespaceExportDeclaration(modifiers *ModifierList, name *IdentifierNode) *Node {
data := &NamespaceExportDeclaration{}
data.modifiers = modifiers
data.name = name
return f.newNode(KindNamespaceExportDeclaration, data)
}
func (f *NodeFactory) UpdateNamespaceExportDeclaration(node *NamespaceExportDeclaration, modifiers *ModifierList, name *IdentifierNode) *Node {
if modifiers != node.modifiers || name != node.name {
return updateNode(f.NewNamespaceExportDeclaration(modifiers, name), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *NamespaceExportDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) || visit(v, node.name)
}
func (node *NamespaceExportDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateNamespaceExportDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name))
}
func (node *NamespaceExportDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNamespaceExportDeclaration(node.Modifiers(), node.name), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *NamespaceExportDeclaration) Name() *DeclarationName {
return node.name
}
func IsNamespaceExportDeclaration(node *Node) bool {
return node.Kind == KindNamespaceExportDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// NamespaceExport
// ──────────────────────────────────────────────────────────────────────
type NamespaceExport struct {
NodeBase
DeclarationBase
name *ModuleExportName
}
func (f *NodeFactory) NewNamespaceExport(name *ModuleExportName) *Node {
data := &NamespaceExport{}
data.name = name
return f.newNode(KindNamespaceExport, data)
}
func (f *NodeFactory) UpdateNamespaceExport(node *NamespaceExport, name *ModuleExportName) *Node {
if name != node.name {
return updateNode(f.NewNamespaceExport(name), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *NamespaceExport) ForEachChild(v Visitor) bool {
return visit(v, node.name)
}
func (node *NamespaceExport) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateNamespaceExport(node, v.visitNode(node.name))
}
func (node *NamespaceExport) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNamespaceExport(node.name), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *NamespaceExport) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.name)
}
func (node *NamespaceExport) Name() *DeclarationName {
return node.name
}
func IsNamespaceExport(node *Node) bool {
return node.Kind == KindNamespaceExport
}
// ──────────────────────────────────────────────────────────────────────
// NamedExports
// ──────────────────────────────────────────────────────────────────────
type NamedExports struct {
NodeBase
CompositeBase
Elements *ExportSpecifierList
}
func (f *NodeFactory) NewNamedExports(elements *ExportSpecifierList) *Node {
data := &NamedExports{}
data.Elements = elements
return f.newNode(KindNamedExports, data)
}
func (f *NodeFactory) UpdateNamedExports(node *NamedExports, elements *ExportSpecifierList) *Node {
if elements != node.Elements {
return updateNode(f.NewNamedExports(elements), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *NamedExports) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Elements)
}
func (node *NamedExports) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateNamedExports(node, v.visitNodes(node.Elements))
}
func (node *NamedExports) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNamedExports(node.Elements), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *NamedExports) computeSubtreeFacts() SubtreeFacts {
return propagateNodeListSubtreeFacts(node.Elements, propagateSubtreeFacts)
}
func IsNamedExports(node *Node) bool {
return node.Kind == KindNamedExports
}
// ──────────────────────────────────────────────────────────────────────
// ExportSpecifier
// ──────────────────────────────────────────────────────────────────────
type ExportSpecifier struct {
NodeBase
DeclarationBase
ExportableBase
CompositeBase
IsTypeOnly bool
PropertyName *ModuleExportName // Optional
name *ModuleExportName
}
func (f *NodeFactory) NewExportSpecifier(isTypeOnly bool, propertyName *ModuleExportName, name *ModuleExportName) *Node {
data := &ExportSpecifier{}
data.IsTypeOnly = isTypeOnly
data.PropertyName = propertyName
data.name = name
return f.newNode(KindExportSpecifier, data)
}
func (f *NodeFactory) UpdateExportSpecifier(node *ExportSpecifier, isTypeOnly bool, propertyName *ModuleExportName, name *ModuleExportName) *Node {
if isTypeOnly != node.IsTypeOnly || propertyName != node.PropertyName || name != node.name {
return updateNode(f.NewExportSpecifier(isTypeOnly, propertyName, name), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ExportSpecifier) ForEachChild(v Visitor) bool {
return visit(v, node.PropertyName) || visit(v, node.name)
}
func (node *ExportSpecifier) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateExportSpecifier(node, node.IsTypeOnly, v.visitNode(node.PropertyName), v.visitNode(node.name))
}
func (node *ExportSpecifier) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewExportSpecifier(node.IsTypeOnly, node.PropertyName, node.name), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ExportSpecifier) Name() *DeclarationName {
return node.name
}
func IsExportSpecifier(node *Node) bool {
return node.Kind == KindExportSpecifier
}
// ──────────────────────────────────────────────────────────────────────
// CallSignatureDeclaration
// ──────────────────────────────────────────────────────────────────────
type CallSignatureDeclaration struct {
NodeBase
DeclarationBase
FunctionLikeBase
TypeElementBase
TypeSyntaxBase
}
func (f *NodeFactory) NewCallSignatureDeclaration(typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
data := &CallSignatureDeclaration{}
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
return f.newNode(KindCallSignature, data)
}
func (f *NodeFactory) UpdateCallSignatureDeclaration(node *CallSignatureDeclaration, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
if typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type {
return updateNode(f.NewCallSignatureDeclaration(typeParameters, parameters, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *CallSignatureDeclaration) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.TypeParameters) || visitNodeList(v, node.Parameters) || visit(v, node.Type)
}
func (node *CallSignatureDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateCallSignatureDeclaration(node, v.visitNodes(node.TypeParameters), v.visitNodes(node.Parameters), v.visitNode(node.Type))
}
func (node *CallSignatureDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewCallSignatureDeclaration(node.TypeParameters, node.Parameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsCallSignatureDeclaration(node *Node) bool {
return node.Kind == KindCallSignature
}
// ──────────────────────────────────────────────────────────────────────
// ConstructSignatureDeclaration
// ──────────────────────────────────────────────────────────────────────
type ConstructSignatureDeclaration struct {
NodeBase
DeclarationBase
FunctionLikeBase
TypeElementBase
TypeSyntaxBase
}
func (f *NodeFactory) NewConstructSignatureDeclaration(typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
data := f.constructSignatureDeclarationArena.New()
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
return f.newNode(KindConstructSignature, data)
}
func (f *NodeFactory) UpdateConstructSignatureDeclaration(node *ConstructSignatureDeclaration, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
if typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type {
return updateNode(f.NewConstructSignatureDeclaration(typeParameters, parameters, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ConstructSignatureDeclaration) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.TypeParameters) || visitNodeList(v, node.Parameters) || visit(v, node.Type)
}
func (node *ConstructSignatureDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateConstructSignatureDeclaration(node, v.visitNodes(node.TypeParameters), v.visitNodes(node.Parameters), v.visitNode(node.Type))
}
func (node *ConstructSignatureDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewConstructSignatureDeclaration(node.TypeParameters, node.Parameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsConstructSignatureDeclaration(node *Node) bool {
return node.Kind == KindConstructSignature
}
// ──────────────────────────────────────────────────────────────────────
// ConstructorDeclaration
// ──────────────────────────────────────────────────────────────────────
type ConstructorDeclaration struct {
NodeBase
DeclarationBase
ModifiersBase
FunctionLikeWithBodyBase
ClassElementBase
CompositeBase
ReturnFlowNode *FlowNode
}
func (f *NodeFactory) NewConstructorDeclaration(modifiers *ModifierList, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
data := &ConstructorDeclaration{}
data.modifiers = modifiers
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
data.FullSignature = fullSignature
data.Body = body
return f.newNode(KindConstructor, data)
}
func (f *NodeFactory) UpdateConstructorDeclaration(node *ConstructorDeclaration, modifiers *ModifierList, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
if modifiers != node.modifiers || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type || fullSignature != node.FullSignature || body != node.Body {
return updateNode(f.NewConstructorDeclaration(modifiers, typeParameters, parameters, typeNode, fullSignature, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ConstructorDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type) ||
visit(v, node.FullSignature) ||
visit(v, node.Body)
}
func (node *ConstructorDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateConstructorDeclaration(node, v.visitModifiers(node.modifiers), v.visitNodes(node.TypeParameters), v.visitParameters(node.Parameters), v.visitNode(node.Type), v.visitNode(node.FullSignature), v.visitFunctionBody(node.Body))
}
func (node *ConstructorDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewConstructorDeclaration(node.Modifiers(), node.TypeParameters, node.Parameters, node.Type, node.FullSignature, node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsConstructorDeclaration(node *Node) bool {
return node.Kind == KindConstructor
}
// ──────────────────────────────────────────────────────────────────────
// GetAccessorDeclaration
// ──────────────────────────────────────────────────────────────────────
type GetAccessorDeclaration struct {
AccessorDeclarationBase
}
func (f *NodeFactory) NewGetAccessorDeclaration(modifiers *ModifierList, name *PropertyName, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
data := &GetAccessorDeclaration{}
data.modifiers = modifiers
data.name = name
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
data.FullSignature = fullSignature
data.Body = body
return f.newNode(KindGetAccessor, data)
}
func (f *NodeFactory) UpdateGetAccessorDeclaration(node *GetAccessorDeclaration, modifiers *ModifierList, name *PropertyName, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
if modifiers != node.modifiers || name != node.name || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type || fullSignature != node.FullSignature || body != node.Body {
return updateNode(f.NewGetAccessorDeclaration(modifiers, name, typeParameters, parameters, typeNode, fullSignature, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *GetAccessorDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type) ||
visit(v, node.FullSignature) ||
visit(v, node.Body)
}
func (node *GetAccessorDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateGetAccessorDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNodes(node.TypeParameters), v.visitParameters(node.Parameters), v.visitNode(node.Type), v.visitNode(node.FullSignature), v.visitFunctionBody(node.Body))
}
func (node *GetAccessorDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewGetAccessorDeclaration(node.Modifiers(), node.name, node.TypeParameters, node.Parameters, node.Type, node.FullSignature, node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *GetAccessorDeclaration) Name() *DeclarationName {
return node.name
}
func IsGetAccessorDeclaration(node *Node) bool {
return node.Kind == KindGetAccessor
}
// ──────────────────────────────────────────────────────────────────────
// SetAccessorDeclaration
// ──────────────────────────────────────────────────────────────────────
type SetAccessorDeclaration struct {
AccessorDeclarationBase
}
func (f *NodeFactory) NewSetAccessorDeclaration(modifiers *ModifierList, name *PropertyName, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
data := &SetAccessorDeclaration{}
data.modifiers = modifiers
data.name = name
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
data.FullSignature = fullSignature
data.Body = body
return f.newNode(KindSetAccessor, data)
}
func (f *NodeFactory) UpdateSetAccessorDeclaration(node *SetAccessorDeclaration, modifiers *ModifierList, name *PropertyName, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
if modifiers != node.modifiers || name != node.name || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type || fullSignature != node.FullSignature || body != node.Body {
return updateNode(f.NewSetAccessorDeclaration(modifiers, name, typeParameters, parameters, typeNode, fullSignature, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *SetAccessorDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type) ||
visit(v, node.FullSignature) ||
visit(v, node.Body)
}
func (node *SetAccessorDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateSetAccessorDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNodes(node.TypeParameters), v.visitParameters(node.Parameters), v.visitNode(node.Type), v.visitNode(node.FullSignature), v.visitFunctionBody(node.Body))
}
func (node *SetAccessorDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSetAccessorDeclaration(node.Modifiers(), node.name, node.TypeParameters, node.Parameters, node.Type, node.FullSignature, node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *SetAccessorDeclaration) Name() *DeclarationName {
return node.name
}
func IsSetAccessorDeclaration(node *Node) bool {
return node.Kind == KindSetAccessor
}
// ──────────────────────────────────────────────────────────────────────
// IndexSignatureDeclaration
// ──────────────────────────────────────────────────────────────────────
type IndexSignatureDeclaration struct {
NodeBase
DeclarationBase
ModifiersBase
FunctionLikeBase
TypeElementBase
ClassElementBase
TypeSyntaxBase
}
func (f *NodeFactory) NewIndexSignatureDeclaration(modifiers *ModifierList, parameters *ParameterList, typeNode *TypeNode) *Node {
data := &IndexSignatureDeclaration{}
data.modifiers = modifiers
data.Parameters = parameters
data.Type = typeNode
return f.newNode(KindIndexSignature, data)
}
func (f *NodeFactory) UpdateIndexSignatureDeclaration(node *IndexSignatureDeclaration, modifiers *ModifierList, parameters *ParameterList, typeNode *TypeNode) *Node {
if modifiers != node.modifiers || parameters != node.Parameters || typeNode != node.Type {
return updateNode(f.NewIndexSignatureDeclaration(modifiers, parameters, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *IndexSignatureDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) || visitNodeList(v, node.Parameters) || visit(v, node.Type)
}
func (node *IndexSignatureDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateIndexSignatureDeclaration(node, v.visitModifiers(node.modifiers), v.visitNodes(node.Parameters), v.visitNode(node.Type))
}
func (node *IndexSignatureDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewIndexSignatureDeclaration(node.Modifiers(), node.Parameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsIndexSignatureDeclaration(node *Node) bool {
return node.Kind == KindIndexSignature
}
// ──────────────────────────────────────────────────────────────────────
// MethodSignatureDeclaration
// ──────────────────────────────────────────────────────────────────────
type MethodSignatureDeclaration struct {
NodeBase
NamedMemberBase
FunctionLikeBase
TypeElementBase
TypeSyntaxBase
}
func (f *NodeFactory) NewMethodSignatureDeclaration(modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
data := f.methodSignatureDeclarationArena.New()
data.modifiers = modifiers
data.name = name
data.PostfixToken = postfixToken
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
return f.newNode(KindMethodSignature, data)
}
func (f *NodeFactory) UpdateMethodSignatureDeclaration(node *MethodSignatureDeclaration, modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
if modifiers != node.modifiers || name != node.name || postfixToken != node.PostfixToken || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type {
return updateNode(f.NewMethodSignatureDeclaration(modifiers, name, postfixToken, typeParameters, parameters, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *MethodSignatureDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visit(v, node.PostfixToken) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type)
}
func (node *MethodSignatureDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateMethodSignatureDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNode(node.PostfixToken), v.visitNodes(node.TypeParameters), v.visitNodes(node.Parameters), v.visitNode(node.Type))
}
func (node *MethodSignatureDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewMethodSignatureDeclaration(node.Modifiers(), node.name, node.PostfixToken, node.TypeParameters, node.Parameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *MethodSignatureDeclaration) Name() *DeclarationName {
return node.name
}
func IsMethodSignatureDeclaration(node *Node) bool {
return node.Kind == KindMethodSignature
}
// ──────────────────────────────────────────────────────────────────────
// MethodDeclaration
// ──────────────────────────────────────────────────────────────────────
type MethodDeclaration struct {
NodeBase
NamedMemberBase
FunctionLikeWithBodyBase
FlowNodeBase
ClassElementBase
ObjectLiteralElementBase
CompositeBase
}
func (f *NodeFactory) NewMethodDeclaration(modifiers *ModifierList, asteriskToken *AsteriskToken, name *PropertyName, postfixToken *TokenNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
data := &MethodDeclaration{}
data.modifiers = modifiers
data.AsteriskToken = asteriskToken
data.name = name
data.PostfixToken = postfixToken
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
data.FullSignature = fullSignature
data.Body = body
return f.newNode(KindMethodDeclaration, data)
}
func (f *NodeFactory) UpdateMethodDeclaration(node *MethodDeclaration, modifiers *ModifierList, asteriskToken *AsteriskToken, name *PropertyName, postfixToken *TokenNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
if modifiers != node.modifiers || asteriskToken != node.AsteriskToken || name != node.name || postfixToken != node.PostfixToken || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type || fullSignature != node.FullSignature || body != node.Body {
return updateNode(f.NewMethodDeclaration(modifiers, asteriskToken, name, postfixToken, typeParameters, parameters, typeNode, fullSignature, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *MethodDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.AsteriskToken) ||
visit(v, node.name) ||
visit(v, node.PostfixToken) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type) ||
visit(v, node.FullSignature) ||
visit(v, node.Body)
}
func (node *MethodDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateMethodDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.AsteriskToken), v.visitNode(node.name), v.visitNode(node.PostfixToken), v.visitNodes(node.TypeParameters), v.visitParameters(node.Parameters), v.visitNode(node.Type), v.visitNode(node.FullSignature), v.visitFunctionBody(node.Body))
}
func (node *MethodDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewMethodDeclaration(node.Modifiers(), node.AsteriskToken, node.name, node.PostfixToken, node.TypeParameters, node.Parameters, node.Type, node.FullSignature, node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *MethodDeclaration) Name() *DeclarationName {
return node.name
}
func IsMethodDeclaration(node *Node) bool {
return node.Kind == KindMethodDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// PropertySignatureDeclaration
// ──────────────────────────────────────────────────────────────────────
type PropertySignatureDeclaration struct {
NodeBase
NamedMemberBase
TypeElementBase
TypeSyntaxBase
Type *TypeNode
Initializer *Expression
}
func (f *NodeFactory) NewPropertySignatureDeclaration(modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeNode *TypeNode, initializer *Expression) *Node {
data := f.propertySignatureDeclarationArena.New()
data.modifiers = modifiers
data.name = name
data.PostfixToken = postfixToken
data.Type = typeNode
data.Initializer = initializer
return f.newNode(KindPropertySignature, data)
}
func (f *NodeFactory) UpdatePropertySignatureDeclaration(node *PropertySignatureDeclaration, modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeNode *TypeNode, initializer *Expression) *Node {
if modifiers != node.modifiers || name != node.name || postfixToken != node.PostfixToken || typeNode != node.Type || initializer != node.Initializer {
return updateNode(f.NewPropertySignatureDeclaration(modifiers, name, postfixToken, typeNode, initializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *PropertySignatureDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visit(v, node.PostfixToken) ||
visit(v, node.Type) ||
visit(v, node.Initializer)
}
func (node *PropertySignatureDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdatePropertySignatureDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNode(node.PostfixToken), v.visitNode(node.Type), v.visitNode(node.Initializer))
}
func (node *PropertySignatureDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewPropertySignatureDeclaration(node.Modifiers(), node.name, node.PostfixToken, node.Type, node.Initializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *PropertySignatureDeclaration) Name() *DeclarationName {
return node.name
}
func IsPropertySignatureDeclaration(node *Node) bool {
return node.Kind == KindPropertySignature
}
// ──────────────────────────────────────────────────────────────────────
// PropertyDeclaration
// ──────────────────────────────────────────────────────────────────────
type PropertyDeclaration struct {
NodeBase
NamedMemberBase
ClassElementBase
CompositeBase
Type *TypeNode // Optional
Initializer *Expression // Optional
}
func (f *NodeFactory) NewPropertyDeclaration(modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeNode *TypeNode, initializer *Expression) *Node {
data := &PropertyDeclaration{}
data.modifiers = modifiers
data.name = name
data.PostfixToken = postfixToken
data.Type = typeNode
data.Initializer = initializer
return f.newNode(KindPropertyDeclaration, data)
}
func (f *NodeFactory) UpdatePropertyDeclaration(node *PropertyDeclaration, modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeNode *TypeNode, initializer *Expression) *Node {
if modifiers != node.modifiers || name != node.name || postfixToken != node.PostfixToken || typeNode != node.Type || initializer != node.Initializer {
return updateNode(f.NewPropertyDeclaration(modifiers, name, postfixToken, typeNode, initializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *PropertyDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visit(v, node.PostfixToken) ||
visit(v, node.Type) ||
visit(v, node.Initializer)
}
func (node *PropertyDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdatePropertyDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNode(node.PostfixToken), v.visitNode(node.Type), v.visitNode(node.Initializer))
}
func (node *PropertyDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewPropertyDeclaration(node.Modifiers(), node.name, node.PostfixToken, node.Type, node.Initializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *PropertyDeclaration) Name() *DeclarationName {
return node.name
}
func IsPropertyDeclaration(node *Node) bool {
return node.Kind == KindPropertyDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// SemicolonClassElement
// ──────────────────────────────────────────────────────────────────────
type SemicolonClassElement struct {
NodeBase
DeclarationBase
ClassElementBase
}
func (f *NodeFactory) NewSemicolonClassElement() *Node {
data := &SemicolonClassElement{}
return f.newNode(KindSemicolonClassElement, data)
}
func (node *SemicolonClassElement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSemicolonClassElement(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsSemicolonClassElement(node *Node) bool {
return node.Kind == KindSemicolonClassElement
}
// ──────────────────────────────────────────────────────────────────────
// ClassStaticBlockDeclaration
// ──────────────────────────────────────────────────────────────────────
type ClassStaticBlockDeclaration struct {
NodeBase
DeclarationBase
ModifiersBase
LocalsContainerBase
ClassElementBase
CompositeBase
Body *BlockNode
ReturnFlowNode *FlowNode
}
func (f *NodeFactory) NewClassStaticBlockDeclaration(modifiers *ModifierList, body *BlockNode) *Node {
data := &ClassStaticBlockDeclaration{}
data.modifiers = modifiers
data.Body = body
return f.newNode(KindClassStaticBlockDeclaration, data)
}
func (f *NodeFactory) UpdateClassStaticBlockDeclaration(node *ClassStaticBlockDeclaration, modifiers *ModifierList, body *BlockNode) *Node {
if modifiers != node.modifiers || body != node.Body {
return updateNode(f.NewClassStaticBlockDeclaration(modifiers, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ClassStaticBlockDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) || visit(v, node.Body)
}
func (node *ClassStaticBlockDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateClassStaticBlockDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.Body))
}
func (node *ClassStaticBlockDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewClassStaticBlockDeclaration(node.Modifiers(), node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsClassStaticBlockDeclaration(node *Node) bool {
return node.Kind == KindClassStaticBlockDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// OmittedExpression
// ──────────────────────────────────────────────────────────────────────
type OmittedExpression struct {
ExpressionBase
}
func (f *NodeFactory) NewOmittedExpression() *Node {
data := &OmittedExpression{}
return f.newNode(KindOmittedExpression, data)
}
func (node *OmittedExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewOmittedExpression(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsOmittedExpression(node *Node) bool {
return node.Kind == KindOmittedExpression
}
// ──────────────────────────────────────────────────────────────────────
// KeywordExpression
// ──────────────────────────────────────────────────────────────────────
type KeywordExpression struct {
ExpressionBase
FlowNodeBase
}
func (f *NodeFactory) NewKeywordExpression(kind KeywordExpressionSyntaxKind) *Node {
data := f.keywordExpressionArena.New()
return f.newNode(kind, data)
}
func (node *KeywordExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewKeywordExpression(node.Kind), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsKeywordExpression(node *Node) bool {
switch node.Kind {
case KindNullKeyword, KindTrueKeyword, KindFalseKeyword, KindThisKeyword, KindSuperKeyword, KindImportKeyword:
return true
}
return false
}
// ──────────────────────────────────────────────────────────────────────
// StringLiteral
// ──────────────────────────────────────────────────────────────────────
type StringLiteral struct {
LiteralExpressionBase
}
func (f *NodeFactory) NewStringLiteral(text string, tokenFlags TokenFlags) *Node {
data := f.stringLiteralArena.New()
data.Text = text
data.TokenFlags = tokenFlags & TokenFlagsStringLiteralFlags
f.textCount++
return f.newNode(KindStringLiteral, data)
}
func (node *StringLiteral) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewStringLiteral(node.Text, node.TokenFlags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsStringLiteral(node *Node) bool {
return node.Kind == KindStringLiteral
}
// ──────────────────────────────────────────────────────────────────────
// NumericLiteral
// ──────────────────────────────────────────────────────────────────────
type NumericLiteral struct {
LiteralExpressionBase
}
func (f *NodeFactory) NewNumericLiteral(text string, tokenFlags TokenFlags) *Node {
data := f.numericLiteralArena.New()
data.Text = text
data.TokenFlags = tokenFlags & TokenFlagsNumericLiteralFlags
f.textCount++
return f.newNode(KindNumericLiteral, data)
}
func (node *NumericLiteral) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNumericLiteral(node.Text, node.TokenFlags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsNumericLiteral(node *Node) bool {
return node.Kind == KindNumericLiteral
}
// ──────────────────────────────────────────────────────────────────────
// BigIntLiteral
// ──────────────────────────────────────────────────────────────────────
type BigIntLiteral struct {
LiteralExpressionBase
}
func (f *NodeFactory) NewBigIntLiteral(text string, tokenFlags TokenFlags) *Node {
data := &BigIntLiteral{}
data.Text = text
data.TokenFlags = tokenFlags & TokenFlagsNumericLiteralFlags
f.textCount++
return f.newNode(KindBigIntLiteral, data)
}
func (node *BigIntLiteral) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewBigIntLiteral(node.Text, node.TokenFlags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsBigIntLiteral(node *Node) bool {
return node.Kind == KindBigIntLiteral
}
// ──────────────────────────────────────────────────────────────────────
// RegularExpressionLiteral
// ──────────────────────────────────────────────────────────────────────
type RegularExpressionLiteral struct {
LiteralExpressionBase
}
func (f *NodeFactory) NewRegularExpressionLiteral(text string, tokenFlags TokenFlags) *Node {
data := &RegularExpressionLiteral{}
data.Text = text
data.TokenFlags = tokenFlags & TokenFlagsRegularExpressionLiteralFlags
f.textCount++
return f.newNode(KindRegularExpressionLiteral, data)
}
func (node *RegularExpressionLiteral) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewRegularExpressionLiteral(node.Text, node.TokenFlags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsRegularExpressionLiteral(node *Node) bool {
return node.Kind == KindRegularExpressionLiteral
}
// ──────────────────────────────────────────────────────────────────────
// NoSubstitutionTemplateLiteral
// ──────────────────────────────────────────────────────────────────────
type NoSubstitutionTemplateLiteral struct {
ExpressionBase
TemplateLiteralLikeNodeBase
DeclarationBase
}
func (f *NodeFactory) NewNoSubstitutionTemplateLiteral(text string, templateFlags TokenFlags) *Node {
data := &NoSubstitutionTemplateLiteral{}
data.Text = text
data.TemplateFlags = templateFlags & TokenFlagsTemplateLiteralLikeFlags
f.textCount++
return f.newNode(KindNoSubstitutionTemplateLiteral, data)
}
func (node *NoSubstitutionTemplateLiteral) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNoSubstitutionTemplateLiteral(node.Text, node.TemplateFlags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsNoSubstitutionTemplateLiteral(node *Node) bool {
return node.Kind == KindNoSubstitutionTemplateLiteral
}
// ──────────────────────────────────────────────────────────────────────
// BinaryExpression
// ──────────────────────────────────────────────────────────────────────
type BinaryExpression struct {
ExpressionBase
DeclarationBase
ModifiersBase
CompositeBase
Left *Expression
Type *TypeNode // Optional
OperatorToken *BinaryOperatorToken
Right *Expression
}
func (f *NodeFactory) NewBinaryExpression(modifiers *ModifierList, left *Expression, typeNode *TypeNode, operatorToken *BinaryOperatorToken, right *Expression) *Node {
data := f.binaryExpressionArena.New()
data.modifiers = modifiers
data.Left = left
data.Type = typeNode
data.OperatorToken = operatorToken
data.Right = right
return f.newNode(KindBinaryExpression, data)
}
func (f *NodeFactory) UpdateBinaryExpression(node *BinaryExpression, modifiers *ModifierList, left *Expression, typeNode *TypeNode, operatorToken *BinaryOperatorToken, right *Expression) *Node {
if modifiers != node.modifiers || left != node.Left || typeNode != node.Type || operatorToken != node.OperatorToken || right != node.Right {
return updateNode(f.NewBinaryExpression(modifiers, left, typeNode, operatorToken, right), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *BinaryExpression) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.Left) ||
visit(v, node.Type) ||
visit(v, node.OperatorToken) ||
visit(v, node.Right)
}
func (node *BinaryExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateBinaryExpression(node, v.visitModifiers(node.modifiers), v.visitNode(node.Left), v.visitNode(node.Type), v.visitNode(node.OperatorToken), v.visitNode(node.Right))
}
func (node *BinaryExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewBinaryExpression(node.Modifiers(), node.Left, node.Type, node.OperatorToken, node.Right), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsBinaryExpression(node *Node) bool {
return node.Kind == KindBinaryExpression
}
// ──────────────────────────────────────────────────────────────────────
// PrefixUnaryExpression
// ──────────────────────────────────────────────────────────────────────
type PrefixUnaryExpression struct {
UpdateExpressionBase
Operator Kind
Operand *Expression
}
func (f *NodeFactory) NewPrefixUnaryExpression(operator Kind, operand *Expression) *Node {
data := f.prefixUnaryExpressionArena.New()
data.Operator = operator
data.Operand = operand
return f.newNode(KindPrefixUnaryExpression, data)
}
func (f *NodeFactory) UpdatePrefixUnaryExpression(node *PrefixUnaryExpression, operator Kind, operand *Expression) *Node {
if operator != node.Operator || operand != node.Operand {
return updateNode(f.NewPrefixUnaryExpression(operator, operand), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *PrefixUnaryExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Operand)
}
func (node *PrefixUnaryExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdatePrefixUnaryExpression(node, node.Operator, v.visitNode(node.Operand))
}
func (node *PrefixUnaryExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewPrefixUnaryExpression(node.Operator, node.Operand), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *PrefixUnaryExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Operand)
}
func IsPrefixUnaryExpression(node *Node) bool {
return node.Kind == KindPrefixUnaryExpression
}
// ──────────────────────────────────────────────────────────────────────
// PostfixUnaryExpression
// ──────────────────────────────────────────────────────────────────────
type PostfixUnaryExpression struct {
UpdateExpressionBase
Operand *Expression
Operator Kind
}
func (f *NodeFactory) NewPostfixUnaryExpression(operand *Expression, operator Kind) *Node {
data := &PostfixUnaryExpression{}
data.Operand = operand
data.Operator = operator
return f.newNode(KindPostfixUnaryExpression, data)
}
func (f *NodeFactory) UpdatePostfixUnaryExpression(node *PostfixUnaryExpression, operand *Expression, operator Kind) *Node {
if operand != node.Operand || operator != node.Operator {
return updateNode(f.NewPostfixUnaryExpression(operand, operator), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *PostfixUnaryExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Operand)
}
func (node *PostfixUnaryExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdatePostfixUnaryExpression(node, v.visitNode(node.Operand), node.Operator)
}
func (node *PostfixUnaryExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewPostfixUnaryExpression(node.Operand, node.Operator), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *PostfixUnaryExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Operand)
}
func IsPostfixUnaryExpression(node *Node) bool {
return node.Kind == KindPostfixUnaryExpression
}
// ──────────────────────────────────────────────────────────────────────
// YieldExpression
// ──────────────────────────────────────────────────────────────────────
type YieldExpression struct {
ExpressionBase
AsteriskToken *AsteriskToken // Optional
Expression *Expression // Optional
}
func (f *NodeFactory) NewYieldExpression(asteriskToken *AsteriskToken, expression *Expression) *Node {
data := &YieldExpression{}
data.AsteriskToken = asteriskToken
data.Expression = expression
return f.newNode(KindYieldExpression, data)
}
func (f *NodeFactory) UpdateYieldExpression(node *YieldExpression, asteriskToken *AsteriskToken, expression *Expression) *Node {
if asteriskToken != node.AsteriskToken || expression != node.Expression {
return updateNode(f.NewYieldExpression(asteriskToken, expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *YieldExpression) ForEachChild(v Visitor) bool {
return visit(v, node.AsteriskToken) || visit(v, node.Expression)
}
func (node *YieldExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateYieldExpression(node, v.visitNode(node.AsteriskToken), v.visitNode(node.Expression))
}
func (node *YieldExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewYieldExpression(node.AsteriskToken, node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsYieldExpression(node *Node) bool {
return node.Kind == KindYieldExpression
}
// ──────────────────────────────────────────────────────────────────────
// ArrowFunction
// ──────────────────────────────────────────────────────────────────────
type ArrowFunction struct {
ExpressionBase
DeclarationBase
ModifiersBase
FunctionLikeWithBodyBase
FlowNodeBase
CompositeBase
EqualsGreaterThanToken *EqualsGreaterThanToken
}
func (f *NodeFactory) NewArrowFunction(modifiers *ModifierList, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, equalsGreaterThanToken *EqualsGreaterThanToken, body *ConciseBody) *Node {
data := &ArrowFunction{}
data.modifiers = modifiers
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
data.FullSignature = fullSignature
data.EqualsGreaterThanToken = equalsGreaterThanToken
data.Body = body
return f.newNode(KindArrowFunction, data)
}
func (f *NodeFactory) UpdateArrowFunction(node *ArrowFunction, modifiers *ModifierList, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, equalsGreaterThanToken *EqualsGreaterThanToken, body *ConciseBody) *Node {
if modifiers != node.modifiers || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type || fullSignature != node.FullSignature || equalsGreaterThanToken != node.EqualsGreaterThanToken || body != node.Body {
return updateNode(f.NewArrowFunction(modifiers, typeParameters, parameters, typeNode, fullSignature, equalsGreaterThanToken, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ArrowFunction) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type) ||
visit(v, node.FullSignature) ||
visit(v, node.EqualsGreaterThanToken) ||
visit(v, node.Body)
}
func (node *ArrowFunction) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateArrowFunction(node, v.visitModifiers(node.modifiers), v.visitNodes(node.TypeParameters), v.visitParameters(node.Parameters), v.visitNode(node.Type), v.visitNode(node.FullSignature), v.visitNode(node.EqualsGreaterThanToken), v.visitFunctionBody(node.Body))
}
func (node *ArrowFunction) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewArrowFunction(node.Modifiers(), node.TypeParameters, node.Parameters, node.Type, node.FullSignature, node.EqualsGreaterThanToken, node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsArrowFunction(node *Node) bool {
return node.Kind == KindArrowFunction
}
// ──────────────────────────────────────────────────────────────────────
// FunctionExpression
// ──────────────────────────────────────────────────────────────────────
type FunctionExpression struct {
PrimaryExpressionBase
DeclarationBase
ModifiersBase
FunctionLikeWithBodyBase
FlowNodeBase
CompositeBase
name *IdentifierNode // Optional
ReturnFlowNode *FlowNode
}
func (f *NodeFactory) NewFunctionExpression(modifiers *ModifierList, asteriskToken *AsteriskToken, name *IdentifierNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
data := &FunctionExpression{}
data.modifiers = modifiers
data.AsteriskToken = asteriskToken
data.name = name
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
data.FullSignature = fullSignature
data.Body = body
return f.newNode(KindFunctionExpression, data)
}
func (f *NodeFactory) UpdateFunctionExpression(node *FunctionExpression, modifiers *ModifierList, asteriskToken *AsteriskToken, name *IdentifierNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode, fullSignature *TypeNode, body *FunctionBody) *Node {
if modifiers != node.modifiers || asteriskToken != node.AsteriskToken || name != node.name || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type || fullSignature != node.FullSignature || body != node.Body {
return updateNode(f.NewFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, typeNode, fullSignature, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *FunctionExpression) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.AsteriskToken) ||
visit(v, node.name) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type) ||
visit(v, node.FullSignature) ||
visit(v, node.Body)
}
func (node *FunctionExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateFunctionExpression(node, v.visitModifiers(node.modifiers), v.visitNode(node.AsteriskToken), v.visitNode(node.name), v.visitNodes(node.TypeParameters), v.visitParameters(node.Parameters), v.visitNode(node.Type), v.visitNode(node.FullSignature), v.visitFunctionBody(node.Body))
}
func (node *FunctionExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewFunctionExpression(node.Modifiers(), node.AsteriskToken, node.name, node.TypeParameters, node.Parameters, node.Type, node.FullSignature, node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *FunctionExpression) Name() *DeclarationName {
return node.name
}
func IsFunctionExpression(node *Node) bool {
return node.Kind == KindFunctionExpression
}
// ──────────────────────────────────────────────────────────────────────
// AsExpression
// ──────────────────────────────────────────────────────────────────────
type AsExpression struct {
ExpressionBase
Expression *Expression
Type *TypeNode
}
func (f *NodeFactory) NewAsExpression(expression *Expression, typeNode *TypeNode) *Node {
data := &AsExpression{}
data.Expression = expression
data.Type = typeNode
return f.newNode(KindAsExpression, data)
}
func (f *NodeFactory) UpdateAsExpression(node *AsExpression, expression *Expression, typeNode *TypeNode) *Node {
if expression != node.Expression || typeNode != node.Type {
return updateNode(f.NewAsExpression(expression, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *AsExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.Type)
}
func (node *AsExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateAsExpression(node, v.visitNode(node.Expression), v.visitNode(node.Type))
}
func (node *AsExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewAsExpression(node.Expression, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsAsExpression(node *Node) bool {
return node.Kind == KindAsExpression
}
// ──────────────────────────────────────────────────────────────────────
// SatisfiesExpression
// ──────────────────────────────────────────────────────────────────────
type SatisfiesExpression struct {
ExpressionBase
Expression *Expression
Type *TypeNode
}
func (f *NodeFactory) NewSatisfiesExpression(expression *Expression, typeNode *TypeNode) *Node {
data := &SatisfiesExpression{}
data.Expression = expression
data.Type = typeNode
return f.newNode(KindSatisfiesExpression, data)
}
func (f *NodeFactory) UpdateSatisfiesExpression(node *SatisfiesExpression, expression *Expression, typeNode *TypeNode) *Node {
if expression != node.Expression || typeNode != node.Type {
return updateNode(f.NewSatisfiesExpression(expression, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *SatisfiesExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.Type)
}
func (node *SatisfiesExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateSatisfiesExpression(node, v.visitNode(node.Expression), v.visitNode(node.Type))
}
func (node *SatisfiesExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSatisfiesExpression(node.Expression, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsSatisfiesExpression(node *Node) bool {
return node.Kind == KindSatisfiesExpression
}
// ──────────────────────────────────────────────────────────────────────
// ConditionalExpression
// ──────────────────────────────────────────────────────────────────────
type ConditionalExpression struct {
ExpressionBase
CompositeBase
Condition *Expression
QuestionToken *QuestionToken
WhenTrue *Expression
ColonToken *ColonToken
WhenFalse *Expression
}
func (f *NodeFactory) NewConditionalExpression(condition *Expression, questionToken *QuestionToken, whenTrue *Expression, colonToken *ColonToken, whenFalse *Expression) *Node {
data := f.conditionalExpressionArena.New()
data.Condition = condition
data.QuestionToken = questionToken
data.WhenTrue = whenTrue
data.ColonToken = colonToken
data.WhenFalse = whenFalse
return f.newNode(KindConditionalExpression, data)
}
func (f *NodeFactory) UpdateConditionalExpression(node *ConditionalExpression, condition *Expression, questionToken *QuestionToken, whenTrue *Expression, colonToken *ColonToken, whenFalse *Expression) *Node {
if condition != node.Condition || questionToken != node.QuestionToken || whenTrue != node.WhenTrue || colonToken != node.ColonToken || whenFalse != node.WhenFalse {
return updateNode(f.NewConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ConditionalExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Condition) ||
visit(v, node.QuestionToken) ||
visit(v, node.WhenTrue) ||
visit(v, node.ColonToken) ||
visit(v, node.WhenFalse)
}
func (node *ConditionalExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateConditionalExpression(node, v.visitNode(node.Condition), v.visitNode(node.QuestionToken), v.visitNode(node.WhenTrue), v.visitNode(node.ColonToken), v.visitNode(node.WhenFalse))
}
func (node *ConditionalExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewConditionalExpression(node.Condition, node.QuestionToken, node.WhenTrue, node.ColonToken, node.WhenFalse), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ConditionalExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Condition) |
propagateSubtreeFacts(node.QuestionToken) |
propagateSubtreeFacts(node.WhenTrue) |
propagateSubtreeFacts(node.ColonToken) |
propagateSubtreeFacts(node.WhenFalse)
}
func IsConditionalExpression(node *Node) bool {
return node.Kind == KindConditionalExpression
}
// ──────────────────────────────────────────────────────────────────────
// PropertyAccessExpression
// ──────────────────────────────────────────────────────────────────────
type PropertyAccessExpression struct {
MemberExpressionBase
FlowNodeBase
CompositeBase
Expression *Expression
QuestionDotToken *QuestionDotToken // Optional
name *MemberName
}
func (f *NodeFactory) NewPropertyAccessExpression(expression *Expression, questionDotToken *QuestionDotToken, name *MemberName, flags NodeFlags) *Node {
data := f.propertyAccessExpressionArena.New()
data.Expression = expression
data.QuestionDotToken = questionDotToken
data.name = name
node := f.newNode(KindPropertyAccessExpression, data)
node.Flags |= flags & NodeFlagsOptionalChain
return node
}
func (f *NodeFactory) UpdatePropertyAccessExpression(node *PropertyAccessExpression, expression *Expression, questionDotToken *QuestionDotToken, name *MemberName, flags NodeFlags) *Node {
if expression != node.Expression || questionDotToken != node.QuestionDotToken || name != node.name || flags != node.Flags {
return updateNode(f.NewPropertyAccessExpression(expression, questionDotToken, name, flags), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *PropertyAccessExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.QuestionDotToken) || visit(v, node.name)
}
func (node *PropertyAccessExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdatePropertyAccessExpression(node, v.visitNode(node.Expression), v.visitNode(node.QuestionDotToken), v.visitNode(node.name), node.Flags)
}
func (node *PropertyAccessExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewPropertyAccessExpression(node.Expression, node.QuestionDotToken, node.name, node.Flags), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *PropertyAccessExpression) Name() *DeclarationName {
return node.name
}
func IsPropertyAccessExpression(node *Node) bool {
return node.Kind == KindPropertyAccessExpression
}
// ──────────────────────────────────────────────────────────────────────
// ElementAccessExpression
// ──────────────────────────────────────────────────────────────────────
type ElementAccessExpression struct {
MemberExpressionBase
FlowNodeBase
CompositeBase
Expression *Expression
QuestionDotToken *QuestionDotToken // Optional
ArgumentExpression *Expression
}
func (f *NodeFactory) NewElementAccessExpression(expression *Expression, questionDotToken *QuestionDotToken, argumentExpression *Expression, flags NodeFlags) *Node {
data := f.elementAccessExpressionArena.New()
data.Expression = expression
data.QuestionDotToken = questionDotToken
data.ArgumentExpression = argumentExpression
node := f.newNode(KindElementAccessExpression, data)
node.Flags |= flags & NodeFlagsOptionalChain
return node
}
func (f *NodeFactory) UpdateElementAccessExpression(node *ElementAccessExpression, expression *Expression, questionDotToken *QuestionDotToken, argumentExpression *Expression, flags NodeFlags) *Node {
if expression != node.Expression || questionDotToken != node.QuestionDotToken || argumentExpression != node.ArgumentExpression || flags != node.Flags {
return updateNode(f.NewElementAccessExpression(expression, questionDotToken, argumentExpression, flags), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ElementAccessExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.QuestionDotToken) || visit(v, node.ArgumentExpression)
}
func (node *ElementAccessExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateElementAccessExpression(node, v.visitNode(node.Expression), v.visitNode(node.QuestionDotToken), v.visitNode(node.ArgumentExpression), node.Flags)
}
func (node *ElementAccessExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewElementAccessExpression(node.Expression, node.QuestionDotToken, node.ArgumentExpression, node.Flags), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ElementAccessExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression) |
propagateSubtreeFacts(node.QuestionDotToken) |
propagateSubtreeFacts(node.ArgumentExpression)
}
func IsElementAccessExpression(node *Node) bool {
return node.Kind == KindElementAccessExpression
}
// ──────────────────────────────────────────────────────────────────────
// CallExpression
// ──────────────────────────────────────────────────────────────────────
type CallExpression struct {
LeftHandSideExpressionBase
DeclarationBase
CompositeBase
Expression *Expression
QuestionDotToken *QuestionDotToken // Optional
TypeArguments *TypeList // Optional
Arguments *ElementList
}
func (f *NodeFactory) NewCallExpression(expression *Expression, questionDotToken *QuestionDotToken, typeArguments *TypeList, arguments *ElementList, flags NodeFlags) *Node {
data := f.callExpressionArena.New()
data.Expression = expression
data.QuestionDotToken = questionDotToken
data.TypeArguments = typeArguments
data.Arguments = arguments
node := f.newNode(KindCallExpression, data)
node.Flags |= flags & NodeFlagsOptionalChain
return node
}
func (f *NodeFactory) UpdateCallExpression(node *CallExpression, expression *Expression, questionDotToken *QuestionDotToken, typeArguments *TypeList, arguments *ElementList, flags NodeFlags) *Node {
if expression != node.Expression || questionDotToken != node.QuestionDotToken || typeArguments != node.TypeArguments || arguments != node.Arguments || flags != node.Flags {
return updateNode(f.NewCallExpression(expression, questionDotToken, typeArguments, arguments, flags), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *CallExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) ||
visit(v, node.QuestionDotToken) ||
visitNodeList(v, node.TypeArguments) ||
visitNodeList(v, node.Arguments)
}
func (node *CallExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateCallExpression(node, v.visitNode(node.Expression), v.visitNode(node.QuestionDotToken), v.visitNodes(node.TypeArguments), v.visitNodes(node.Arguments), node.Flags)
}
func (node *CallExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewCallExpression(node.Expression, node.QuestionDotToken, node.TypeArguments, node.Arguments, node.Flags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsCallExpression(node *Node) bool {
return node.Kind == KindCallExpression
}
// ──────────────────────────────────────────────────────────────────────
// NewExpression
// ──────────────────────────────────────────────────────────────────────
type NewExpression struct {
PrimaryExpressionBase
CompositeBase
Expression *Expression
TypeArguments *TypeList // Optional
Arguments *ElementList // Optional
}
func (f *NodeFactory) NewNewExpression(expression *Expression, typeArguments *TypeList, arguments *ElementList) *Node {
data := &NewExpression{}
data.Expression = expression
data.TypeArguments = typeArguments
data.Arguments = arguments
return f.newNode(KindNewExpression, data)
}
func (f *NodeFactory) UpdateNewExpression(node *NewExpression, expression *Expression, typeArguments *TypeList, arguments *ElementList) *Node {
if expression != node.Expression || typeArguments != node.TypeArguments || arguments != node.Arguments {
return updateNode(f.NewNewExpression(expression, typeArguments, arguments), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *NewExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visitNodeList(v, node.TypeArguments) || visitNodeList(v, node.Arguments)
}
func (node *NewExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateNewExpression(node, v.visitNode(node.Expression), v.visitNodes(node.TypeArguments), v.visitNodes(node.Arguments))
}
func (node *NewExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNewExpression(node.Expression, node.TypeArguments, node.Arguments), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsNewExpression(node *Node) bool {
return node.Kind == KindNewExpression
}
// ──────────────────────────────────────────────────────────────────────
// MetaProperty
// ──────────────────────────────────────────────────────────────────────
type MetaProperty struct {
PrimaryExpressionBase
FlowNodeBase
CompositeBase
KeywordToken Kind
name *IdentifierNode
}
func (f *NodeFactory) NewMetaProperty(keywordToken Kind, name *IdentifierNode) *Node {
data := &MetaProperty{}
data.KeywordToken = keywordToken
data.name = name
return f.newNode(KindMetaProperty, data)
}
func (f *NodeFactory) UpdateMetaProperty(node *MetaProperty, keywordToken Kind, name *IdentifierNode) *Node {
if keywordToken != node.KeywordToken || name != node.name {
return updateNode(f.NewMetaProperty(keywordToken, name), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *MetaProperty) ForEachChild(v Visitor) bool {
return visit(v, node.name)
}
func (node *MetaProperty) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateMetaProperty(node, node.KeywordToken, v.visitNode(node.name))
}
func (node *MetaProperty) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewMetaProperty(node.KeywordToken, node.name), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *MetaProperty) Name() *DeclarationName {
return node.name
}
func IsMetaProperty(node *Node) bool {
return node.Kind == KindMetaProperty
}
// ──────────────────────────────────────────────────────────────────────
// NonNullExpression
// ──────────────────────────────────────────────────────────────────────
type NonNullExpression struct {
LeftHandSideExpressionBase
Expression *Expression
}
func (f *NodeFactory) NewNonNullExpression(expression *Expression, flags NodeFlags) *Node {
data := &NonNullExpression{}
data.Expression = expression
node := f.newNode(KindNonNullExpression, data)
node.Flags |= flags & NodeFlagsOptionalChain
return node
}
func (f *NodeFactory) UpdateNonNullExpression(node *NonNullExpression, expression *Expression, flags NodeFlags) *Node {
if expression != node.Expression || flags != node.Flags {
return updateNode(f.NewNonNullExpression(expression, flags), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *NonNullExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *NonNullExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateNonNullExpression(node, v.visitNode(node.Expression), node.Flags)
}
func (node *NonNullExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNonNullExpression(node.Expression, node.Flags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsNonNullExpression(node *Node) bool {
return node.Kind == KindNonNullExpression
}
// ──────────────────────────────────────────────────────────────────────
// SpreadElement
// ──────────────────────────────────────────────────────────────────────
type SpreadElement struct {
ExpressionBase
Expression *Expression
}
func (f *NodeFactory) NewSpreadElement(expression *Expression) *Node {
data := &SpreadElement{}
data.Expression = expression
return f.newNode(KindSpreadElement, data)
}
func (f *NodeFactory) UpdateSpreadElement(node *SpreadElement, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewSpreadElement(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *SpreadElement) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *SpreadElement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateSpreadElement(node, v.visitNode(node.Expression))
}
func (node *SpreadElement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSpreadElement(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsSpreadElement(node *Node) bool {
return node.Kind == KindSpreadElement
}
// ──────────────────────────────────────────────────────────────────────
// TemplateExpression
// ──────────────────────────────────────────────────────────────────────
type TemplateExpression struct {
PrimaryExpressionBase
CompositeBase
Head *TemplateHeadNode
TemplateSpans *TemplateSpanList
}
func (f *NodeFactory) NewTemplateExpression(head *TemplateHeadNode, templateSpans *TemplateSpanList) *Node {
data := &TemplateExpression{}
data.Head = head
data.TemplateSpans = templateSpans
return f.newNode(KindTemplateExpression, data)
}
func (f *NodeFactory) UpdateTemplateExpression(node *TemplateExpression, head *TemplateHeadNode, templateSpans *TemplateSpanList) *Node {
if head != node.Head || templateSpans != node.TemplateSpans {
return updateNode(f.NewTemplateExpression(head, templateSpans), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TemplateExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Head) || visitNodeList(v, node.TemplateSpans)
}
func (node *TemplateExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTemplateExpression(node, v.visitNode(node.Head), v.visitNodes(node.TemplateSpans))
}
func (node *TemplateExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTemplateExpression(node.Head, node.TemplateSpans), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *TemplateExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Head) |
propagateNodeListSubtreeFacts(node.TemplateSpans, propagateSubtreeFacts)
}
func IsTemplateExpression(node *Node) bool {
return node.Kind == KindTemplateExpression
}
// ──────────────────────────────────────────────────────────────────────
// TemplateSpan
// ──────────────────────────────────────────────────────────────────────
type TemplateSpan struct {
NodeBase
Expression *Expression
Literal *TemplateMiddleOrTail
}
func (f *NodeFactory) NewTemplateSpan(expression *Expression, literal *TemplateMiddleOrTail) *Node {
data := &TemplateSpan{}
data.Expression = expression
data.Literal = literal
return f.newNode(KindTemplateSpan, data)
}
func (f *NodeFactory) UpdateTemplateSpan(node *TemplateSpan, expression *Expression, literal *TemplateMiddleOrTail) *Node {
if expression != node.Expression || literal != node.Literal {
return updateNode(f.NewTemplateSpan(expression, literal), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TemplateSpan) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.Literal)
}
func (node *TemplateSpan) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTemplateSpan(node, v.visitNode(node.Expression), v.visitNode(node.Literal))
}
func (node *TemplateSpan) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTemplateSpan(node.Expression, node.Literal), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *TemplateSpan) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression) |
propagateSubtreeFacts(node.Literal)
}
func IsTemplateSpan(node *Node) bool {
return node.Kind == KindTemplateSpan
}
// ──────────────────────────────────────────────────────────────────────
// TaggedTemplateExpression
// ──────────────────────────────────────────────────────────────────────
type TaggedTemplateExpression struct {
MemberExpressionBase
CompositeBase
Tag *Expression
QuestionDotToken *QuestionDotToken
TypeArguments *TypeList // Optional
Template *TemplateLiteral
}
func (f *NodeFactory) NewTaggedTemplateExpression(tag *Expression, questionDotToken *QuestionDotToken, typeArguments *TypeList, template *TemplateLiteral, flags NodeFlags) *Node {
data := &TaggedTemplateExpression{}
data.Tag = tag
data.QuestionDotToken = questionDotToken
data.TypeArguments = typeArguments
data.Template = template
node := f.newNode(KindTaggedTemplateExpression, data)
node.Flags |= flags & NodeFlagsOptionalChain
return node
}
func (f *NodeFactory) UpdateTaggedTemplateExpression(node *TaggedTemplateExpression, tag *Expression, questionDotToken *QuestionDotToken, typeArguments *TypeList, template *TemplateLiteral, flags NodeFlags) *Node {
if tag != node.Tag || questionDotToken != node.QuestionDotToken || typeArguments != node.TypeArguments || template != node.Template || flags != node.Flags {
return updateNode(f.NewTaggedTemplateExpression(tag, questionDotToken, typeArguments, template, flags), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TaggedTemplateExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Tag) ||
visit(v, node.QuestionDotToken) ||
visitNodeList(v, node.TypeArguments) ||
visit(v, node.Template)
}
func (node *TaggedTemplateExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTaggedTemplateExpression(node, v.visitNode(node.Tag), v.visitNode(node.QuestionDotToken), v.visitNodes(node.TypeArguments), v.visitNode(node.Template), node.Flags)
}
func (node *TaggedTemplateExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTaggedTemplateExpression(node.Tag, node.QuestionDotToken, node.TypeArguments, node.Template, node.Flags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTaggedTemplateExpression(node *Node) bool {
return node.Kind == KindTaggedTemplateExpression
}
// ──────────────────────────────────────────────────────────────────────
// ParenthesizedExpression
// ──────────────────────────────────────────────────────────────────────
type ParenthesizedExpression struct {
PrimaryExpressionBase
Expression *Expression
}
func (f *NodeFactory) NewParenthesizedExpression(expression *Expression) *Node {
data := f.parenthesizedExpressionArena.New()
data.Expression = expression
return f.newNode(KindParenthesizedExpression, data)
}
func (f *NodeFactory) UpdateParenthesizedExpression(node *ParenthesizedExpression, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewParenthesizedExpression(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ParenthesizedExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *ParenthesizedExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateParenthesizedExpression(node, v.visitNode(node.Expression))
}
func (node *ParenthesizedExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewParenthesizedExpression(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ParenthesizedExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsParenthesizedExpression(node *Node) bool {
return node.Kind == KindParenthesizedExpression
}
// ──────────────────────────────────────────────────────────────────────
// ArrayLiteralExpression
// ──────────────────────────────────────────────────────────────────────
type ArrayLiteralExpression struct {
PrimaryExpressionBase
CompositeBase
Elements *ElementList
MultiLine bool
}
func (f *NodeFactory) NewArrayLiteralExpression(elements *ElementList, multiLine bool) *Node {
data := &ArrayLiteralExpression{}
data.Elements = elements
data.MultiLine = multiLine
return f.newNode(KindArrayLiteralExpression, data)
}
func (f *NodeFactory) UpdateArrayLiteralExpression(node *ArrayLiteralExpression, elements *ElementList, multiLine bool) *Node {
if elements != node.Elements || multiLine != node.MultiLine {
return updateNode(f.NewArrayLiteralExpression(elements, multiLine), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ArrayLiteralExpression) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Elements)
}
func (node *ArrayLiteralExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateArrayLiteralExpression(node, v.visitNodes(node.Elements), node.MultiLine)
}
func (node *ArrayLiteralExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewArrayLiteralExpression(node.Elements, node.MultiLine), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ArrayLiteralExpression) computeSubtreeFacts() SubtreeFacts {
return propagateNodeListSubtreeFacts(node.Elements, propagateSubtreeFacts)
}
func IsArrayLiteralExpression(node *Node) bool {
return node.Kind == KindArrayLiteralExpression
}
// ──────────────────────────────────────────────────────────────────────
// ObjectLiteralExpression
// ──────────────────────────────────────────────────────────────────────
type ObjectLiteralExpression struct {
PrimaryExpressionBase
DeclarationBase
CompositeBase
Properties *NodeList
MultiLine bool
}
func (f *NodeFactory) NewObjectLiteralExpression(properties *NodeList, multiLine bool) *Node {
data := &ObjectLiteralExpression{}
data.Properties = properties
data.MultiLine = multiLine
return f.newNode(KindObjectLiteralExpression, data)
}
func (f *NodeFactory) UpdateObjectLiteralExpression(node *ObjectLiteralExpression, properties *NodeList, multiLine bool) *Node {
if properties != node.Properties || multiLine != node.MultiLine {
return updateNode(f.NewObjectLiteralExpression(properties, multiLine), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ObjectLiteralExpression) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Properties)
}
func (node *ObjectLiteralExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateObjectLiteralExpression(node, v.visitNodes(node.Properties), node.MultiLine)
}
func (node *ObjectLiteralExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewObjectLiteralExpression(node.Properties, node.MultiLine), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ObjectLiteralExpression) computeSubtreeFacts() SubtreeFacts {
return propagateNodeListSubtreeFacts(node.Properties, propagateSubtreeFacts)
}
func IsObjectLiteralExpression(node *Node) bool {
return node.Kind == KindObjectLiteralExpression
}
// ──────────────────────────────────────────────────────────────────────
// SpreadAssignment
// ──────────────────────────────────────────────────────────────────────
type SpreadAssignment struct {
NodeBase
DeclarationBase
ObjectLiteralElementBase
Expression *Expression
}
func (f *NodeFactory) NewSpreadAssignment(expression *Expression) *Node {
data := &SpreadAssignment{}
data.Expression = expression
return f.newNode(KindSpreadAssignment, data)
}
func (f *NodeFactory) UpdateSpreadAssignment(node *SpreadAssignment, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewSpreadAssignment(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *SpreadAssignment) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *SpreadAssignment) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateSpreadAssignment(node, v.visitNode(node.Expression))
}
func (node *SpreadAssignment) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSpreadAssignment(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsSpreadAssignment(node *Node) bool {
return node.Kind == KindSpreadAssignment
}
// ──────────────────────────────────────────────────────────────────────
// PropertyAssignment
// ──────────────────────────────────────────────────────────────────────
type PropertyAssignment struct {
NodeBase
NamedMemberBase
ObjectLiteralElementBase
CompositeBase
Type *TypeNode
Initializer *Expression
}
func (f *NodeFactory) NewPropertyAssignment(modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeNode *TypeNode, initializer *Expression) *Node {
data := f.propertyAssignmentArena.New()
data.modifiers = modifiers
data.name = name
data.PostfixToken = postfixToken
data.Type = typeNode
data.Initializer = initializer
return f.newNode(KindPropertyAssignment, data)
}
func (f *NodeFactory) UpdatePropertyAssignment(node *PropertyAssignment, modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeNode *TypeNode, initializer *Expression) *Node {
if modifiers != node.modifiers || name != node.name || postfixToken != node.PostfixToken || typeNode != node.Type || initializer != node.Initializer {
return updateNode(f.NewPropertyAssignment(modifiers, name, postfixToken, typeNode, initializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *PropertyAssignment) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visit(v, node.PostfixToken) ||
visit(v, node.Type) ||
visit(v, node.Initializer)
}
func (node *PropertyAssignment) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdatePropertyAssignment(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNode(node.PostfixToken), v.visitNode(node.Type), v.visitNode(node.Initializer))
}
func (node *PropertyAssignment) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewPropertyAssignment(node.Modifiers(), node.name, node.PostfixToken, node.Type, node.Initializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *PropertyAssignment) Name() *DeclarationName {
return node.name
}
func IsPropertyAssignment(node *Node) bool {
return node.Kind == KindPropertyAssignment
}
// ──────────────────────────────────────────────────────────────────────
// ShorthandPropertyAssignment
// ──────────────────────────────────────────────────────────────────────
type ShorthandPropertyAssignment struct {
NodeBase
NamedMemberBase
ObjectLiteralElementBase
CompositeBase
Type *TypeNode
EqualsToken *EqualsToken // Optional
ObjectAssignmentInitializer *Expression // Optional
}
func (f *NodeFactory) NewShorthandPropertyAssignment(modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeNode *TypeNode, equalsToken *EqualsToken, objectAssignmentInitializer *Expression) *Node {
data := &ShorthandPropertyAssignment{}
data.modifiers = modifiers
data.name = name
data.PostfixToken = postfixToken
data.Type = typeNode
data.EqualsToken = equalsToken
data.ObjectAssignmentInitializer = objectAssignmentInitializer
return f.newNode(KindShorthandPropertyAssignment, data)
}
func (f *NodeFactory) UpdateShorthandPropertyAssignment(node *ShorthandPropertyAssignment, modifiers *ModifierList, name *PropertyName, postfixToken *TokenNode, typeNode *TypeNode, equalsToken *EqualsToken, objectAssignmentInitializer *Expression) *Node {
if modifiers != node.modifiers || name != node.name || postfixToken != node.PostfixToken || typeNode != node.Type || equalsToken != node.EqualsToken || objectAssignmentInitializer != node.ObjectAssignmentInitializer {
return updateNode(f.NewShorthandPropertyAssignment(modifiers, name, postfixToken, typeNode, equalsToken, objectAssignmentInitializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ShorthandPropertyAssignment) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visit(v, node.PostfixToken) ||
visit(v, node.Type) ||
visit(v, node.EqualsToken) ||
visit(v, node.ObjectAssignmentInitializer)
}
func (node *ShorthandPropertyAssignment) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateShorthandPropertyAssignment(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNode(node.PostfixToken), v.visitNode(node.Type), v.visitNode(node.EqualsToken), v.visitNode(node.ObjectAssignmentInitializer))
}
func (node *ShorthandPropertyAssignment) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewShorthandPropertyAssignment(node.Modifiers(), node.name, node.PostfixToken, node.Type, node.EqualsToken, node.ObjectAssignmentInitializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ShorthandPropertyAssignment) Name() *DeclarationName {
return node.name
}
func IsShorthandPropertyAssignment(node *Node) bool {
return node.Kind == KindShorthandPropertyAssignment
}
// ──────────────────────────────────────────────────────────────────────
// DeleteExpression
// ──────────────────────────────────────────────────────────────────────
type DeleteExpression struct {
UnaryExpressionBase
Expression *Expression
}
func (f *NodeFactory) NewDeleteExpression(expression *Expression) *Node {
data := &DeleteExpression{}
data.Expression = expression
return f.newNode(KindDeleteExpression, data)
}
func (f *NodeFactory) UpdateDeleteExpression(node *DeleteExpression, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewDeleteExpression(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *DeleteExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *DeleteExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateDeleteExpression(node, v.visitNode(node.Expression))
}
func (node *DeleteExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewDeleteExpression(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *DeleteExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsDeleteExpression(node *Node) bool {
return node.Kind == KindDeleteExpression
}
// ──────────────────────────────────────────────────────────────────────
// TypeOfExpression
// ──────────────────────────────────────────────────────────────────────
type TypeOfExpression struct {
UnaryExpressionBase
Expression *Expression
}
func (f *NodeFactory) NewTypeOfExpression(expression *Expression) *Node {
data := &TypeOfExpression{}
data.Expression = expression
return f.newNode(KindTypeOfExpression, data)
}
func (f *NodeFactory) UpdateTypeOfExpression(node *TypeOfExpression, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewTypeOfExpression(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TypeOfExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *TypeOfExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypeOfExpression(node, v.visitNode(node.Expression))
}
func (node *TypeOfExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTypeOfExpression(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *TypeOfExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsTypeOfExpression(node *Node) bool {
return node.Kind == KindTypeOfExpression
}
// ──────────────────────────────────────────────────────────────────────
// VoidExpression
// ──────────────────────────────────────────────────────────────────────
type VoidExpression struct {
UnaryExpressionBase
Expression *Expression
}
func (f *NodeFactory) NewVoidExpression(expression *Expression) *Node {
data := &VoidExpression{}
data.Expression = expression
return f.newNode(KindVoidExpression, data)
}
func (f *NodeFactory) UpdateVoidExpression(node *VoidExpression, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewVoidExpression(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *VoidExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *VoidExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateVoidExpression(node, v.visitNode(node.Expression))
}
func (node *VoidExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewVoidExpression(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *VoidExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsVoidExpression(node *Node) bool {
return node.Kind == KindVoidExpression
}
// ──────────────────────────────────────────────────────────────────────
// AwaitExpression
// ──────────────────────────────────────────────────────────────────────
type AwaitExpression struct {
UnaryExpressionBase
Expression *Expression
}
func (f *NodeFactory) NewAwaitExpression(expression *Expression) *Node {
data := &AwaitExpression{}
data.Expression = expression
return f.newNode(KindAwaitExpression, data)
}
func (f *NodeFactory) UpdateAwaitExpression(node *AwaitExpression, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewAwaitExpression(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *AwaitExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *AwaitExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateAwaitExpression(node, v.visitNode(node.Expression))
}
func (node *AwaitExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewAwaitExpression(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsAwaitExpression(node *Node) bool {
return node.Kind == KindAwaitExpression
}
// ──────────────────────────────────────────────────────────────────────
// TypeAssertion
// ──────────────────────────────────────────────────────────────────────
type TypeAssertion struct {
UnaryExpressionBase
Type *TypeNode
Expression *Expression
}
func (f *NodeFactory) NewTypeAssertion(typeNode *TypeNode, expression *Expression) *Node {
data := &TypeAssertion{}
data.Type = typeNode
data.Expression = expression
return f.newNode(KindTypeAssertionExpression, data)
}
func (f *NodeFactory) UpdateTypeAssertion(node *TypeAssertion, typeNode *TypeNode, expression *Expression) *Node {
if typeNode != node.Type || expression != node.Expression {
return updateNode(f.NewTypeAssertion(typeNode, expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TypeAssertion) ForEachChild(v Visitor) bool {
return visit(v, node.Type) || visit(v, node.Expression)
}
func (node *TypeAssertion) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypeAssertion(node, v.visitNode(node.Type), v.visitNode(node.Expression))
}
func (node *TypeAssertion) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTypeAssertion(node.Type, node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTypeAssertion(node *Node) bool {
return node.Kind == KindTypeAssertionExpression
}
// ──────────────────────────────────────────────────────────────────────
// KeywordTypeNode
// ──────────────────────────────────────────────────────────────────────
type KeywordTypeNode struct {
TypeNodeBase
}
func (f *NodeFactory) NewKeywordTypeNode(kind KeywordTypeSyntaxKind) *Node {
data := f.keywordTypeNodeArena.New()
return f.newNode(kind, data)
}
func (node *KeywordTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewKeywordTypeNode(node.Kind), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsKeywordTypeNode(node *Node) bool {
switch node.Kind {
case KindAnyKeyword, KindBigIntKeyword, KindBooleanKeyword, KindIntrinsicKeyword, KindNeverKeyword, KindNumberKeyword, KindObjectKeyword, KindStringKeyword, KindSymbolKeyword, KindUndefinedKeyword, KindUnknownKeyword, KindVoidKeyword:
return true
}
return false
}
// ──────────────────────────────────────────────────────────────────────
// UnionTypeNode
// ──────────────────────────────────────────────────────────────────────
type UnionTypeNode struct {
TypeNodeBase
UnionOrIntersectionTypeNodeBase
}
func (f *NodeFactory) NewUnionTypeNode(types *TypeList) *Node {
data := f.unionTypeNodeArena.New()
data.Types = types
return f.newNode(KindUnionType, data)
}
func (f *NodeFactory) UpdateUnionTypeNode(node *UnionTypeNode, types *TypeList) *Node {
if types != node.Types {
return updateNode(f.NewUnionTypeNode(types), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *UnionTypeNode) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Types)
}
func (node *UnionTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateUnionTypeNode(node, v.visitNodes(node.Types))
}
func (node *UnionTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewUnionTypeNode(node.Types), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsUnionTypeNode(node *Node) bool {
return node.Kind == KindUnionType
}
// ──────────────────────────────────────────────────────────────────────
// IntersectionTypeNode
// ──────────────────────────────────────────────────────────────────────
type IntersectionTypeNode struct {
TypeNodeBase
UnionOrIntersectionTypeNodeBase
}
func (f *NodeFactory) NewIntersectionTypeNode(types *TypeList) *Node {
data := f.intersectionTypeNodeArena.New()
data.Types = types
return f.newNode(KindIntersectionType, data)
}
func (f *NodeFactory) UpdateIntersectionTypeNode(node *IntersectionTypeNode, types *TypeList) *Node {
if types != node.Types {
return updateNode(f.NewIntersectionTypeNode(types), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *IntersectionTypeNode) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Types)
}
func (node *IntersectionTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateIntersectionTypeNode(node, v.visitNodes(node.Types))
}
func (node *IntersectionTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewIntersectionTypeNode(node.Types), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsIntersectionTypeNode(node *Node) bool {
return node.Kind == KindIntersectionType
}
// ──────────────────────────────────────────────────────────────────────
// ConditionalTypeNode
// ──────────────────────────────────────────────────────────────────────
type ConditionalTypeNode struct {
TypeNodeBase
LocalsContainerBase
CheckType *TypeNode
ExtendsType *TypeNode
TrueType *TypeNode
FalseType *TypeNode
}
func (f *NodeFactory) NewConditionalTypeNode(checkType *TypeNode, extendsType *TypeNode, trueType *TypeNode, falseType *TypeNode) *Node {
data := &ConditionalTypeNode{}
data.CheckType = checkType
data.ExtendsType = extendsType
data.TrueType = trueType
data.FalseType = falseType
return f.newNode(KindConditionalType, data)
}
func (f *NodeFactory) UpdateConditionalTypeNode(node *ConditionalTypeNode, checkType *TypeNode, extendsType *TypeNode, trueType *TypeNode, falseType *TypeNode) *Node {
if checkType != node.CheckType || extendsType != node.ExtendsType || trueType != node.TrueType || falseType != node.FalseType {
return updateNode(f.NewConditionalTypeNode(checkType, extendsType, trueType, falseType), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ConditionalTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.CheckType) ||
visit(v, node.ExtendsType) ||
visit(v, node.TrueType) ||
visit(v, node.FalseType)
}
func (node *ConditionalTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateConditionalTypeNode(node, v.visitNode(node.CheckType), v.visitNode(node.ExtendsType), v.visitNode(node.TrueType), v.visitNode(node.FalseType))
}
func (node *ConditionalTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewConditionalTypeNode(node.CheckType, node.ExtendsType, node.TrueType, node.FalseType), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsConditionalTypeNode(node *Node) bool {
return node.Kind == KindConditionalType
}
// ──────────────────────────────────────────────────────────────────────
// TypeOperatorNode
// ──────────────────────────────────────────────────────────────────────
type TypeOperatorNode struct {
TypeNodeBase
Operator Kind
Type *TypeNode
}
func (f *NodeFactory) NewTypeOperatorNode(operator Kind, typeNode *TypeNode) *Node {
data := f.typeOperatorNodeArena.New()
data.Operator = operator
data.Type = typeNode
return f.newNode(KindTypeOperator, data)
}
func (f *NodeFactory) UpdateTypeOperatorNode(node *TypeOperatorNode, operator Kind, typeNode *TypeNode) *Node {
if operator != node.Operator || typeNode != node.Type {
return updateNode(f.NewTypeOperatorNode(operator, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TypeOperatorNode) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *TypeOperatorNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypeOperatorNode(node, node.Operator, v.visitNode(node.Type))
}
func (node *TypeOperatorNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTypeOperatorNode(node.Operator, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTypeOperatorNode(node *Node) bool {
return node.Kind == KindTypeOperator
}
// ──────────────────────────────────────────────────────────────────────
// InferTypeNode
// ──────────────────────────────────────────────────────────────────────
type InferTypeNode struct {
TypeNodeBase
TypeParameter *TypeParameterDeclarationNode
}
func (f *NodeFactory) NewInferTypeNode(typeParameter *TypeParameterDeclarationNode) *Node {
data := &InferTypeNode{}
data.TypeParameter = typeParameter
return f.newNode(KindInferType, data)
}
func (f *NodeFactory) UpdateInferTypeNode(node *InferTypeNode, typeParameter *TypeParameterDeclarationNode) *Node {
if typeParameter != node.TypeParameter {
return updateNode(f.NewInferTypeNode(typeParameter), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *InferTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.TypeParameter)
}
func (node *InferTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateInferTypeNode(node, v.visitNode(node.TypeParameter))
}
func (node *InferTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewInferTypeNode(node.TypeParameter), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsInferTypeNode(node *Node) bool {
return node.Kind == KindInferType
}
// ──────────────────────────────────────────────────────────────────────
// ArrayTypeNode
// ──────────────────────────────────────────────────────────────────────
type ArrayTypeNode struct {
TypeNodeBase
ElementType *TypeNode
}
func (f *NodeFactory) NewArrayTypeNode(elementType *TypeNode) *Node {
data := f.arrayTypeNodeArena.New()
data.ElementType = elementType
return f.newNode(KindArrayType, data)
}
func (f *NodeFactory) UpdateArrayTypeNode(node *ArrayTypeNode, elementType *TypeNode) *Node {
if elementType != node.ElementType {
return updateNode(f.NewArrayTypeNode(elementType), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ArrayTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.ElementType)
}
func (node *ArrayTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateArrayTypeNode(node, v.visitNode(node.ElementType))
}
func (node *ArrayTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewArrayTypeNode(node.ElementType), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsArrayTypeNode(node *Node) bool {
return node.Kind == KindArrayType
}
// ──────────────────────────────────────────────────────────────────────
// IndexedAccessTypeNode
// ──────────────────────────────────────────────────────────────────────
type IndexedAccessTypeNode struct {
TypeNodeBase
ObjectType *TypeNode
IndexType *TypeNode
}
func (f *NodeFactory) NewIndexedAccessTypeNode(objectType *TypeNode, indexType *TypeNode) *Node {
data := f.indexedAccessTypeNodeArena.New()
data.ObjectType = objectType
data.IndexType = indexType
return f.newNode(KindIndexedAccessType, data)
}
func (f *NodeFactory) UpdateIndexedAccessTypeNode(node *IndexedAccessTypeNode, objectType *TypeNode, indexType *TypeNode) *Node {
if objectType != node.ObjectType || indexType != node.IndexType {
return updateNode(f.NewIndexedAccessTypeNode(objectType, indexType), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *IndexedAccessTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.ObjectType) || visit(v, node.IndexType)
}
func (node *IndexedAccessTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateIndexedAccessTypeNode(node, v.visitNode(node.ObjectType), v.visitNode(node.IndexType))
}
func (node *IndexedAccessTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewIndexedAccessTypeNode(node.ObjectType, node.IndexType), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsIndexedAccessTypeNode(node *Node) bool {
return node.Kind == KindIndexedAccessType
}
// ──────────────────────────────────────────────────────────────────────
// TypeReferenceNode
// ──────────────────────────────────────────────────────────────────────
type TypeReferenceNode struct {
NodeWithTypeArgumentsBase
TypeName *EntityName
}
func (f *NodeFactory) NewTypeReferenceNode(typeName *EntityName, typeArguments *TypeList) *Node {
data := f.typeReferenceNodeArena.New()
data.TypeName = typeName
data.TypeArguments = typeArguments
return f.newNode(KindTypeReference, data)
}
func (f *NodeFactory) UpdateTypeReferenceNode(node *TypeReferenceNode, typeName *EntityName, typeArguments *TypeList) *Node {
if typeName != node.TypeName || typeArguments != node.TypeArguments {
return updateNode(f.NewTypeReferenceNode(typeName, typeArguments), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TypeReferenceNode) ForEachChild(v Visitor) bool {
return visit(v, node.TypeName) || visitNodeList(v, node.TypeArguments)
}
func (node *TypeReferenceNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypeReferenceNode(node, v.visitNode(node.TypeName), v.visitNodes(node.TypeArguments))
}
func (node *TypeReferenceNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTypeReferenceNode(node.TypeName, node.TypeArguments), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTypeReferenceNode(node *Node) bool {
return node.Kind == KindTypeReference
}
// ──────────────────────────────────────────────────────────────────────
// ExpressionWithTypeArguments
// ──────────────────────────────────────────────────────────────────────
type ExpressionWithTypeArguments struct {
MemberExpressionBase
CompositeBase
Expression *Expression
TypeArguments *TypeList // Optional
}
func (f *NodeFactory) NewExpressionWithTypeArguments(expression *Expression, typeArguments *TypeList) *Node {
data := f.expressionWithTypeArgumentsArena.New()
data.Expression = expression
data.TypeArguments = typeArguments
return f.newNode(KindExpressionWithTypeArguments, data)
}
func (f *NodeFactory) UpdateExpressionWithTypeArguments(node *ExpressionWithTypeArguments, expression *Expression, typeArguments *TypeList) *Node {
if expression != node.Expression || typeArguments != node.TypeArguments {
return updateNode(f.NewExpressionWithTypeArguments(expression, typeArguments), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ExpressionWithTypeArguments) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visitNodeList(v, node.TypeArguments)
}
func (node *ExpressionWithTypeArguments) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateExpressionWithTypeArguments(node, v.visitNode(node.Expression), v.visitNodes(node.TypeArguments))
}
func (node *ExpressionWithTypeArguments) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewExpressionWithTypeArguments(node.Expression, node.TypeArguments), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsExpressionWithTypeArguments(node *Node) bool {
return node.Kind == KindExpressionWithTypeArguments
}
// ──────────────────────────────────────────────────────────────────────
// LiteralTypeNode
// ──────────────────────────────────────────────────────────────────────
type LiteralTypeNode struct {
TypeNodeBase
Literal *Node
}
func (f *NodeFactory) NewLiteralTypeNode(literal *Node) *Node {
data := f.literalTypeNodeArena.New()
data.Literal = literal
return f.newNode(KindLiteralType, data)
}
func (f *NodeFactory) UpdateLiteralTypeNode(node *LiteralTypeNode, literal *Node) *Node {
if literal != node.Literal {
return updateNode(f.NewLiteralTypeNode(literal), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *LiteralTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.Literal)
}
func (node *LiteralTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateLiteralTypeNode(node, v.visitNode(node.Literal))
}
func (node *LiteralTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewLiteralTypeNode(node.Literal), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsLiteralTypeNode(node *Node) bool {
return node.Kind == KindLiteralType
}
// ──────────────────────────────────────────────────────────────────────
// ThisTypeNode
// ──────────────────────────────────────────────────────────────────────
type ThisTypeNode struct {
TypeNodeBase
}
func (f *NodeFactory) NewThisTypeNode() *Node {
data := &ThisTypeNode{}
return f.newNode(KindThisType, data)
}
func (node *ThisTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewThisTypeNode(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsThisTypeNode(node *Node) bool {
return node.Kind == KindThisType
}
// ──────────────────────────────────────────────────────────────────────
// TypePredicateNode
// ──────────────────────────────────────────────────────────────────────
type TypePredicateNode struct {
TypeNodeBase
AssertsModifier *AssertsKeyword // Optional
ParameterName *TypePredicateParameterName
Type *TypeNode // Optional
}
func (f *NodeFactory) NewTypePredicateNode(assertsModifier *AssertsKeyword, parameterName *TypePredicateParameterName, typeNode *TypeNode) *Node {
data := &TypePredicateNode{}
data.AssertsModifier = assertsModifier
data.ParameterName = parameterName
data.Type = typeNode
return f.newNode(KindTypePredicate, data)
}
func (f *NodeFactory) UpdateTypePredicateNode(node *TypePredicateNode, assertsModifier *AssertsKeyword, parameterName *TypePredicateParameterName, typeNode *TypeNode) *Node {
if assertsModifier != node.AssertsModifier || parameterName != node.ParameterName || typeNode != node.Type {
return updateNode(f.NewTypePredicateNode(assertsModifier, parameterName, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TypePredicateNode) ForEachChild(v Visitor) bool {
return visit(v, node.AssertsModifier) || visit(v, node.ParameterName) || visit(v, node.Type)
}
func (node *TypePredicateNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypePredicateNode(node, v.visitNode(node.AssertsModifier), v.visitNode(node.ParameterName), v.visitNode(node.Type))
}
func (node *TypePredicateNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTypePredicateNode(node.AssertsModifier, node.ParameterName, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTypePredicateNode(node *Node) bool {
return node.Kind == KindTypePredicate
}
// ──────────────────────────────────────────────────────────────────────
// ImportAttribute
// ──────────────────────────────────────────────────────────────────────
type ImportAttribute struct {
NodeBase
CompositeBase
name *ImportAttributeName
Value *Expression
}
func (f *NodeFactory) NewImportAttribute(name *ImportAttributeName, value *Expression) *Node {
data := &ImportAttribute{}
data.name = name
data.Value = value
return f.newNode(KindImportAttribute, data)
}
func (f *NodeFactory) UpdateImportAttribute(node *ImportAttribute, name *ImportAttributeName, value *Expression) *Node {
if name != node.name || value != node.Value {
return updateNode(f.NewImportAttribute(name, value), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ImportAttribute) ForEachChild(v Visitor) bool {
return visit(v, node.name) || visit(v, node.Value)
}
func (node *ImportAttribute) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateImportAttribute(node, v.visitNode(node.name), v.visitNode(node.Value))
}
func (node *ImportAttribute) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewImportAttribute(node.name, node.Value), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ImportAttribute) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.name) |
propagateSubtreeFacts(node.Value)
}
func (node *ImportAttribute) Name() *DeclarationName {
return node.name
}
func IsImportAttribute(node *Node) bool {
return node.Kind == KindImportAttribute
}
// ──────────────────────────────────────────────────────────────────────
// ImportAttributes
// ──────────────────────────────────────────────────────────────────────
type ImportAttributes struct {
NodeBase
CompositeBase
Token Kind
Attributes *ImportAttributeList
MultiLine bool
}
func (f *NodeFactory) NewImportAttributes(token Kind, attributes *ImportAttributeList, multiLine bool) *Node {
data := &ImportAttributes{}
data.Token = token
data.Attributes = attributes
data.MultiLine = multiLine
return f.newNode(KindImportAttributes, data)
}
func (f *NodeFactory) UpdateImportAttributes(node *ImportAttributes, token Kind, attributes *ImportAttributeList, multiLine bool) *Node {
if token != node.Token || attributes != node.Attributes || multiLine != node.MultiLine {
return updateNode(f.NewImportAttributes(token, attributes, multiLine), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ImportAttributes) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Attributes)
}
func (node *ImportAttributes) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateImportAttributes(node, node.Token, v.visitNodes(node.Attributes), node.MultiLine)
}
func (node *ImportAttributes) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewImportAttributes(node.Token, node.Attributes, node.MultiLine), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ImportAttributes) computeSubtreeFacts() SubtreeFacts {
return propagateNodeListSubtreeFacts(node.Attributes, propagateSubtreeFacts)
}
func IsImportAttributes(node *Node) bool {
return node.Kind == KindImportAttributes
}
// ──────────────────────────────────────────────────────────────────────
// TypeQueryNode
// ──────────────────────────────────────────────────────────────────────
type TypeQueryNode struct {
NodeWithTypeArgumentsBase
ExprName *EntityName
}
func (f *NodeFactory) NewTypeQueryNode(exprName *EntityName, typeArguments *TypeList) *Node {
data := &TypeQueryNode{}
data.ExprName = exprName
data.TypeArguments = typeArguments
return f.newNode(KindTypeQuery, data)
}
func (f *NodeFactory) UpdateTypeQueryNode(node *TypeQueryNode, exprName *EntityName, typeArguments *TypeList) *Node {
if exprName != node.ExprName || typeArguments != node.TypeArguments {
return updateNode(f.NewTypeQueryNode(exprName, typeArguments), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TypeQueryNode) ForEachChild(v Visitor) bool {
return visit(v, node.ExprName) || visitNodeList(v, node.TypeArguments)
}
func (node *TypeQueryNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypeQueryNode(node, v.visitNode(node.ExprName), v.visitNodes(node.TypeArguments))
}
func (node *TypeQueryNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTypeQueryNode(node.ExprName, node.TypeArguments), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTypeQueryNode(node *Node) bool {
return node.Kind == KindTypeQuery
}
// ──────────────────────────────────────────────────────────────────────
// MappedTypeNode
// ──────────────────────────────────────────────────────────────────────
type MappedTypeNode struct {
TypeNodeBase
DeclarationBase
LocalsContainerBase
ReadonlyToken *TokenNode // Optional
TypeParameter *TypeParameterDeclarationNode
NameType *TypeNode // Optional
QuestionToken *TokenNode // Optional
Type *TypeNode // Optional
Members *TypeElementList // Optional
}
func (f *NodeFactory) NewMappedTypeNode(readonlyToken *TokenNode, typeParameter *TypeParameterDeclarationNode, nameType *TypeNode, questionToken *TokenNode, typeNode *TypeNode, members *TypeElementList) *Node {
data := &MappedTypeNode{}
data.ReadonlyToken = readonlyToken
data.TypeParameter = typeParameter
data.NameType = nameType
data.QuestionToken = questionToken
data.Type = typeNode
data.Members = members
return f.newNode(KindMappedType, data)
}
func (f *NodeFactory) UpdateMappedTypeNode(node *MappedTypeNode, readonlyToken *TokenNode, typeParameter *TypeParameterDeclarationNode, nameType *TypeNode, questionToken *TokenNode, typeNode *TypeNode, members *TypeElementList) *Node {
if readonlyToken != node.ReadonlyToken || typeParameter != node.TypeParameter || nameType != node.NameType || questionToken != node.QuestionToken || typeNode != node.Type || members != node.Members {
return updateNode(f.NewMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, typeNode, members), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *MappedTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.ReadonlyToken) ||
visit(v, node.TypeParameter) ||
visit(v, node.NameType) ||
visit(v, node.QuestionToken) ||
visit(v, node.Type) ||
visitNodeList(v, node.Members)
}
func (node *MappedTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateMappedTypeNode(node, v.visitNode(node.ReadonlyToken), v.visitNode(node.TypeParameter), v.visitNode(node.NameType), v.visitNode(node.QuestionToken), v.visitNode(node.Type), v.visitNodes(node.Members))
}
func (node *MappedTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewMappedTypeNode(node.ReadonlyToken, node.TypeParameter, node.NameType, node.QuestionToken, node.Type, node.Members), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsMappedTypeNode(node *Node) bool {
return node.Kind == KindMappedType
}
// ──────────────────────────────────────────────────────────────────────
// TypeLiteralNode
// ──────────────────────────────────────────────────────────────────────
type TypeLiteralNode struct {
TypeNodeBase
DeclarationBase
Members *TypeElementList
}
func (f *NodeFactory) NewTypeLiteralNode(members *TypeElementList) *Node {
data := f.typeLiteralNodeArena.New()
data.Members = members
return f.newNode(KindTypeLiteral, data)
}
func (f *NodeFactory) UpdateTypeLiteralNode(node *TypeLiteralNode, members *TypeElementList) *Node {
if members != node.Members {
return updateNode(f.NewTypeLiteralNode(members), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TypeLiteralNode) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Members)
}
func (node *TypeLiteralNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypeLiteralNode(node, v.visitNodes(node.Members))
}
func (node *TypeLiteralNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTypeLiteralNode(node.Members), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTypeLiteralNode(node *Node) bool {
return node.Kind == KindTypeLiteral
}
// ──────────────────────────────────────────────────────────────────────
// TupleTypeNode
// ──────────────────────────────────────────────────────────────────────
type TupleTypeNode struct {
TypeNodeBase
Elements *TypeList
}
func (f *NodeFactory) NewTupleTypeNode(elements *TypeList) *Node {
data := &TupleTypeNode{}
data.Elements = elements
return f.newNode(KindTupleType, data)
}
func (f *NodeFactory) UpdateTupleTypeNode(node *TupleTypeNode, elements *TypeList) *Node {
if elements != node.Elements {
return updateNode(f.NewTupleTypeNode(elements), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TupleTypeNode) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Elements)
}
func (node *TupleTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTupleTypeNode(node, v.visitNodes(node.Elements))
}
func (node *TupleTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTupleTypeNode(node.Elements), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTupleTypeNode(node *Node) bool {
return node.Kind == KindTupleType
}
// ──────────────────────────────────────────────────────────────────────
// NamedTupleMember
// ──────────────────────────────────────────────────────────────────────
type NamedTupleMember struct {
TypeNodeBase
DeclarationBase
DotDotDotToken *DotDotDotToken // Optional
name *IdentifierNode
QuestionToken *QuestionToken // Optional
Type *TypeNode
}
func (f *NodeFactory) NewNamedTupleMember(dotDotDotToken *DotDotDotToken, name *IdentifierNode, questionToken *QuestionToken, typeNode *TypeNode) *Node {
data := &NamedTupleMember{}
data.DotDotDotToken = dotDotDotToken
data.name = name
data.QuestionToken = questionToken
data.Type = typeNode
return f.newNode(KindNamedTupleMember, data)
}
func (f *NodeFactory) UpdateNamedTupleMember(node *NamedTupleMember, dotDotDotToken *DotDotDotToken, name *IdentifierNode, questionToken *QuestionToken, typeNode *TypeNode) *Node {
if dotDotDotToken != node.DotDotDotToken || name != node.name || questionToken != node.QuestionToken || typeNode != node.Type {
return updateNode(f.NewNamedTupleMember(dotDotDotToken, name, questionToken, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *NamedTupleMember) ForEachChild(v Visitor) bool {
return visit(v, node.DotDotDotToken) ||
visit(v, node.name) ||
visit(v, node.QuestionToken) ||
visit(v, node.Type)
}
func (node *NamedTupleMember) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateNamedTupleMember(node, v.visitNode(node.DotDotDotToken), v.visitNode(node.name), v.visitNode(node.QuestionToken), v.visitNode(node.Type))
}
func (node *NamedTupleMember) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewNamedTupleMember(node.DotDotDotToken, node.name, node.QuestionToken, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *NamedTupleMember) Name() *DeclarationName {
return node.name
}
func IsNamedTupleMember(node *Node) bool {
return node.Kind == KindNamedTupleMember
}
// ──────────────────────────────────────────────────────────────────────
// OptionalTypeNode
// ──────────────────────────────────────────────────────────────────────
type OptionalTypeNode struct {
TypeNodeBase
Type *TypeNode
}
func (f *NodeFactory) NewOptionalTypeNode(typeNode *TypeNode) *Node {
data := &OptionalTypeNode{}
data.Type = typeNode
return f.newNode(KindOptionalType, data)
}
func (f *NodeFactory) UpdateOptionalTypeNode(node *OptionalTypeNode, typeNode *TypeNode) *Node {
if typeNode != node.Type {
return updateNode(f.NewOptionalTypeNode(typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *OptionalTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *OptionalTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateOptionalTypeNode(node, v.visitNode(node.Type))
}
func (node *OptionalTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewOptionalTypeNode(node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsOptionalTypeNode(node *Node) bool {
return node.Kind == KindOptionalType
}
// ──────────────────────────────────────────────────────────────────────
// RestTypeNode
// ──────────────────────────────────────────────────────────────────────
type RestTypeNode struct {
TypeNodeBase
Type *TypeNode
}
func (f *NodeFactory) NewRestTypeNode(typeNode *TypeNode) *Node {
data := &RestTypeNode{}
data.Type = typeNode
return f.newNode(KindRestType, data)
}
func (f *NodeFactory) UpdateRestTypeNode(node *RestTypeNode, typeNode *TypeNode) *Node {
if typeNode != node.Type {
return updateNode(f.NewRestTypeNode(typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *RestTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *RestTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateRestTypeNode(node, v.visitNode(node.Type))
}
func (node *RestTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewRestTypeNode(node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsRestTypeNode(node *Node) bool {
return node.Kind == KindRestType
}
// ──────────────────────────────────────────────────────────────────────
// ParenthesizedTypeNode
// ──────────────────────────────────────────────────────────────────────
type ParenthesizedTypeNode struct {
TypeNodeBase
Type *TypeNode
}
func (f *NodeFactory) NewParenthesizedTypeNode(typeNode *TypeNode) *Node {
data := f.parenthesizedTypeNodeArena.New()
data.Type = typeNode
return f.newNode(KindParenthesizedType, data)
}
func (f *NodeFactory) UpdateParenthesizedTypeNode(node *ParenthesizedTypeNode, typeNode *TypeNode) *Node {
if typeNode != node.Type {
return updateNode(f.NewParenthesizedTypeNode(typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ParenthesizedTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *ParenthesizedTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateParenthesizedTypeNode(node, v.visitNode(node.Type))
}
func (node *ParenthesizedTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewParenthesizedTypeNode(node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsParenthesizedTypeNode(node *Node) bool {
return node.Kind == KindParenthesizedType
}
// ──────────────────────────────────────────────────────────────────────
// FunctionTypeNode
// ──────────────────────────────────────────────────────────────────────
type FunctionTypeNode struct {
TypeNodeBase
FunctionOrConstructorTypeNodeBase
}
func (f *NodeFactory) NewFunctionTypeNode(typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
data := f.functionTypeNodeArena.New()
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
return f.newNode(KindFunctionType, data)
}
func (f *NodeFactory) UpdateFunctionTypeNode(node *FunctionTypeNode, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
if typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type {
return updateNode(f.NewFunctionTypeNode(typeParameters, parameters, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *FunctionTypeNode) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.TypeParameters) || visitNodeList(v, node.Parameters) || visit(v, node.Type)
}
func (node *FunctionTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateFunctionTypeNode(node, v.visitNodes(node.TypeParameters), v.visitNodes(node.Parameters), v.visitNode(node.Type))
}
func (node *FunctionTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewFunctionTypeNode(node.TypeParameters, node.Parameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsFunctionTypeNode(node *Node) bool {
return node.Kind == KindFunctionType
}
// ──────────────────────────────────────────────────────────────────────
// ConstructorTypeNode
// ──────────────────────────────────────────────────────────────────────
type ConstructorTypeNode struct {
TypeNodeBase
FunctionOrConstructorTypeNodeBase
}
func (f *NodeFactory) NewConstructorTypeNode(modifiers *ModifierList, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
data := &ConstructorTypeNode{}
data.modifiers = modifiers
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
return f.newNode(KindConstructorType, data)
}
func (f *NodeFactory) UpdateConstructorTypeNode(node *ConstructorTypeNode, modifiers *ModifierList, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
if modifiers != node.modifiers || typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type {
return updateNode(f.NewConstructorTypeNode(modifiers, typeParameters, parameters, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ConstructorTypeNode) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Parameters) ||
visit(v, node.Type)
}
func (node *ConstructorTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateConstructorTypeNode(node, v.visitModifiers(node.modifiers), v.visitNodes(node.TypeParameters), v.visitNodes(node.Parameters), v.visitNode(node.Type))
}
func (node *ConstructorTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewConstructorTypeNode(node.Modifiers(), node.TypeParameters, node.Parameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsConstructorTypeNode(node *Node) bool {
return node.Kind == KindConstructorType
}
// ──────────────────────────────────────────────────────────────────────
// TemplateHead
// ──────────────────────────────────────────────────────────────────────
type TemplateHead struct {
NodeBase
TemplateLiteralLikeNodeBase
}
func (f *NodeFactory) NewTemplateHead(text string, rawText string, templateFlags TokenFlags) *Node {
data := &TemplateHead{}
data.Text = text
data.RawText = rawText
data.TemplateFlags = templateFlags & TokenFlagsTemplateLiteralLikeFlags
f.textCount++
return f.newNode(KindTemplateHead, data)
}
func (node *TemplateHead) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTemplateHead(node.Text, node.RawText, node.TemplateFlags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTemplateHead(node *Node) bool {
return node.Kind == KindTemplateHead
}
// ──────────────────────────────────────────────────────────────────────
// TemplateMiddle
// ──────────────────────────────────────────────────────────────────────
type TemplateMiddle struct {
NodeBase
TemplateLiteralLikeNodeBase
}
func (f *NodeFactory) NewTemplateMiddle(text string, rawText string, templateFlags TokenFlags) *Node {
data := &TemplateMiddle{}
data.Text = text
data.RawText = rawText
data.TemplateFlags = templateFlags & TokenFlagsTemplateLiteralLikeFlags
f.textCount++
return f.newNode(KindTemplateMiddle, data)
}
func (node *TemplateMiddle) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTemplateMiddle(node.Text, node.RawText, node.TemplateFlags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTemplateMiddle(node *Node) bool {
return node.Kind == KindTemplateMiddle
}
// ──────────────────────────────────────────────────────────────────────
// TemplateTail
// ──────────────────────────────────────────────────────────────────────
type TemplateTail struct {
NodeBase
TemplateLiteralLikeNodeBase
}
func (f *NodeFactory) NewTemplateTail(text string, rawText string, templateFlags TokenFlags) *Node {
data := &TemplateTail{}
data.Text = text
data.RawText = rawText
data.TemplateFlags = templateFlags & TokenFlagsTemplateLiteralLikeFlags
f.textCount++
return f.newNode(KindTemplateTail, data)
}
func (node *TemplateTail) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTemplateTail(node.Text, node.RawText, node.TemplateFlags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTemplateTail(node *Node) bool {
return node.Kind == KindTemplateTail
}
// ──────────────────────────────────────────────────────────────────────
// TemplateLiteralTypeNode
// ──────────────────────────────────────────────────────────────────────
type TemplateLiteralTypeNode struct {
TypeNodeBase
Head *TemplateHeadNode
TemplateSpans *TemplateLiteralTypeSpanList
}
func (f *NodeFactory) NewTemplateLiteralTypeNode(head *TemplateHeadNode, templateSpans *TemplateLiteralTypeSpanList) *Node {
data := &TemplateLiteralTypeNode{}
data.Head = head
data.TemplateSpans = templateSpans
return f.newNode(KindTemplateLiteralType, data)
}
func (f *NodeFactory) UpdateTemplateLiteralTypeNode(node *TemplateLiteralTypeNode, head *TemplateHeadNode, templateSpans *TemplateLiteralTypeSpanList) *Node {
if head != node.Head || templateSpans != node.TemplateSpans {
return updateNode(f.NewTemplateLiteralTypeNode(head, templateSpans), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TemplateLiteralTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.Head) || visitNodeList(v, node.TemplateSpans)
}
func (node *TemplateLiteralTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTemplateLiteralTypeNode(node, v.visitNode(node.Head), v.visitNodes(node.TemplateSpans))
}
func (node *TemplateLiteralTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTemplateLiteralTypeNode(node.Head, node.TemplateSpans), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTemplateLiteralTypeNode(node *Node) bool {
return node.Kind == KindTemplateLiteralType
}
// ──────────────────────────────────────────────────────────────────────
// TemplateLiteralTypeSpan
// ──────────────────────────────────────────────────────────────────────
type TemplateLiteralTypeSpan struct {
TypeNodeBase
Type *TypeNode
Literal *TemplateMiddleOrTail
}
func (f *NodeFactory) NewTemplateLiteralTypeSpan(typeNode *TypeNode, literal *TemplateMiddleOrTail) *Node {
data := &TemplateLiteralTypeSpan{}
data.Type = typeNode
data.Literal = literal
return f.newNode(KindTemplateLiteralTypeSpan, data)
}
func (f *NodeFactory) UpdateTemplateLiteralTypeSpan(node *TemplateLiteralTypeSpan, typeNode *TypeNode, literal *TemplateMiddleOrTail) *Node {
if typeNode != node.Type || literal != node.Literal {
return updateNode(f.NewTemplateLiteralTypeSpan(typeNode, literal), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TemplateLiteralTypeSpan) ForEachChild(v Visitor) bool {
return visit(v, node.Type) || visit(v, node.Literal)
}
func (node *TemplateLiteralTypeSpan) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTemplateLiteralTypeSpan(node, v.visitNode(node.Type), v.visitNode(node.Literal))
}
func (node *TemplateLiteralTypeSpan) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTemplateLiteralTypeSpan(node.Type, node.Literal), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsTemplateLiteralTypeSpan(node *Node) bool {
return node.Kind == KindTemplateLiteralTypeSpan
}
// ──────────────────────────────────────────────────────────────────────
// SyntheticExpression
// ──────────────────────────────────────────────────────────────────────
type SyntheticExpression struct {
ExpressionBase
Type any
IsSpread bool
TupleNameSource *Node // Optional
}
func (f *NodeFactory) NewSyntheticExpression(typeNode any, isSpread bool, tupleNameSource *Node) *Node {
data := &SyntheticExpression{}
data.Type = typeNode
data.IsSpread = isSpread
data.TupleNameSource = tupleNameSource
return f.newNode(KindSyntheticExpression, data)
}
func (f *NodeFactory) UpdateSyntheticExpression(node *SyntheticExpression, typeNode any, isSpread bool, tupleNameSource *Node) *Node {
if typeNode != node.Type || isSpread != node.IsSpread || tupleNameSource != node.TupleNameSource {
return updateNode(f.NewSyntheticExpression(typeNode, isSpread, tupleNameSource), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *SyntheticExpression) ForEachChild(v Visitor) bool {
return visit(v, node.TupleNameSource)
}
func (node *SyntheticExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateSyntheticExpression(node, node.Type, node.IsSpread, v.visitNode(node.TupleNameSource))
}
func (node *SyntheticExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSyntheticExpression(node.Type, node.IsSpread, node.TupleNameSource), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsSyntheticExpression(node *Node) bool {
return node.Kind == KindSyntheticExpression
}
// ──────────────────────────────────────────────────────────────────────
// PartiallyEmittedExpression
// ──────────────────────────────────────────────────────────────────────
type PartiallyEmittedExpression struct {
LeftHandSideExpressionBase
Expression *Expression
}
func (f *NodeFactory) NewPartiallyEmittedExpression(expression *Expression) *Node {
data := &PartiallyEmittedExpression{}
data.Expression = expression
return f.newNode(KindPartiallyEmittedExpression, data)
}
func (f *NodeFactory) UpdatePartiallyEmittedExpression(node *PartiallyEmittedExpression, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewPartiallyEmittedExpression(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *PartiallyEmittedExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *PartiallyEmittedExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdatePartiallyEmittedExpression(node, v.visitNode(node.Expression))
}
func (node *PartiallyEmittedExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewPartiallyEmittedExpression(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *PartiallyEmittedExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression)
}
func IsPartiallyEmittedExpression(node *Node) bool {
return node.Kind == KindPartiallyEmittedExpression
}
// ──────────────────────────────────────────────────────────────────────
// JsxElement
// ──────────────────────────────────────────────────────────────────────
type JsxElement struct {
PrimaryExpressionBase
CompositeBase
OpeningElement *JsxOpeningElementNode
Children *JsxChildList
ClosingElement *JsxClosingElementNode
}
func (f *NodeFactory) NewJsxElement(openingElement *JsxOpeningElementNode, children *JsxChildList, closingElement *JsxClosingElementNode) *Node {
data := &JsxElement{}
data.OpeningElement = openingElement
data.Children = children
data.ClosingElement = closingElement
return f.newNode(KindJsxElement, data)
}
func (f *NodeFactory) UpdateJsxElement(node *JsxElement, openingElement *JsxOpeningElementNode, children *JsxChildList, closingElement *JsxClosingElementNode) *Node {
if openingElement != node.OpeningElement || children != node.Children || closingElement != node.ClosingElement {
return updateNode(f.NewJsxElement(openingElement, children, closingElement), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxElement) ForEachChild(v Visitor) bool {
return visit(v, node.OpeningElement) || visitNodeList(v, node.Children) || visit(v, node.ClosingElement)
}
func (node *JsxElement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxElement(node, v.visitNode(node.OpeningElement), v.visitNodes(node.Children), v.visitNode(node.ClosingElement))
}
func (node *JsxElement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxElement(node.OpeningElement, node.Children, node.ClosingElement), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxElement(node *Node) bool {
return node.Kind == KindJsxElement
}
// ──────────────────────────────────────────────────────────────────────
// JsxAttributes
// ──────────────────────────────────────────────────────────────────────
type JsxAttributes struct {
PrimaryExpressionBase
DeclarationBase
CompositeBase
Properties *JsxAttributeList
}
func (f *NodeFactory) NewJsxAttributes(properties *JsxAttributeList) *Node {
data := &JsxAttributes{}
data.Properties = properties
return f.newNode(KindJsxAttributes, data)
}
func (f *NodeFactory) UpdateJsxAttributes(node *JsxAttributes, properties *JsxAttributeList) *Node {
if properties != node.Properties {
return updateNode(f.NewJsxAttributes(properties), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxAttributes) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Properties)
}
func (node *JsxAttributes) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxAttributes(node, v.visitNodes(node.Properties))
}
func (node *JsxAttributes) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxAttributes(node.Properties), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxAttributes(node *Node) bool {
return node.Kind == KindJsxAttributes
}
// ──────────────────────────────────────────────────────────────────────
// JsxNamespacedName
// ──────────────────────────────────────────────────────────────────────
type JsxNamespacedName struct {
ExpressionBase
CompositeBase
Namespace *IdentifierNode
name *IdentifierNode
}
func (f *NodeFactory) NewJsxNamespacedName(namespace *IdentifierNode, name *IdentifierNode) *Node {
data := &JsxNamespacedName{}
data.Namespace = namespace
data.name = name
return f.newNode(KindJsxNamespacedName, data)
}
func (f *NodeFactory) UpdateJsxNamespacedName(node *JsxNamespacedName, namespace *IdentifierNode, name *IdentifierNode) *Node {
if namespace != node.Namespace || name != node.name {
return updateNode(f.NewJsxNamespacedName(namespace, name), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxNamespacedName) ForEachChild(v Visitor) bool {
return visit(v, node.Namespace) || visit(v, node.name)
}
func (node *JsxNamespacedName) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxNamespacedName(node, v.visitNode(node.Namespace), v.visitNode(node.name))
}
func (node *JsxNamespacedName) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxNamespacedName(node.Namespace, node.name), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JsxNamespacedName) Name() *DeclarationName {
return node.name
}
func IsJsxNamespacedName(node *Node) bool {
return node.Kind == KindJsxNamespacedName
}
// ──────────────────────────────────────────────────────────────────────
// JsxOpeningElement
// ──────────────────────────────────────────────────────────────────────
type JsxOpeningElement struct {
ExpressionBase
CompositeBase
TagName *JsxTagNameExpression
TypeArguments *TypeList // Optional
Attributes *JsxAttributesNode
}
func (f *NodeFactory) NewJsxOpeningElement(tagName *JsxTagNameExpression, typeArguments *TypeList, attributes *JsxAttributesNode) *Node {
data := &JsxOpeningElement{}
data.TagName = tagName
data.TypeArguments = typeArguments
data.Attributes = attributes
return f.newNode(KindJsxOpeningElement, data)
}
func (f *NodeFactory) UpdateJsxOpeningElement(node *JsxOpeningElement, tagName *JsxTagNameExpression, typeArguments *TypeList, attributes *JsxAttributesNode) *Node {
if tagName != node.TagName || typeArguments != node.TypeArguments || attributes != node.Attributes {
return updateNode(f.NewJsxOpeningElement(tagName, typeArguments, attributes), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxOpeningElement) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.TypeArguments) || visit(v, node.Attributes)
}
func (node *JsxOpeningElement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxOpeningElement(node, v.visitNode(node.TagName), v.visitNodes(node.TypeArguments), v.visitNode(node.Attributes))
}
func (node *JsxOpeningElement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxOpeningElement(node.TagName, node.TypeArguments, node.Attributes), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxOpeningElement(node *Node) bool {
return node.Kind == KindJsxOpeningElement
}
// ──────────────────────────────────────────────────────────────────────
// JsxSelfClosingElement
// ──────────────────────────────────────────────────────────────────────
type JsxSelfClosingElement struct {
PrimaryExpressionBase
CompositeBase
TagName *JsxTagNameExpression
TypeArguments *TypeList // Optional
Attributes *JsxAttributesNode
}
func (f *NodeFactory) NewJsxSelfClosingElement(tagName *JsxTagNameExpression, typeArguments *TypeList, attributes *JsxAttributesNode) *Node {
data := &JsxSelfClosingElement{}
data.TagName = tagName
data.TypeArguments = typeArguments
data.Attributes = attributes
return f.newNode(KindJsxSelfClosingElement, data)
}
func (f *NodeFactory) UpdateJsxSelfClosingElement(node *JsxSelfClosingElement, tagName *JsxTagNameExpression, typeArguments *TypeList, attributes *JsxAttributesNode) *Node {
if tagName != node.TagName || typeArguments != node.TypeArguments || attributes != node.Attributes {
return updateNode(f.NewJsxSelfClosingElement(tagName, typeArguments, attributes), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxSelfClosingElement) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.TypeArguments) || visit(v, node.Attributes)
}
func (node *JsxSelfClosingElement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxSelfClosingElement(node, v.visitNode(node.TagName), v.visitNodes(node.TypeArguments), v.visitNode(node.Attributes))
}
func (node *JsxSelfClosingElement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxSelfClosingElement(node.TagName, node.TypeArguments, node.Attributes), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxSelfClosingElement(node *Node) bool {
return node.Kind == KindJsxSelfClosingElement
}
// ──────────────────────────────────────────────────────────────────────
// JsxFragment
// ──────────────────────────────────────────────────────────────────────
type JsxFragment struct {
PrimaryExpressionBase
CompositeBase
OpeningFragment *JsxOpeningFragmentNode
Children *JsxChildList
ClosingFragment *JsxClosingFragmentNode
}
func (f *NodeFactory) NewJsxFragment(openingFragment *JsxOpeningFragmentNode, children *JsxChildList, closingFragment *JsxClosingFragmentNode) *Node {
data := &JsxFragment{}
data.OpeningFragment = openingFragment
data.Children = children
data.ClosingFragment = closingFragment
return f.newNode(KindJsxFragment, data)
}
func (f *NodeFactory) UpdateJsxFragment(node *JsxFragment, openingFragment *JsxOpeningFragmentNode, children *JsxChildList, closingFragment *JsxClosingFragmentNode) *Node {
if openingFragment != node.OpeningFragment || children != node.Children || closingFragment != node.ClosingFragment {
return updateNode(f.NewJsxFragment(openingFragment, children, closingFragment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxFragment) ForEachChild(v Visitor) bool {
return visit(v, node.OpeningFragment) || visitNodeList(v, node.Children) || visit(v, node.ClosingFragment)
}
func (node *JsxFragment) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxFragment(node, v.visitNode(node.OpeningFragment), v.visitNodes(node.Children), v.visitNode(node.ClosingFragment))
}
func (node *JsxFragment) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxFragment(node.OpeningFragment, node.Children, node.ClosingFragment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxFragment(node *Node) bool {
return node.Kind == KindJsxFragment
}
// ──────────────────────────────────────────────────────────────────────
// JsxOpeningFragment
// ──────────────────────────────────────────────────────────────────────
type JsxOpeningFragment struct {
ExpressionBase
}
func (f *NodeFactory) NewJsxOpeningFragment() *Node {
data := &JsxOpeningFragment{}
return f.newNode(KindJsxOpeningFragment, data)
}
func (node *JsxOpeningFragment) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxOpeningFragment(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxOpeningFragment(node *Node) bool {
return node.Kind == KindJsxOpeningFragment
}
// ──────────────────────────────────────────────────────────────────────
// JsxClosingFragment
// ──────────────────────────────────────────────────────────────────────
type JsxClosingFragment struct {
ExpressionBase
}
func (f *NodeFactory) NewJsxClosingFragment() *Node {
data := &JsxClosingFragment{}
return f.newNode(KindJsxClosingFragment, data)
}
func (node *JsxClosingFragment) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxClosingFragment(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxClosingFragment(node *Node) bool {
return node.Kind == KindJsxClosingFragment
}
// ──────────────────────────────────────────────────────────────────────
// JsxAttribute
// ──────────────────────────────────────────────────────────────────────
type JsxAttribute struct {
NodeBase
DeclarationBase
CompositeBase
name *JsxAttributeName
Initializer *JsxAttributeValue // Optional
}
func (f *NodeFactory) NewJsxAttribute(name *JsxAttributeName, initializer *JsxAttributeValue) *Node {
data := &JsxAttribute{}
data.name = name
data.Initializer = initializer
return f.newNode(KindJsxAttribute, data)
}
func (f *NodeFactory) UpdateJsxAttribute(node *JsxAttribute, name *JsxAttributeName, initializer *JsxAttributeValue) *Node {
if name != node.name || initializer != node.Initializer {
return updateNode(f.NewJsxAttribute(name, initializer), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxAttribute) ForEachChild(v Visitor) bool {
return visit(v, node.name) || visit(v, node.Initializer)
}
func (node *JsxAttribute) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxAttribute(node, v.visitNode(node.name), v.visitNode(node.Initializer))
}
func (node *JsxAttribute) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxAttribute(node.name, node.Initializer), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JsxAttribute) Name() *DeclarationName {
return node.name
}
func IsJsxAttribute(node *Node) bool {
return node.Kind == KindJsxAttribute
}
// ──────────────────────────────────────────────────────────────────────
// JsxSpreadAttribute
// ──────────────────────────────────────────────────────────────────────
type JsxSpreadAttribute struct {
ObjectLiteralElementBase
NodeBase
Expression *Expression
}
func (f *NodeFactory) NewJsxSpreadAttribute(expression *Expression) *Node {
data := &JsxSpreadAttribute{}
data.Expression = expression
return f.newNode(KindJsxSpreadAttribute, data)
}
func (f *NodeFactory) UpdateJsxSpreadAttribute(node *JsxSpreadAttribute, expression *Expression) *Node {
if expression != node.Expression {
return updateNode(f.NewJsxSpreadAttribute(expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxSpreadAttribute) ForEachChild(v Visitor) bool {
return visit(v, node.Expression)
}
func (node *JsxSpreadAttribute) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxSpreadAttribute(node, v.visitNode(node.Expression))
}
func (node *JsxSpreadAttribute) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxSpreadAttribute(node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxSpreadAttribute(node *Node) bool {
return node.Kind == KindJsxSpreadAttribute
}
// ──────────────────────────────────────────────────────────────────────
// JsxClosingElement
// ──────────────────────────────────────────────────────────────────────
type JsxClosingElement struct {
NodeBase
TagName *JsxTagNameExpression
}
func (f *NodeFactory) NewJsxClosingElement(tagName *JsxTagNameExpression) *Node {
data := &JsxClosingElement{}
data.TagName = tagName
return f.newNode(KindJsxClosingElement, data)
}
func (f *NodeFactory) UpdateJsxClosingElement(node *JsxClosingElement, tagName *JsxTagNameExpression) *Node {
if tagName != node.TagName {
return updateNode(f.NewJsxClosingElement(tagName), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxClosingElement) ForEachChild(v Visitor) bool {
return visit(v, node.TagName)
}
func (node *JsxClosingElement) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxClosingElement(node, v.visitNode(node.TagName))
}
func (node *JsxClosingElement) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxClosingElement(node.TagName), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxClosingElement(node *Node) bool {
return node.Kind == KindJsxClosingElement
}
// ──────────────────────────────────────────────────────────────────────
// JsxExpression
// ──────────────────────────────────────────────────────────────────────
type JsxExpression struct {
ExpressionBase
DotDotDotToken *DotDotDotToken // Optional
Expression *Expression // Optional
}
func (f *NodeFactory) NewJsxExpression(dotDotDotToken *DotDotDotToken, expression *Expression) *Node {
data := &JsxExpression{}
data.DotDotDotToken = dotDotDotToken
data.Expression = expression
return f.newNode(KindJsxExpression, data)
}
func (f *NodeFactory) UpdateJsxExpression(node *JsxExpression, dotDotDotToken *DotDotDotToken, expression *Expression) *Node {
if dotDotDotToken != node.DotDotDotToken || expression != node.Expression {
return updateNode(f.NewJsxExpression(dotDotDotToken, expression), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JsxExpression) ForEachChild(v Visitor) bool {
return visit(v, node.DotDotDotToken) || visit(v, node.Expression)
}
func (node *JsxExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJsxExpression(node, v.visitNode(node.DotDotDotToken), v.visitNode(node.Expression))
}
func (node *JsxExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxExpression(node.DotDotDotToken, node.Expression), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxExpression(node *Node) bool {
return node.Kind == KindJsxExpression
}
// ──────────────────────────────────────────────────────────────────────
// JsxText
// ──────────────────────────────────────────────────────────────────────
type JsxText struct {
ExpressionBase
LiteralLikeNodeBase
ContainsOnlyTriviaWhiteSpaces bool
}
func (f *NodeFactory) NewJsxText(text string, containsOnlyTriviaWhiteSpaces bool) *Node {
data := &JsxText{}
data.Text = text
data.ContainsOnlyTriviaWhiteSpaces = containsOnlyTriviaWhiteSpaces
f.textCount++
return f.newNode(KindJsxText, data)
}
func (node *JsxText) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJsxText(node.Text, node.ContainsOnlyTriviaWhiteSpaces), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJsxText(node *Node) bool {
return node.Kind == KindJsxText
}
// ──────────────────────────────────────────────────────────────────────
// SyntaxList
// ──────────────────────────────────────────────────────────────────────
type SyntaxList struct {
NodeBase
Children []*Node
}
func (f *NodeFactory) NewSyntaxList(children []*Node) *Node {
data := &SyntaxList{}
data.Children = children
return f.newNode(KindSyntaxList, data)
}
func (f *NodeFactory) UpdateSyntaxList(node *SyntaxList, children []*Node) *Node {
if !core.Same(children, node.Children) {
return updateNode(f.NewSyntaxList(children), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *SyntaxList) ForEachChild(v Visitor) bool {
return visitNodes(v, node.Children)
}
func (node *SyntaxList) VisitEachChild(v *NodeVisitor) *Node {
children := core.SameMap(node.Children, func(n *Node) *Node { return v.visitNode(n) })
return v.Factory.UpdateSyntaxList(node, children)
}
func (node *SyntaxList) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSyntaxList(node.Children), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsSyntaxList(node *Node) bool {
return node.Kind == KindSyntaxList
}
// ──────────────────────────────────────────────────────────────────────
// JSDoc
// ──────────────────────────────────────────────────────────────────────
type JSDoc struct {
NodeBase
Comment *NodeList
Tags *NodeList // Optional
}
func (f *NodeFactory) NewJSDoc(comment *NodeList, tags *NodeList) *Node {
data := f.jsdocArena.New()
data.Comment = comment
data.Tags = tags
return f.newNode(KindJSDoc, data)
}
func (f *NodeFactory) UpdateJSDoc(node *JSDoc, comment *NodeList, tags *NodeList) *Node {
if comment != node.Comment || tags != node.Tags {
return updateNode(f.NewJSDoc(comment, tags), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDoc) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.Comment) || visitNodeList(v, node.Tags)
}
func (node *JSDoc) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDoc(node, v.visitNodes(node.Comment), v.visitNodes(node.Tags))
}
func (node *JSDoc) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDoc(node.Comment, node.Tags), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDoc(node *Node) bool {
return node.Kind == KindJSDoc
}
// ──────────────────────────────────────────────────────────────────────
// JSDocTypeExpression
// ──────────────────────────────────────────────────────────────────────
type JSDocTypeExpression struct {
TypeNodeBase
Type *TypeNode
}
func (f *NodeFactory) NewJSDocTypeExpression(typeNode *TypeNode) *Node {
data := &JSDocTypeExpression{}
data.Type = typeNode
return f.newNode(KindJSDocTypeExpression, data)
}
func (f *NodeFactory) UpdateJSDocTypeExpression(node *JSDocTypeExpression, typeNode *TypeNode) *Node {
if typeNode != node.Type {
return updateNode(f.NewJSDocTypeExpression(typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocTypeExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *JSDocTypeExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocTypeExpression(node, v.visitNode(node.Type))
}
func (node *JSDocTypeExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocTypeExpression(node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocTypeExpression(node *Node) bool {
return node.Kind == KindJSDocTypeExpression
}
// ──────────────────────────────────────────────────────────────────────
// JSDocNonNullableType
// ──────────────────────────────────────────────────────────────────────
type JSDocNonNullableType struct {
JSDocTypeBase
Type *TypeNode
}
func (f *NodeFactory) NewJSDocNonNullableType(typeNode *TypeNode) *Node {
data := &JSDocNonNullableType{}
data.Type = typeNode
return f.newNode(KindJSDocNonNullableType, data)
}
func (f *NodeFactory) UpdateJSDocNonNullableType(node *JSDocNonNullableType, typeNode *TypeNode) *Node {
if typeNode != node.Type {
return updateNode(f.NewJSDocNonNullableType(typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocNonNullableType) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *JSDocNonNullableType) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocNonNullableType(node, v.visitNode(node.Type))
}
func (node *JSDocNonNullableType) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocNonNullableType(node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocNonNullableType(node *Node) bool {
return node.Kind == KindJSDocNonNullableType
}
// ──────────────────────────────────────────────────────────────────────
// JSDocNullableType
// ──────────────────────────────────────────────────────────────────────
type JSDocNullableType struct {
JSDocTypeBase
Type *TypeNode
}
func (f *NodeFactory) NewJSDocNullableType(typeNode *TypeNode) *Node {
data := &JSDocNullableType{}
data.Type = typeNode
return f.newNode(KindJSDocNullableType, data)
}
func (f *NodeFactory) UpdateJSDocNullableType(node *JSDocNullableType, typeNode *TypeNode) *Node {
if typeNode != node.Type {
return updateNode(f.NewJSDocNullableType(typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocNullableType) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *JSDocNullableType) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocNullableType(node, v.visitNode(node.Type))
}
func (node *JSDocNullableType) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocNullableType(node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocNullableType(node *Node) bool {
return node.Kind == KindJSDocNullableType
}
// ──────────────────────────────────────────────────────────────────────
// JSDocAllType
// ──────────────────────────────────────────────────────────────────────
type JSDocAllType struct {
JSDocTypeBase
}
func (f *NodeFactory) NewJSDocAllType() *Node {
data := &JSDocAllType{}
return f.newNode(KindJSDocAllType, data)
}
func (node *JSDocAllType) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocAllType(), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocAllType(node *Node) bool {
return node.Kind == KindJSDocAllType
}
// ──────────────────────────────────────────────────────────────────────
// JSDocVariadicType
// ──────────────────────────────────────────────────────────────────────
type JSDocVariadicType struct {
JSDocTypeBase
Type *TypeNode
}
func (f *NodeFactory) NewJSDocVariadicType(typeNode *TypeNode) *Node {
data := &JSDocVariadicType{}
data.Type = typeNode
return f.newNode(KindJSDocVariadicType, data)
}
func (f *NodeFactory) UpdateJSDocVariadicType(node *JSDocVariadicType, typeNode *TypeNode) *Node {
if typeNode != node.Type {
return updateNode(f.NewJSDocVariadicType(typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocVariadicType) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *JSDocVariadicType) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocVariadicType(node, v.visitNode(node.Type))
}
func (node *JSDocVariadicType) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocVariadicType(node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocVariadicType(node *Node) bool {
return node.Kind == KindJSDocVariadicType
}
// ──────────────────────────────────────────────────────────────────────
// JSDocOptionalType
// ──────────────────────────────────────────────────────────────────────
type JSDocOptionalType struct {
JSDocTypeBase
Type *TypeNode
}
func (f *NodeFactory) NewJSDocOptionalType(typeNode *TypeNode) *Node {
data := &JSDocOptionalType{}
data.Type = typeNode
return f.newNode(KindJSDocOptionalType, data)
}
func (f *NodeFactory) UpdateJSDocOptionalType(node *JSDocOptionalType, typeNode *TypeNode) *Node {
if typeNode != node.Type {
return updateNode(f.NewJSDocOptionalType(typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocOptionalType) ForEachChild(v Visitor) bool {
return visit(v, node.Type)
}
func (node *JSDocOptionalType) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocOptionalType(node, v.visitNode(node.Type))
}
func (node *JSDocOptionalType) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocOptionalType(node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocOptionalType(node *Node) bool {
return node.Kind == KindJSDocOptionalType
}
// ──────────────────────────────────────────────────────────────────────
// JSDocTypeTag
// ──────────────────────────────────────────────────────────────────────
type JSDocTypeTag struct {
JSDocTagBase
TypeExpression *Node
}
func (f *NodeFactory) NewJSDocTypeTag(tagName *IdentifierNode, typeExpression *Node, comment *NodeList) *Node {
data := &JSDocTypeTag{}
data.TagName = tagName
data.TypeExpression = typeExpression
data.Comment = comment
return f.newNode(KindJSDocTypeTag, data)
}
func (f *NodeFactory) UpdateJSDocTypeTag(node *JSDocTypeTag, tagName *IdentifierNode, typeExpression *Node, comment *NodeList) *Node {
if tagName != node.TagName || typeExpression != node.TypeExpression || comment != node.Comment {
return updateNode(f.NewJSDocTypeTag(tagName, typeExpression, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocTypeTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.TypeExpression) || visitNodeList(v, node.Comment)
}
func (node *JSDocTypeTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocTypeTag(node, v.visitNode(node.TagName), v.visitNode(node.TypeExpression), v.visitNodes(node.Comment))
}
func (node *JSDocTypeTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocTypeTag(node.TagName, node.TypeExpression, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocTypeTag(node *Node) bool {
return node.Kind == KindJSDocTypeTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocUnknownTag
// ──────────────────────────────────────────────────────────────────────
type JSDocUnknownTag struct {
JSDocTagBase
}
func (f *NodeFactory) NewJSDocUnknownTag(tagName *IdentifierNode, comment *NodeList) *Node {
data := f.jsdocUnknownTagArena.New()
data.TagName = tagName
data.Comment = comment
return f.newNode(KindJSDocUnknownTag, data)
}
func (f *NodeFactory) UpdateJSDocUnknownTag(node *JSDocUnknownTag, tagName *IdentifierNode, comment *NodeList) *Node {
if tagName != node.TagName || comment != node.Comment {
return updateNode(f.NewJSDocUnknownTag(tagName, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocUnknownTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.Comment)
}
func (node *JSDocUnknownTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocUnknownTag(node, v.visitNode(node.TagName), v.visitNodes(node.Comment))
}
func (node *JSDocUnknownTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocUnknownTag(node.TagName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocUnknownTag(node *Node) bool {
return node.Kind == KindJSDocUnknownTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocTemplateTag
// ──────────────────────────────────────────────────────────────────────
type JSDocTemplateTag struct {
JSDocTagBase
Constraint *Node
TypeParameters *TypeParameterList
}
func (f *NodeFactory) NewJSDocTemplateTag(tagName *IdentifierNode, constraint *Node, typeParameters *TypeParameterList, comment *NodeList) *Node {
data := &JSDocTemplateTag{}
data.TagName = tagName
data.Constraint = constraint
data.TypeParameters = typeParameters
data.Comment = comment
return f.newNode(KindJSDocTemplateTag, data)
}
func (f *NodeFactory) UpdateJSDocTemplateTag(node *JSDocTemplateTag, tagName *IdentifierNode, constraint *Node, typeParameters *TypeParameterList, comment *NodeList) *Node {
if tagName != node.TagName || constraint != node.Constraint || typeParameters != node.TypeParameters || comment != node.Comment {
return updateNode(f.NewJSDocTemplateTag(tagName, constraint, typeParameters, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocTemplateTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) ||
visit(v, node.Constraint) ||
visitNodeList(v, node.TypeParameters) ||
visitNodeList(v, node.Comment)
}
func (node *JSDocTemplateTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocTemplateTag(node, v.visitNode(node.TagName), v.visitNode(node.Constraint), v.visitNodes(node.TypeParameters), v.visitNodes(node.Comment))
}
func (node *JSDocTemplateTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocTemplateTag(node.TagName, node.Constraint, node.TypeParameters, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocTemplateTag(node *Node) bool {
return node.Kind == KindJSDocTemplateTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocReturnTag
// ──────────────────────────────────────────────────────────────────────
type JSDocReturnTag struct {
JSDocTagBase
TypeExpression *TypeNode // Optional
}
func (f *NodeFactory) NewJSDocReturnTag(tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
data := &JSDocReturnTag{}
data.TagName = tagName
data.TypeExpression = typeExpression
data.Comment = comment
return f.newNode(KindJSDocReturnTag, data)
}
func (f *NodeFactory) UpdateJSDocReturnTag(node *JSDocReturnTag, tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
if tagName != node.TagName || typeExpression != node.TypeExpression || comment != node.Comment {
return updateNode(f.NewJSDocReturnTag(tagName, typeExpression, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocReturnTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.TypeExpression) || visitNodeList(v, node.Comment)
}
func (node *JSDocReturnTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocReturnTag(node, v.visitNode(node.TagName), v.visitNode(node.TypeExpression), v.visitNodes(node.Comment))
}
func (node *JSDocReturnTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocReturnTag(node.TagName, node.TypeExpression, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocReturnTag(node *Node) bool {
return node.Kind == KindJSDocReturnTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocPublicTag
// ──────────────────────────────────────────────────────────────────────
type JSDocPublicTag struct {
JSDocTagBase
}
func (f *NodeFactory) NewJSDocPublicTag(tagName *IdentifierNode, comment *NodeList) *Node {
data := &JSDocPublicTag{}
data.TagName = tagName
data.Comment = comment
return f.newNode(KindJSDocPublicTag, data)
}
func (f *NodeFactory) UpdateJSDocPublicTag(node *JSDocPublicTag, tagName *IdentifierNode, comment *NodeList) *Node {
if tagName != node.TagName || comment != node.Comment {
return updateNode(f.NewJSDocPublicTag(tagName, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocPublicTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.Comment)
}
func (node *JSDocPublicTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocPublicTag(node, v.visitNode(node.TagName), v.visitNodes(node.Comment))
}
func (node *JSDocPublicTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocPublicTag(node.TagName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocPublicTag(node *Node) bool {
return node.Kind == KindJSDocPublicTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocPrivateTag
// ──────────────────────────────────────────────────────────────────────
type JSDocPrivateTag struct {
JSDocTagBase
}
func (f *NodeFactory) NewJSDocPrivateTag(tagName *IdentifierNode, comment *NodeList) *Node {
data := &JSDocPrivateTag{}
data.TagName = tagName
data.Comment = comment
return f.newNode(KindJSDocPrivateTag, data)
}
func (f *NodeFactory) UpdateJSDocPrivateTag(node *JSDocPrivateTag, tagName *IdentifierNode, comment *NodeList) *Node {
if tagName != node.TagName || comment != node.Comment {
return updateNode(f.NewJSDocPrivateTag(tagName, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocPrivateTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.Comment)
}
func (node *JSDocPrivateTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocPrivateTag(node, v.visitNode(node.TagName), v.visitNodes(node.Comment))
}
func (node *JSDocPrivateTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocPrivateTag(node.TagName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocPrivateTag(node *Node) bool {
return node.Kind == KindJSDocPrivateTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocProtectedTag
// ──────────────────────────────────────────────────────────────────────
type JSDocProtectedTag struct {
JSDocTagBase
}
func (f *NodeFactory) NewJSDocProtectedTag(tagName *IdentifierNode, comment *NodeList) *Node {
data := &JSDocProtectedTag{}
data.TagName = tagName
data.Comment = comment
return f.newNode(KindJSDocProtectedTag, data)
}
func (f *NodeFactory) UpdateJSDocProtectedTag(node *JSDocProtectedTag, tagName *IdentifierNode, comment *NodeList) *Node {
if tagName != node.TagName || comment != node.Comment {
return updateNode(f.NewJSDocProtectedTag(tagName, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocProtectedTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.Comment)
}
func (node *JSDocProtectedTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocProtectedTag(node, v.visitNode(node.TagName), v.visitNodes(node.Comment))
}
func (node *JSDocProtectedTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocProtectedTag(node.TagName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocProtectedTag(node *Node) bool {
return node.Kind == KindJSDocProtectedTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocReadonlyTag
// ──────────────────────────────────────────────────────────────────────
type JSDocReadonlyTag struct {
JSDocTagBase
}
func (f *NodeFactory) NewJSDocReadonlyTag(tagName *IdentifierNode, comment *NodeList) *Node {
data := &JSDocReadonlyTag{}
data.TagName = tagName
data.Comment = comment
return f.newNode(KindJSDocReadonlyTag, data)
}
func (f *NodeFactory) UpdateJSDocReadonlyTag(node *JSDocReadonlyTag, tagName *IdentifierNode, comment *NodeList) *Node {
if tagName != node.TagName || comment != node.Comment {
return updateNode(f.NewJSDocReadonlyTag(tagName, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocReadonlyTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.Comment)
}
func (node *JSDocReadonlyTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocReadonlyTag(node, v.visitNode(node.TagName), v.visitNodes(node.Comment))
}
func (node *JSDocReadonlyTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocReadonlyTag(node.TagName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocReadonlyTag(node *Node) bool {
return node.Kind == KindJSDocReadonlyTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocOverrideTag
// ──────────────────────────────────────────────────────────────────────
type JSDocOverrideTag struct {
JSDocTagBase
}
func (f *NodeFactory) NewJSDocOverrideTag(tagName *IdentifierNode, comment *NodeList) *Node {
data := &JSDocOverrideTag{}
data.TagName = tagName
data.Comment = comment
return f.newNode(KindJSDocOverrideTag, data)
}
func (f *NodeFactory) UpdateJSDocOverrideTag(node *JSDocOverrideTag, tagName *IdentifierNode, comment *NodeList) *Node {
if tagName != node.TagName || comment != node.Comment {
return updateNode(f.NewJSDocOverrideTag(tagName, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocOverrideTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.Comment)
}
func (node *JSDocOverrideTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocOverrideTag(node, v.visitNode(node.TagName), v.visitNodes(node.Comment))
}
func (node *JSDocOverrideTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocOverrideTag(node.TagName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocOverrideTag(node *Node) bool {
return node.Kind == KindJSDocOverrideTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocDeprecatedTag
// ──────────────────────────────────────────────────────────────────────
type JSDocDeprecatedTag struct {
JSDocTagBase
}
func (f *NodeFactory) NewJSDocDeprecatedTag(tagName *IdentifierNode, comment *NodeList) *Node {
data := f.jsdocDeprecatedTagArena.New()
data.TagName = tagName
data.Comment = comment
return f.newNode(KindJSDocDeprecatedTag, data)
}
func (f *NodeFactory) UpdateJSDocDeprecatedTag(node *JSDocDeprecatedTag, tagName *IdentifierNode, comment *NodeList) *Node {
if tagName != node.TagName || comment != node.Comment {
return updateNode(f.NewJSDocDeprecatedTag(tagName, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocDeprecatedTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visitNodeList(v, node.Comment)
}
func (node *JSDocDeprecatedTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocDeprecatedTag(node, v.visitNode(node.TagName), v.visitNodes(node.Comment))
}
func (node *JSDocDeprecatedTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocDeprecatedTag(node.TagName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocDeprecatedTag(node *Node) bool {
return node.Kind == KindJSDocDeprecatedTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocSeeTag
// ──────────────────────────────────────────────────────────────────────
type JSDocSeeTag struct {
JSDocTagBase
NameExpression *TypeNode
}
func (f *NodeFactory) NewJSDocSeeTag(tagName *IdentifierNode, nameExpression *TypeNode, comment *NodeList) *Node {
data := &JSDocSeeTag{}
data.TagName = tagName
data.NameExpression = nameExpression
data.Comment = comment
return f.newNode(KindJSDocSeeTag, data)
}
func (f *NodeFactory) UpdateJSDocSeeTag(node *JSDocSeeTag, tagName *IdentifierNode, nameExpression *TypeNode, comment *NodeList) *Node {
if tagName != node.TagName || nameExpression != node.NameExpression || comment != node.Comment {
return updateNode(f.NewJSDocSeeTag(tagName, nameExpression, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocSeeTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.NameExpression) || visitNodeList(v, node.Comment)
}
func (node *JSDocSeeTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocSeeTag(node, v.visitNode(node.TagName), v.visitNode(node.NameExpression), v.visitNodes(node.Comment))
}
func (node *JSDocSeeTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocSeeTag(node.TagName, node.NameExpression, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocSeeTag(node *Node) bool {
return node.Kind == KindJSDocSeeTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocImplementsTag
// ──────────────────────────────────────────────────────────────────────
type JSDocImplementsTag struct {
JSDocTagBase
ClassName *ExpressionWithTypeArgumentsNode
}
func (f *NodeFactory) NewJSDocImplementsTag(tagName *IdentifierNode, className *ExpressionWithTypeArgumentsNode, comment *NodeList) *Node {
data := &JSDocImplementsTag{}
data.TagName = tagName
data.ClassName = className
data.Comment = comment
return f.newNode(KindJSDocImplementsTag, data)
}
func (f *NodeFactory) UpdateJSDocImplementsTag(node *JSDocImplementsTag, tagName *IdentifierNode, className *ExpressionWithTypeArgumentsNode, comment *NodeList) *Node {
if tagName != node.TagName || className != node.ClassName || comment != node.Comment {
return updateNode(f.NewJSDocImplementsTag(tagName, className, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocImplementsTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.ClassName) || visitNodeList(v, node.Comment)
}
func (node *JSDocImplementsTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocImplementsTag(node, v.visitNode(node.TagName), v.visitNode(node.ClassName), v.visitNodes(node.Comment))
}
func (node *JSDocImplementsTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocImplementsTag(node.TagName, node.ClassName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocImplementsTag(node *Node) bool {
return node.Kind == KindJSDocImplementsTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocAugmentsTag
// ──────────────────────────────────────────────────────────────────────
type JSDocAugmentsTag struct {
JSDocTagBase
ClassName *ExpressionWithTypeArgumentsNode
}
func (f *NodeFactory) NewJSDocAugmentsTag(tagName *IdentifierNode, className *ExpressionWithTypeArgumentsNode, comment *NodeList) *Node {
data := &JSDocAugmentsTag{}
data.TagName = tagName
data.ClassName = className
data.Comment = comment
return f.newNode(KindJSDocAugmentsTag, data)
}
func (f *NodeFactory) UpdateJSDocAugmentsTag(node *JSDocAugmentsTag, tagName *IdentifierNode, className *ExpressionWithTypeArgumentsNode, comment *NodeList) *Node {
if tagName != node.TagName || className != node.ClassName || comment != node.Comment {
return updateNode(f.NewJSDocAugmentsTag(tagName, className, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocAugmentsTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.ClassName) || visitNodeList(v, node.Comment)
}
func (node *JSDocAugmentsTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocAugmentsTag(node, v.visitNode(node.TagName), v.visitNode(node.ClassName), v.visitNodes(node.Comment))
}
func (node *JSDocAugmentsTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocAugmentsTag(node.TagName, node.ClassName, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocAugmentsTag(node *Node) bool {
return node.Kind == KindJSDocAugmentsTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocSatisfiesTag
// ──────────────────────────────────────────────────────────────────────
type JSDocSatisfiesTag struct {
JSDocTagBase
TypeExpression *TypeNode
}
func (f *NodeFactory) NewJSDocSatisfiesTag(tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
data := &JSDocSatisfiesTag{}
data.TagName = tagName
data.TypeExpression = typeExpression
data.Comment = comment
return f.newNode(KindJSDocSatisfiesTag, data)
}
func (f *NodeFactory) UpdateJSDocSatisfiesTag(node *JSDocSatisfiesTag, tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
if tagName != node.TagName || typeExpression != node.TypeExpression || comment != node.Comment {
return updateNode(f.NewJSDocSatisfiesTag(tagName, typeExpression, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocSatisfiesTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.TypeExpression) || visitNodeList(v, node.Comment)
}
func (node *JSDocSatisfiesTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocSatisfiesTag(node, v.visitNode(node.TagName), v.visitNode(node.TypeExpression), v.visitNodes(node.Comment))
}
func (node *JSDocSatisfiesTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocSatisfiesTag(node.TagName, node.TypeExpression, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocSatisfiesTag(node *Node) bool {
return node.Kind == KindJSDocSatisfiesTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocThrowsTag
// ──────────────────────────────────────────────────────────────────────
type JSDocThrowsTag struct {
JSDocTagBase
TypeExpression *TypeNode // Optional
}
func (f *NodeFactory) NewJSDocThrowsTag(tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
data := &JSDocThrowsTag{}
data.TagName = tagName
data.TypeExpression = typeExpression
data.Comment = comment
return f.newNode(KindJSDocThrowsTag, data)
}
func (f *NodeFactory) UpdateJSDocThrowsTag(node *JSDocThrowsTag, tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
if tagName != node.TagName || typeExpression != node.TypeExpression || comment != node.Comment {
return updateNode(f.NewJSDocThrowsTag(tagName, typeExpression, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocThrowsTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.TypeExpression) || visitNodeList(v, node.Comment)
}
func (node *JSDocThrowsTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocThrowsTag(node, v.visitNode(node.TagName), v.visitNode(node.TypeExpression), v.visitNodes(node.Comment))
}
func (node *JSDocThrowsTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocThrowsTag(node.TagName, node.TypeExpression, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocThrowsTag(node *Node) bool {
return node.Kind == KindJSDocThrowsTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocThisTag
// ──────────────────────────────────────────────────────────────────────
type JSDocThisTag struct {
JSDocTagBase
TypeExpression *TypeNode
}
func (f *NodeFactory) NewJSDocThisTag(tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
data := &JSDocThisTag{}
data.TagName = tagName
data.TypeExpression = typeExpression
data.Comment = comment
return f.newNode(KindJSDocThisTag, data)
}
func (f *NodeFactory) UpdateJSDocThisTag(node *JSDocThisTag, tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
if tagName != node.TagName || typeExpression != node.TypeExpression || comment != node.Comment {
return updateNode(f.NewJSDocThisTag(tagName, typeExpression, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocThisTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.TypeExpression) || visitNodeList(v, node.Comment)
}
func (node *JSDocThisTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocThisTag(node, v.visitNode(node.TagName), v.visitNode(node.TypeExpression), v.visitNodes(node.Comment))
}
func (node *JSDocThisTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocThisTag(node.TagName, node.TypeExpression, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocThisTag(node *Node) bool {
return node.Kind == KindJSDocThisTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocImportTag
// ──────────────────────────────────────────────────────────────────────
type JSDocImportTag struct {
JSDocTagBase
ImportClause *ImportClauseNode // Optional
ModuleSpecifier *Expression
Attributes *ImportAttributesNode // Optional
}
func (f *NodeFactory) NewJSDocImportTag(tagName *IdentifierNode, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode, comment *NodeList) *Node {
data := &JSDocImportTag{}
data.TagName = tagName
data.ImportClause = importClause
data.ModuleSpecifier = moduleSpecifier
data.Attributes = attributes
data.Comment = comment
return f.newNode(KindJSDocImportTag, data)
}
func (f *NodeFactory) UpdateJSDocImportTag(node *JSDocImportTag, tagName *IdentifierNode, importClause *ImportClauseNode, moduleSpecifier *Expression, attributes *ImportAttributesNode, comment *NodeList) *Node {
if tagName != node.TagName || importClause != node.ImportClause || moduleSpecifier != node.ModuleSpecifier || attributes != node.Attributes || comment != node.Comment {
return updateNode(f.NewJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocImportTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) ||
visit(v, node.ImportClause) ||
visit(v, node.ModuleSpecifier) ||
visit(v, node.Attributes) ||
visitNodeList(v, node.Comment)
}
func (node *JSDocImportTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocImportTag(node, v.visitNode(node.TagName), v.visitNode(node.ImportClause), v.visitNode(node.ModuleSpecifier), v.visitNode(node.Attributes), v.visitNodes(node.Comment))
}
func (node *JSDocImportTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocImportTag(node.TagName, node.ImportClause, node.ModuleSpecifier, node.Attributes, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocImportTag(node *Node) bool {
return node.Kind == KindJSDocImportTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocCallbackTag
// ──────────────────────────────────────────────────────────────────────
type JSDocCallbackTag struct {
JSDocTagBase
TypeExpression *TypeNode
name *JSDocFullName // Optional
}
func (f *NodeFactory) NewJSDocCallbackTag(tagName *IdentifierNode, typeExpression *TypeNode, name *JSDocFullName, comment *NodeList) *Node {
data := &JSDocCallbackTag{}
data.TagName = tagName
data.TypeExpression = typeExpression
data.name = name
data.Comment = comment
return f.newNode(KindJSDocCallbackTag, data)
}
func (f *NodeFactory) UpdateJSDocCallbackTag(node *JSDocCallbackTag, tagName *IdentifierNode, typeExpression *TypeNode, name *JSDocFullName, comment *NodeList) *Node {
if tagName != node.TagName || typeExpression != node.TypeExpression || name != node.name || comment != node.Comment {
return updateNode(f.NewJSDocCallbackTag(tagName, typeExpression, name, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocCallbackTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) ||
visit(v, node.TypeExpression) ||
visit(v, node.name) ||
visitNodeList(v, node.Comment)
}
func (node *JSDocCallbackTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocCallbackTag(node, v.visitNode(node.TagName), v.visitNode(node.TypeExpression), v.visitNode(node.name), v.visitNodes(node.Comment))
}
func (node *JSDocCallbackTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocCallbackTag(node.TagName, node.TypeExpression, node.name, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JSDocCallbackTag) Name() *DeclarationName {
return node.name
}
func IsJSDocCallbackTag(node *Node) bool {
return node.Kind == KindJSDocCallbackTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocOverloadTag
// ──────────────────────────────────────────────────────────────────────
type JSDocOverloadTag struct {
JSDocTagBase
TypeExpression *TypeNode
}
func (f *NodeFactory) NewJSDocOverloadTag(tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
data := &JSDocOverloadTag{}
data.TagName = tagName
data.TypeExpression = typeExpression
data.Comment = comment
return f.newNode(KindJSDocOverloadTag, data)
}
func (f *NodeFactory) UpdateJSDocOverloadTag(node *JSDocOverloadTag, tagName *IdentifierNode, typeExpression *TypeNode, comment *NodeList) *Node {
if tagName != node.TagName || typeExpression != node.TypeExpression || comment != node.Comment {
return updateNode(f.NewJSDocOverloadTag(tagName, typeExpression, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocOverloadTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) || visit(v, node.TypeExpression) || visitNodeList(v, node.Comment)
}
func (node *JSDocOverloadTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocOverloadTag(node, v.visitNode(node.TagName), v.visitNode(node.TypeExpression), v.visitNodes(node.Comment))
}
func (node *JSDocOverloadTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocOverloadTag(node.TagName, node.TypeExpression, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocOverloadTag(node *Node) bool {
return node.Kind == KindJSDocOverloadTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocTypedefTag
// ──────────────────────────────────────────────────────────────────────
type JSDocTypedefTag struct {
JSDocTagBase
TypeExpression *Node // Optional
name *JSDocFullName // Optional
}
func (f *NodeFactory) NewJSDocTypedefTag(tagName *IdentifierNode, typeExpression *Node, name *JSDocFullName, comment *NodeList) *Node {
data := &JSDocTypedefTag{}
data.TagName = tagName
data.TypeExpression = typeExpression
data.name = name
data.Comment = comment
return f.newNode(KindJSDocTypedefTag, data)
}
func (f *NodeFactory) UpdateJSDocTypedefTag(node *JSDocTypedefTag, tagName *IdentifierNode, typeExpression *Node, name *JSDocFullName, comment *NodeList) *Node {
if tagName != node.TagName || typeExpression != node.TypeExpression || name != node.name || comment != node.Comment {
return updateNode(f.NewJSDocTypedefTag(tagName, typeExpression, name, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocTypedefTag) ForEachChild(v Visitor) bool {
return visit(v, node.TagName) ||
visit(v, node.TypeExpression) ||
visit(v, node.name) ||
visitNodeList(v, node.Comment)
}
func (node *JSDocTypedefTag) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocTypedefTag(node, v.visitNode(node.TagName), v.visitNode(node.TypeExpression), v.visitNode(node.name), v.visitNodes(node.Comment))
}
func (node *JSDocTypedefTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocTypedefTag(node.TagName, node.TypeExpression, node.name, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JSDocTypedefTag) Name() *DeclarationName {
return node.name
}
func IsJSDocTypedefTag(node *Node) bool {
return node.Kind == KindJSDocTypedefTag
}
// ──────────────────────────────────────────────────────────────────────
// JSDocSignature
// ──────────────────────────────────────────────────────────────────────
type JSDocSignature struct {
JSDocTypeBase
FunctionLikeBase
}
func (f *NodeFactory) NewJSDocSignature(typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
data := &JSDocSignature{}
data.TypeParameters = typeParameters
data.Parameters = parameters
data.Type = typeNode
return f.newNode(KindJSDocSignature, data)
}
func (f *NodeFactory) UpdateJSDocSignature(node *JSDocSignature, typeParameters *TypeParameterList, parameters *ParameterList, typeNode *TypeNode) *Node {
if typeParameters != node.TypeParameters || parameters != node.Parameters || typeNode != node.Type {
return updateNode(f.NewJSDocSignature(typeParameters, parameters, typeNode), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocSignature) ForEachChild(v Visitor) bool {
return visitNodeList(v, node.TypeParameters) || visitNodeList(v, node.Parameters) || visit(v, node.Type)
}
func (node *JSDocSignature) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocSignature(node, v.visitNodes(node.TypeParameters), v.visitNodes(node.Parameters), v.visitNode(node.Type))
}
func (node *JSDocSignature) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocSignature(node.TypeParameters, node.Parameters, node.Type), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocSignature(node *Node) bool {
return node.Kind == KindJSDocSignature
}
// ──────────────────────────────────────────────────────────────────────
// JSDocNameReference
// ──────────────────────────────────────────────────────────────────────
type JSDocNameReference struct {
TypeNodeBase
name *EntityName
}
func (f *NodeFactory) NewJSDocNameReference(name *EntityName) *Node {
data := &JSDocNameReference{}
data.name = name
return f.newNode(KindJSDocNameReference, data)
}
func (f *NodeFactory) UpdateJSDocNameReference(node *JSDocNameReference, name *EntityName) *Node {
if name != node.name {
return updateNode(f.NewJSDocNameReference(name), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocNameReference) ForEachChild(v Visitor) bool {
return visit(v, node.name)
}
func (node *JSDocNameReference) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocNameReference(node, v.visitNode(node.name))
}
func (node *JSDocNameReference) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocNameReference(node.name), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JSDocNameReference) Name() *DeclarationName {
return node.name
}
func IsJSDocNameReference(node *Node) bool {
return node.Kind == KindJSDocNameReference
}
// ──────────────────────────────────────────────────────────────────────
// SourceFile
// ──────────────────────────────────────────────────────────────────────
func IsSourceFile(node *Node) bool {
return node.Kind == KindSourceFile
}
// Struct and factory methods hand-written in ./ast.go
// ──────────────────────────────────────────────────────────────────────
// ModuleDeclaration
// ──────────────────────────────────────────────────────────────────────
type ModuleDeclaration struct {
DeclarationBase
StatementBase
ExportableBase
ModifiersBase
LocalsContainerBase
BodyBase
CompositeBase
Keyword Kind
name *ModuleName
}
func (f *NodeFactory) NewModuleDeclaration(modifiers *ModifierList, keyword Kind, name *ModuleName, body *ModuleBody) *Node {
data := &ModuleDeclaration{}
data.modifiers = modifiers
data.Keyword = keyword
data.name = name
data.Body = body
return f.newNode(KindModuleDeclaration, data)
}
func (f *NodeFactory) UpdateModuleDeclaration(node *ModuleDeclaration, modifiers *ModifierList, keyword Kind, name *ModuleName, body *ModuleBody) *Node {
if modifiers != node.modifiers || keyword != node.Keyword || name != node.name || body != node.Body {
return updateNode(f.NewModuleDeclaration(modifiers, keyword, name, body), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ModuleDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) || visit(v, node.name) || visit(v, node.Body)
}
func (node *ModuleDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateModuleDeclaration(node, v.visitModifiers(node.modifiers), node.Keyword, v.visitNode(node.name), v.visitNode(node.Body))
}
func (node *ModuleDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewModuleDeclaration(node.Modifiers(), node.Keyword, node.name, node.Body), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ModuleDeclaration) Name() *DeclarationName {
return node.name
}
func IsModuleDeclaration(node *Node) bool {
return node.Kind == KindModuleDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// ImportEqualsDeclaration
// ──────────────────────────────────────────────────────────────────────
type ImportEqualsDeclaration struct {
DeclarationBase
StatementBase
ExportableBase
ModifiersBase
CompositeBase
IsTypeOnly bool
name *IdentifierNode
ModuleReference *ModuleReference
}
func (f *NodeFactory) NewImportEqualsDeclaration(modifiers *ModifierList, isTypeOnly bool, name *IdentifierNode, moduleReference *ModuleReference) *Node {
data := &ImportEqualsDeclaration{}
data.modifiers = modifiers
data.IsTypeOnly = isTypeOnly
data.name = name
data.ModuleReference = moduleReference
return f.newNode(KindImportEqualsDeclaration, data)
}
func (f *NodeFactory) UpdateImportEqualsDeclaration(node *ImportEqualsDeclaration, modifiers *ModifierList, isTypeOnly bool, name *IdentifierNode, moduleReference *ModuleReference) *Node {
if modifiers != node.modifiers || isTypeOnly != node.IsTypeOnly || name != node.name || moduleReference != node.ModuleReference {
return updateNode(f.NewImportEqualsDeclaration(modifiers, isTypeOnly, name, moduleReference), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ImportEqualsDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) || visit(v, node.name) || visit(v, node.ModuleReference)
}
func (node *ImportEqualsDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateImportEqualsDeclaration(node, v.visitModifiers(node.modifiers), node.IsTypeOnly, v.visitNode(node.name), v.visitNode(node.ModuleReference))
}
func (node *ImportEqualsDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewImportEqualsDeclaration(node.Modifiers(), node.IsTypeOnly, node.name, node.ModuleReference), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ImportEqualsDeclaration) Name() *DeclarationName {
return node.name
}
func IsImportEqualsDeclaration(node *Node) bool {
return node.Kind == KindImportEqualsDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// ExportDeclaration
// ──────────────────────────────────────────────────────────────────────
type ExportDeclaration struct {
DeclarationBase
StatementBase
ModifiersBase
CompositeBase
IsTypeOnly bool
ExportClause *NamedExportBindings // Optional
ModuleSpecifier *Expression // Optional
Attributes *ImportAttributesNode // Optional
}
func (f *NodeFactory) NewExportDeclaration(modifiers *ModifierList, isTypeOnly bool, exportClause *NamedExportBindings, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
data := &ExportDeclaration{}
data.modifiers = modifiers
data.IsTypeOnly = isTypeOnly
data.ExportClause = exportClause
data.ModuleSpecifier = moduleSpecifier
data.Attributes = attributes
return f.newNode(KindExportDeclaration, data)
}
func (f *NodeFactory) UpdateExportDeclaration(node *ExportDeclaration, modifiers *ModifierList, isTypeOnly bool, exportClause *NamedExportBindings, moduleSpecifier *Expression, attributes *ImportAttributesNode) *Node {
if modifiers != node.modifiers || isTypeOnly != node.IsTypeOnly || exportClause != node.ExportClause || moduleSpecifier != node.ModuleSpecifier || attributes != node.Attributes {
return updateNode(f.NewExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, attributes), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ExportDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.ExportClause) ||
visit(v, node.ModuleSpecifier) ||
visit(v, node.Attributes)
}
func (node *ExportDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateExportDeclaration(node, v.visitModifiers(node.modifiers), node.IsTypeOnly, v.visitNode(node.ExportClause), v.visitNode(node.ModuleSpecifier), v.visitNode(node.Attributes))
}
func (node *ExportDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewExportDeclaration(node.Modifiers(), node.IsTypeOnly, node.ExportClause, node.ModuleSpecifier, node.Attributes), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsExportDeclaration(node *Node) bool {
return node.Kind == KindExportDeclaration
}
// ──────────────────────────────────────────────────────────────────────
// ImportTypeNode
// ──────────────────────────────────────────────────────────────────────
type ImportTypeNode struct {
NodeWithTypeArgumentsBase
IsTypeOf bool
Argument *TypeNode
Attributes *ImportAttributesNode // Optional
Qualifier *EntityName // Optional
}
func (f *NodeFactory) NewImportTypeNode(isTypeOf bool, argument *TypeNode, attributes *ImportAttributesNode, qualifier *EntityName, typeArguments *TypeList) *Node {
data := &ImportTypeNode{}
data.IsTypeOf = isTypeOf
data.Argument = argument
data.Attributes = attributes
data.Qualifier = qualifier
data.TypeArguments = typeArguments
return f.newNode(KindImportType, data)
}
func (f *NodeFactory) UpdateImportTypeNode(node *ImportTypeNode, isTypeOf bool, argument *TypeNode, attributes *ImportAttributesNode, qualifier *EntityName, typeArguments *TypeList) *Node {
if isTypeOf != node.IsTypeOf || argument != node.Argument || attributes != node.Attributes || qualifier != node.Qualifier || typeArguments != node.TypeArguments {
return updateNode(f.NewImportTypeNode(isTypeOf, argument, attributes, qualifier, typeArguments), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ImportTypeNode) ForEachChild(v Visitor) bool {
return visit(v, node.Argument) ||
visit(v, node.Attributes) ||
visit(v, node.Qualifier) ||
visitNodeList(v, node.TypeArguments)
}
func (node *ImportTypeNode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateImportTypeNode(node, node.IsTypeOf, v.visitNode(node.Argument), v.visitNode(node.Attributes), v.visitNode(node.Qualifier), v.visitNodes(node.TypeArguments))
}
func (node *ImportTypeNode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewImportTypeNode(node.IsTypeOf, node.Argument, node.Attributes, node.Qualifier, node.TypeArguments), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsImportTypeNode(node *Node) bool {
return node.Kind == KindImportType
}
// ──────────────────────────────────────────────────────────────────────
// ImportClause
// ──────────────────────────────────────────────────────────────────────
type ImportClause struct {
NodeBase
DeclarationBase
ExportableBase
CompositeBase
PhaseModifier ImportPhaseModifierSyntaxKind // Optional
name *IdentifierNode // Optional
NamedBindings *NamedImportBindings // Optional
}
func (f *NodeFactory) NewImportClause(phaseModifier ImportPhaseModifierSyntaxKind, name *IdentifierNode, namedBindings *NamedImportBindings) *Node {
data := &ImportClause{}
data.PhaseModifier = phaseModifier
data.name = name
data.NamedBindings = namedBindings
return f.newNode(KindImportClause, data)
}
func (f *NodeFactory) UpdateImportClause(node *ImportClause, phaseModifier ImportPhaseModifierSyntaxKind, name *IdentifierNode, namedBindings *NamedImportBindings) *Node {
if phaseModifier != node.PhaseModifier || name != node.name || namedBindings != node.NamedBindings {
return updateNode(f.NewImportClause(phaseModifier, name, namedBindings), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ImportClause) ForEachChild(v Visitor) bool {
return visit(v, node.name) || visit(v, node.NamedBindings)
}
func (node *ImportClause) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateImportClause(node, node.PhaseModifier, v.visitNode(node.name), v.visitNode(node.NamedBindings))
}
func (node *ImportClause) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewImportClause(node.PhaseModifier, node.name, node.NamedBindings), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ImportClause) Name() *DeclarationName {
return node.name
}
func IsImportClause(node *Node) bool {
return node.Kind == KindImportClause
}
// ──────────────────────────────────────────────────────────────────────
// ImportSpecifier
// ──────────────────────────────────────────────────────────────────────
type ImportSpecifier struct {
NodeBase
DeclarationBase
ExportableBase
CompositeBase
IsTypeOnly bool
PropertyName *ModuleExportName // Optional
name *IdentifierNode
}
func (f *NodeFactory) NewImportSpecifier(isTypeOnly bool, propertyName *ModuleExportName, name *IdentifierNode) *Node {
data := f.importSpecifierArena.New()
data.IsTypeOnly = isTypeOnly
data.PropertyName = propertyName
data.name = name
return f.newNode(KindImportSpecifier, data)
}
func (f *NodeFactory) UpdateImportSpecifier(node *ImportSpecifier, isTypeOnly bool, propertyName *ModuleExportName, name *IdentifierNode) *Node {
if isTypeOnly != node.IsTypeOnly || propertyName != node.PropertyName || name != node.name {
return updateNode(f.NewImportSpecifier(isTypeOnly, propertyName, name), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *ImportSpecifier) ForEachChild(v Visitor) bool {
return visit(v, node.PropertyName) || visit(v, node.name)
}
func (node *ImportSpecifier) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateImportSpecifier(node, node.IsTypeOnly, v.visitNode(node.PropertyName), v.visitNode(node.name))
}
func (node *ImportSpecifier) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewImportSpecifier(node.IsTypeOnly, node.PropertyName, node.name), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *ImportSpecifier) Name() *DeclarationName {
return node.name
}
func IsImportSpecifier(node *Node) bool {
return node.Kind == KindImportSpecifier
}
// ──────────────────────────────────────────────────────────────────────
// JSDocText
// ──────────────────────────────────────────────────────────────────────
type JSDocText struct {
JSDocCommentBase
}
func (f *NodeFactory) NewJSDocText(text []string) *Node {
data := f.jsdocTextArena.New()
data.text = text
f.textCount++
return f.newNode(KindJSDocText, data)
}
func (node *JSDocText) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocText(node.text), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocText(node *Node) bool {
return node.Kind == KindJSDocText
}
// ──────────────────────────────────────────────────────────────────────
// JSDocLink
// ──────────────────────────────────────────────────────────────────────
type JSDocLink struct {
JSDocCommentBase
name *EntityName // Optional
}
func (f *NodeFactory) NewJSDocLink(name *EntityName, text []string) *Node {
data := &JSDocLink{}
data.name = name
data.text = text
f.textCount++
return f.newNode(KindJSDocLink, data)
}
func (f *NodeFactory) UpdateJSDocLink(node *JSDocLink, name *EntityName, text []string) *Node {
if name != node.name || !core.Same(text, node.text) {
return updateNode(f.NewJSDocLink(name, text), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocLink) ForEachChild(v Visitor) bool {
return visit(v, node.name)
}
func (node *JSDocLink) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocLink(node, v.visitNode(node.name), node.text)
}
func (node *JSDocLink) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocLink(node.name, node.text), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JSDocLink) Name() *DeclarationName {
return node.name
}
func IsJSDocLink(node *Node) bool {
return node.Kind == KindJSDocLink
}
// ──────────────────────────────────────────────────────────────────────
// JSDocLinkPlain
// ──────────────────────────────────────────────────────────────────────
type JSDocLinkPlain struct {
JSDocCommentBase
name *EntityName // Optional
}
func (f *NodeFactory) NewJSDocLinkPlain(name *EntityName, text []string) *Node {
data := &JSDocLinkPlain{}
data.name = name
data.text = text
f.textCount++
return f.newNode(KindJSDocLinkPlain, data)
}
func (f *NodeFactory) UpdateJSDocLinkPlain(node *JSDocLinkPlain, name *EntityName, text []string) *Node {
if name != node.name || !core.Same(text, node.text) {
return updateNode(f.NewJSDocLinkPlain(name, text), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocLinkPlain) ForEachChild(v Visitor) bool {
return visit(v, node.name)
}
func (node *JSDocLinkPlain) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocLinkPlain(node, v.visitNode(node.name), node.text)
}
func (node *JSDocLinkPlain) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocLinkPlain(node.name, node.text), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JSDocLinkPlain) Name() *DeclarationName {
return node.name
}
func IsJSDocLinkPlain(node *Node) bool {
return node.Kind == KindJSDocLinkPlain
}
// ──────────────────────────────────────────────────────────────────────
// JSDocLinkCode
// ──────────────────────────────────────────────────────────────────────
type JSDocLinkCode struct {
JSDocCommentBase
name *EntityName // Optional
}
func (f *NodeFactory) NewJSDocLinkCode(name *EntityName, text []string) *Node {
data := &JSDocLinkCode{}
data.name = name
data.text = text
f.textCount++
return f.newNode(KindJSDocLinkCode, data)
}
func (f *NodeFactory) UpdateJSDocLinkCode(node *JSDocLinkCode, name *EntityName, text []string) *Node {
if name != node.name || !core.Same(text, node.text) {
return updateNode(f.NewJSDocLinkCode(name, text), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocLinkCode) ForEachChild(v Visitor) bool {
return visit(v, node.name)
}
func (node *JSDocLinkCode) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateJSDocLinkCode(node, v.visitNode(node.name), node.text)
}
func (node *JSDocLinkCode) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocLinkCode(node.name, node.text), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JSDocLinkCode) Name() *DeclarationName {
return node.name
}
func IsJSDocLinkCode(node *Node) bool {
return node.Kind == KindJSDocLinkCode
}
// ──────────────────────────────────────────────────────────────────────
// TypeParameterDeclaration
// ──────────────────────────────────────────────────────────────────────
type TypeParameterDeclaration struct {
NodeBase
DeclarationBase
ModifiersBase
TypeSyntaxBase
name *IdentifierNode
Constraint *TypeNode // Optional
Expression *Expression // Optional
DefaultType *TypeNode // Optional
}
func (f *NodeFactory) NewTypeParameterDeclaration(modifiers *ModifierList, name *IdentifierNode, constraint *TypeNode, expression *Expression, defaultType *TypeNode) *Node {
data := f.typeParameterDeclarationArena.New()
data.modifiers = modifiers
data.name = name
data.Constraint = constraint
data.Expression = expression
data.DefaultType = defaultType
return f.newNode(KindTypeParameter, data)
}
func (f *NodeFactory) UpdateTypeParameterDeclaration(node *TypeParameterDeclaration, modifiers *ModifierList, name *IdentifierNode, constraint *TypeNode, expression *Expression, defaultType *TypeNode) *Node {
if modifiers != node.modifiers || name != node.name || constraint != node.Constraint || expression != node.Expression || defaultType != node.DefaultType {
return updateNode(f.NewTypeParameterDeclaration(modifiers, name, constraint, expression, defaultType), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *TypeParameterDeclaration) ForEachChild(v Visitor) bool {
return visitModifiers(v, node.modifiers) ||
visit(v, node.name) ||
visit(v, node.Constraint) ||
visit(v, node.Expression) ||
visit(v, node.DefaultType)
}
func (node *TypeParameterDeclaration) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateTypeParameterDeclaration(node, v.visitModifiers(node.modifiers), v.visitNode(node.name), v.visitNode(node.Constraint), v.visitNode(node.Expression), v.visitNode(node.DefaultType))
}
func (node *TypeParameterDeclaration) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewTypeParameterDeclaration(node.Modifiers(), node.name, node.Constraint, node.Expression, node.DefaultType), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *TypeParameterDeclaration) Name() *DeclarationName {
return node.name
}
func IsTypeParameterDeclaration(node *Node) bool {
return node.Kind == KindTypeParameter
}
// ──────────────────────────────────────────────────────────────────────
// SyntheticReferenceExpression
// ──────────────────────────────────────────────────────────────────────
type SyntheticReferenceExpression struct {
ExpressionBase
Expression *Expression
ThisArg *Expression
}
func (f *NodeFactory) NewSyntheticReferenceExpression(expression *Expression, thisArg *Expression) *Node {
data := &SyntheticReferenceExpression{}
data.Expression = expression
data.ThisArg = thisArg
return f.newNode(KindSyntheticReferenceExpression, data)
}
func (f *NodeFactory) UpdateSyntheticReferenceExpression(node *SyntheticReferenceExpression, expression *Expression, thisArg *Expression) *Node {
if expression != node.Expression || thisArg != node.ThisArg {
return updateNode(f.NewSyntheticReferenceExpression(expression, thisArg), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *SyntheticReferenceExpression) ForEachChild(v Visitor) bool {
return visit(v, node.Expression) || visit(v, node.ThisArg)
}
func (node *SyntheticReferenceExpression) VisitEachChild(v *NodeVisitor) *Node {
return v.Factory.UpdateSyntheticReferenceExpression(node, v.visitNode(node.Expression), v.visitNode(node.ThisArg))
}
func (node *SyntheticReferenceExpression) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewSyntheticReferenceExpression(node.Expression, node.ThisArg), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *SyntheticReferenceExpression) computeSubtreeFacts() SubtreeFacts {
return propagateSubtreeFacts(node.Expression) |
propagateSubtreeFacts(node.ThisArg)
}
func IsSyntheticReferenceExpression(node *Node) bool {
return node.Kind == KindSyntheticReferenceExpression
}
// ──────────────────────────────────────────────────────────────────────
// JSDocTypeLiteral
// ──────────────────────────────────────────────────────────────────────
type JSDocTypeLiteral struct {
JSDocTypeBase
DeclarationBase
JSDocPropertyTags []*Node // Optional
IsArrayType bool
}
func (f *NodeFactory) NewJSDocTypeLiteral(jsdocPropertyTags []*Node, isArrayType bool) *Node {
data := &JSDocTypeLiteral{}
data.JSDocPropertyTags = jsdocPropertyTags
data.IsArrayType = isArrayType
return f.newNode(KindJSDocTypeLiteral, data)
}
func (f *NodeFactory) UpdateJSDocTypeLiteral(node *JSDocTypeLiteral, jsdocPropertyTags []*Node, isArrayType bool) *Node {
if !core.Same(jsdocPropertyTags, node.JSDocPropertyTags) || isArrayType != node.IsArrayType {
return updateNode(f.NewJSDocTypeLiteral(jsdocPropertyTags, isArrayType), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocTypeLiteral) ForEachChild(v Visitor) bool {
return visitNodes(v, node.JSDocPropertyTags)
}
func (node *JSDocTypeLiteral) VisitEachChild(v *NodeVisitor) *Node {
jsdocPropertyTags := core.SameMap(node.JSDocPropertyTags, func(n *Node) *Node { return v.visitNode(n) })
return v.Factory.UpdateJSDocTypeLiteral(node, jsdocPropertyTags, node.IsArrayType)
}
func (node *JSDocTypeLiteral) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocTypeLiteral(node.JSDocPropertyTags, node.IsArrayType), node.AsNode(), f.AsNodeFactory().hooks)
}
func IsJSDocTypeLiteral(node *Node) bool {
return node.Kind == KindJSDocTypeLiteral
}
// ──────────────────────────────────────────────────────────────────────
// JSDocParameterOrPropertyTag
// ──────────────────────────────────────────────────────────────────────
type JSDocParameterOrPropertyTag struct {
JSDocTagBase
name *EntityName
IsBracketed bool
TypeExpression *TypeNode // Optional
IsNameFirst bool
}
func (f *NodeFactory) NewJSDocParameterOrPropertyTag(kind Kind, tagName *IdentifierNode, name *EntityName, isBracketed bool, typeExpression *TypeNode, isNameFirst bool, comment *NodeList) *Node {
data := &JSDocParameterOrPropertyTag{}
data.TagName = tagName
data.name = name
data.IsBracketed = isBracketed
data.TypeExpression = typeExpression
data.IsNameFirst = isNameFirst
data.Comment = comment
return f.newNode(kind, data)
}
func (f *NodeFactory) UpdateJSDocParameterOrPropertyTag(node *JSDocParameterOrPropertyTag, tagName *IdentifierNode, name *EntityName, isBracketed bool, typeExpression *TypeNode, isNameFirst bool, comment *NodeList) *Node {
if tagName != node.TagName || name != node.name || isBracketed != node.IsBracketed || typeExpression != node.TypeExpression || isNameFirst != node.IsNameFirst || comment != node.Comment {
return updateNode(f.NewJSDocParameterOrPropertyTag(node.Kind, tagName, name, isBracketed, typeExpression, isNameFirst, comment), node.AsNode(), f.hooks)
}
return node.AsNode()
}
func (node *JSDocParameterOrPropertyTag) ForEachChild(v Visitor) bool {
return forEachChild_JSDocParameterOrPropertyTag(node, v)
}
func (node *JSDocParameterOrPropertyTag) VisitEachChild(v *NodeVisitor) *Node {
return visitEachChild_JSDocParameterOrPropertyTag(node, v)
}
func (node *JSDocParameterOrPropertyTag) Clone(f NodeFactoryCoercible) *Node {
return cloneNode(f.AsNodeFactory().NewJSDocParameterOrPropertyTag(node.Kind, node.TagName, node.name, node.IsBracketed, node.TypeExpression, node.IsNameFirst, node.Comment), node.AsNode(), f.AsNodeFactory().hooks)
}
func (node *JSDocParameterOrPropertyTag) Name() *DeclarationName {
return node.name
}
func IsJSDocParameterTag(node *Node) bool {
return node.Kind == KindJSDocParameterTag
}
func IsJSDocPropertyTag(node *Node) bool {
return node.Kind == KindJSDocPropertyTag
}
// ──────────────────────────────────────────────────────────────────────
// ForEachChild dispatch
// ──────────────────────────────────────────────────────────────────────
func (n *Node) ForEachChild(v Visitor) bool {
switch n.Kind {
case KindQualifiedName:
return n.data.(*QualifiedName).ForEachChild(v)
case KindComputedPropertyName:
return n.data.(*ComputedPropertyName).ForEachChild(v)
case KindDecorator:
return n.data.(*Decorator).ForEachChild(v)
case KindIfStatement:
return n.data.(*IfStatement).ForEachChild(v)
case KindDoStatement:
return n.data.(*DoStatement).ForEachChild(v)
case KindWhileStatement:
return n.data.(*WhileStatement).ForEachChild(v)
case KindForStatement:
return n.data.(*ForStatement).ForEachChild(v)
case KindForInStatement, KindForOfStatement:
return n.data.(*ForInOrOfStatement).ForEachChild(v)
case KindBreakStatement:
return n.data.(*BreakStatement).ForEachChild(v)
case KindContinueStatement:
return n.data.(*ContinueStatement).ForEachChild(v)
case KindReturnStatement:
return n.data.(*ReturnStatement).ForEachChild(v)
case KindWithStatement:
return n.data.(*WithStatement).ForEachChild(v)
case KindSwitchStatement:
return n.data.(*SwitchStatement).ForEachChild(v)
case KindCaseBlock:
return n.data.(*CaseBlock).ForEachChild(v)
case KindCaseClause, KindDefaultClause:
return n.data.(*CaseOrDefaultClause).ForEachChild(v)
case KindThrowStatement:
return n.data.(*ThrowStatement).ForEachChild(v)
case KindTryStatement:
return n.data.(*TryStatement).ForEachChild(v)
case KindCatchClause:
return n.data.(*CatchClause).ForEachChild(v)
case KindLabeledStatement:
return n.data.(*LabeledStatement).ForEachChild(v)
case KindExpressionStatement:
return n.data.(*ExpressionStatement).ForEachChild(v)
case KindBlock:
return n.data.(*Block).ForEachChild(v)
case KindVariableStatement:
return n.data.(*VariableStatement).ForEachChild(v)
case KindVariableDeclaration:
return n.data.(*VariableDeclaration).ForEachChild(v)
case KindVariableDeclarationList:
return n.data.(*VariableDeclarationList).ForEachChild(v)
case KindObjectBindingPattern, KindArrayBindingPattern:
return n.data.(*BindingPattern).ForEachChild(v)
case KindParameter:
return n.data.(*ParameterDeclaration).ForEachChild(v)
case KindBindingElement:
return n.data.(*BindingElement).ForEachChild(v)
case KindMissingDeclaration:
return n.data.(*MissingDeclaration).ForEachChild(v)
case KindFunctionDeclaration:
return n.data.(*FunctionDeclaration).ForEachChild(v)
case KindClassDeclaration:
return n.data.(*ClassDeclaration).ForEachChild(v)
case KindClassExpression:
return n.data.(*ClassExpression).ForEachChild(v)
case KindHeritageClause:
return n.data.(*HeritageClause).ForEachChild(v)
case KindInterfaceDeclaration:
return n.data.(*InterfaceDeclaration).ForEachChild(v)
case KindTypeAliasDeclaration, KindJSTypeAliasDeclaration:
return n.data.(*TypeAliasDeclaration).ForEachChild(v)
case KindEnumMember:
return n.data.(*EnumMember).ForEachChild(v)
case KindEnumDeclaration:
return n.data.(*EnumDeclaration).ForEachChild(v)
case KindModuleBlock:
return n.data.(*ModuleBlock).ForEachChild(v)
case KindImportDeclaration, KindJSImportDeclaration:
return n.data.(*ImportDeclaration).ForEachChild(v)
case KindExternalModuleReference:
return n.data.(*ExternalModuleReference).ForEachChild(v)
case KindNamespaceImport:
return n.data.(*NamespaceImport).ForEachChild(v)
case KindNamedImports:
return n.data.(*NamedImports).ForEachChild(v)
case KindExportAssignment:
return n.data.(*ExportAssignment).ForEachChild(v)
case KindNamespaceExportDeclaration:
return n.data.(*NamespaceExportDeclaration).ForEachChild(v)
case KindNamespaceExport:
return n.data.(*NamespaceExport).ForEachChild(v)
case KindNamedExports:
return n.data.(*NamedExports).ForEachChild(v)
case KindExportSpecifier:
return n.data.(*ExportSpecifier).ForEachChild(v)
case KindCallSignature:
return n.data.(*CallSignatureDeclaration).ForEachChild(v)
case KindConstructSignature:
return n.data.(*ConstructSignatureDeclaration).ForEachChild(v)
case KindConstructor:
return n.data.(*ConstructorDeclaration).ForEachChild(v)
case KindGetAccessor:
return n.data.(*GetAccessorDeclaration).ForEachChild(v)
case KindSetAccessor:
return n.data.(*SetAccessorDeclaration).ForEachChild(v)
case KindIndexSignature:
return n.data.(*IndexSignatureDeclaration).ForEachChild(v)
case KindMethodSignature:
return n.data.(*MethodSignatureDeclaration).ForEachChild(v)
case KindMethodDeclaration:
return n.data.(*MethodDeclaration).ForEachChild(v)
case KindPropertySignature:
return n.data.(*PropertySignatureDeclaration).ForEachChild(v)
case KindPropertyDeclaration:
return n.data.(*PropertyDeclaration).ForEachChild(v)
case KindClassStaticBlockDeclaration:
return n.data.(*ClassStaticBlockDeclaration).ForEachChild(v)
case KindBinaryExpression:
return n.data.(*BinaryExpression).ForEachChild(v)
case KindPrefixUnaryExpression:
return n.data.(*PrefixUnaryExpression).ForEachChild(v)
case KindPostfixUnaryExpression:
return n.data.(*PostfixUnaryExpression).ForEachChild(v)
case KindYieldExpression:
return n.data.(*YieldExpression).ForEachChild(v)
case KindArrowFunction:
return n.data.(*ArrowFunction).ForEachChild(v)
case KindFunctionExpression:
return n.data.(*FunctionExpression).ForEachChild(v)
case KindAsExpression:
return n.data.(*AsExpression).ForEachChild(v)
case KindSatisfiesExpression:
return n.data.(*SatisfiesExpression).ForEachChild(v)
case KindConditionalExpression:
return n.data.(*ConditionalExpression).ForEachChild(v)
case KindPropertyAccessExpression:
return n.data.(*PropertyAccessExpression).ForEachChild(v)
case KindElementAccessExpression:
return n.data.(*ElementAccessExpression).ForEachChild(v)
case KindCallExpression:
return n.data.(*CallExpression).ForEachChild(v)
case KindNewExpression:
return n.data.(*NewExpression).ForEachChild(v)
case KindMetaProperty:
return n.data.(*MetaProperty).ForEachChild(v)
case KindNonNullExpression:
return n.data.(*NonNullExpression).ForEachChild(v)
case KindSpreadElement:
return n.data.(*SpreadElement).ForEachChild(v)
case KindTemplateExpression:
return n.data.(*TemplateExpression).ForEachChild(v)
case KindTemplateSpan:
return n.data.(*TemplateSpan).ForEachChild(v)
case KindTaggedTemplateExpression:
return n.data.(*TaggedTemplateExpression).ForEachChild(v)
case KindParenthesizedExpression:
return n.data.(*ParenthesizedExpression).ForEachChild(v)
case KindArrayLiteralExpression:
return n.data.(*ArrayLiteralExpression).ForEachChild(v)
case KindObjectLiteralExpression:
return n.data.(*ObjectLiteralExpression).ForEachChild(v)
case KindSpreadAssignment:
return n.data.(*SpreadAssignment).ForEachChild(v)
case KindPropertyAssignment:
return n.data.(*PropertyAssignment).ForEachChild(v)
case KindShorthandPropertyAssignment:
return n.data.(*ShorthandPropertyAssignment).ForEachChild(v)
case KindDeleteExpression:
return n.data.(*DeleteExpression).ForEachChild(v)
case KindTypeOfExpression:
return n.data.(*TypeOfExpression).ForEachChild(v)
case KindVoidExpression:
return n.data.(*VoidExpression).ForEachChild(v)
case KindAwaitExpression:
return n.data.(*AwaitExpression).ForEachChild(v)
case KindTypeAssertionExpression:
return n.data.(*TypeAssertion).ForEachChild(v)
case KindUnionType:
return n.data.(*UnionTypeNode).ForEachChild(v)
case KindIntersectionType:
return n.data.(*IntersectionTypeNode).ForEachChild(v)
case KindConditionalType:
return n.data.(*ConditionalTypeNode).ForEachChild(v)
case KindTypeOperator:
return n.data.(*TypeOperatorNode).ForEachChild(v)
case KindInferType:
return n.data.(*InferTypeNode).ForEachChild(v)
case KindArrayType:
return n.data.(*ArrayTypeNode).ForEachChild(v)
case KindIndexedAccessType:
return n.data.(*IndexedAccessTypeNode).ForEachChild(v)
case KindTypeReference:
return n.data.(*TypeReferenceNode).ForEachChild(v)
case KindExpressionWithTypeArguments:
return n.data.(*ExpressionWithTypeArguments).ForEachChild(v)
case KindLiteralType:
return n.data.(*LiteralTypeNode).ForEachChild(v)
case KindTypePredicate:
return n.data.(*TypePredicateNode).ForEachChild(v)
case KindImportAttribute:
return n.data.(*ImportAttribute).ForEachChild(v)
case KindImportAttributes:
return n.data.(*ImportAttributes).ForEachChild(v)
case KindTypeQuery:
return n.data.(*TypeQueryNode).ForEachChild(v)
case KindMappedType:
return n.data.(*MappedTypeNode).ForEachChild(v)
case KindTypeLiteral:
return n.data.(*TypeLiteralNode).ForEachChild(v)
case KindTupleType:
return n.data.(*TupleTypeNode).ForEachChild(v)
case KindNamedTupleMember:
return n.data.(*NamedTupleMember).ForEachChild(v)
case KindOptionalType:
return n.data.(*OptionalTypeNode).ForEachChild(v)
case KindRestType:
return n.data.(*RestTypeNode).ForEachChild(v)
case KindParenthesizedType:
return n.data.(*ParenthesizedTypeNode).ForEachChild(v)
case KindFunctionType:
return n.data.(*FunctionTypeNode).ForEachChild(v)
case KindConstructorType:
return n.data.(*ConstructorTypeNode).ForEachChild(v)
case KindTemplateLiteralType:
return n.data.(*TemplateLiteralTypeNode).ForEachChild(v)
case KindTemplateLiteralTypeSpan:
return n.data.(*TemplateLiteralTypeSpan).ForEachChild(v)
case KindSyntheticExpression:
return n.data.(*SyntheticExpression).ForEachChild(v)
case KindPartiallyEmittedExpression:
return n.data.(*PartiallyEmittedExpression).ForEachChild(v)
case KindJsxElement:
return n.data.(*JsxElement).ForEachChild(v)
case KindJsxAttributes:
return n.data.(*JsxAttributes).ForEachChild(v)
case KindJsxNamespacedName:
return n.data.(*JsxNamespacedName).ForEachChild(v)
case KindJsxOpeningElement:
return n.data.(*JsxOpeningElement).ForEachChild(v)
case KindJsxSelfClosingElement:
return n.data.(*JsxSelfClosingElement).ForEachChild(v)
case KindJsxFragment:
return n.data.(*JsxFragment).ForEachChild(v)
case KindJsxAttribute:
return n.data.(*JsxAttribute).ForEachChild(v)
case KindJsxSpreadAttribute:
return n.data.(*JsxSpreadAttribute).ForEachChild(v)
case KindJsxClosingElement:
return n.data.(*JsxClosingElement).ForEachChild(v)
case KindJsxExpression:
return n.data.(*JsxExpression).ForEachChild(v)
case KindSyntaxList:
return n.data.(*SyntaxList).ForEachChild(v)
case KindJSDoc:
return n.data.(*JSDoc).ForEachChild(v)
case KindJSDocTypeExpression:
return n.data.(*JSDocTypeExpression).ForEachChild(v)
case KindJSDocNonNullableType:
return n.data.(*JSDocNonNullableType).ForEachChild(v)
case KindJSDocNullableType:
return n.data.(*JSDocNullableType).ForEachChild(v)
case KindJSDocVariadicType:
return n.data.(*JSDocVariadicType).ForEachChild(v)
case KindJSDocOptionalType:
return n.data.(*JSDocOptionalType).ForEachChild(v)
case KindJSDocTypeTag:
return n.data.(*JSDocTypeTag).ForEachChild(v)
case KindJSDocUnknownTag:
return n.data.(*JSDocUnknownTag).ForEachChild(v)
case KindJSDocTemplateTag:
return n.data.(*JSDocTemplateTag).ForEachChild(v)
case KindJSDocReturnTag:
return n.data.(*JSDocReturnTag).ForEachChild(v)
case KindJSDocPublicTag:
return n.data.(*JSDocPublicTag).ForEachChild(v)
case KindJSDocPrivateTag:
return n.data.(*JSDocPrivateTag).ForEachChild(v)
case KindJSDocProtectedTag:
return n.data.(*JSDocProtectedTag).ForEachChild(v)
case KindJSDocReadonlyTag:
return n.data.(*JSDocReadonlyTag).ForEachChild(v)
case KindJSDocOverrideTag:
return n.data.(*JSDocOverrideTag).ForEachChild(v)
case KindJSDocDeprecatedTag:
return n.data.(*JSDocDeprecatedTag).ForEachChild(v)
case KindJSDocSeeTag:
return n.data.(*JSDocSeeTag).ForEachChild(v)
case KindJSDocImplementsTag:
return n.data.(*JSDocImplementsTag).ForEachChild(v)
case KindJSDocAugmentsTag:
return n.data.(*JSDocAugmentsTag).ForEachChild(v)
case KindJSDocSatisfiesTag:
return n.data.(*JSDocSatisfiesTag).ForEachChild(v)
case KindJSDocThrowsTag:
return n.data.(*JSDocThrowsTag).ForEachChild(v)
case KindJSDocThisTag:
return n.data.(*JSDocThisTag).ForEachChild(v)
case KindJSDocImportTag:
return n.data.(*JSDocImportTag).ForEachChild(v)
case KindJSDocCallbackTag:
return n.data.(*JSDocCallbackTag).ForEachChild(v)
case KindJSDocOverloadTag:
return n.data.(*JSDocOverloadTag).ForEachChild(v)
case KindJSDocTypedefTag:
return n.data.(*JSDocTypedefTag).ForEachChild(v)
case KindJSDocSignature:
return n.data.(*JSDocSignature).ForEachChild(v)
case KindJSDocNameReference:
return n.data.(*JSDocNameReference).ForEachChild(v)
case KindSourceFile:
return n.data.(*SourceFile).ForEachChild(v)
case KindModuleDeclaration:
return n.data.(*ModuleDeclaration).ForEachChild(v)
case KindImportEqualsDeclaration:
return n.data.(*ImportEqualsDeclaration).ForEachChild(v)
case KindExportDeclaration:
return n.data.(*ExportDeclaration).ForEachChild(v)
case KindImportType:
return n.data.(*ImportTypeNode).ForEachChild(v)
case KindImportClause:
return n.data.(*ImportClause).ForEachChild(v)
case KindImportSpecifier:
return n.data.(*ImportSpecifier).ForEachChild(v)
case KindJSDocLink:
return n.data.(*JSDocLink).ForEachChild(v)
case KindJSDocLinkPlain:
return n.data.(*JSDocLinkPlain).ForEachChild(v)
case KindJSDocLinkCode:
return n.data.(*JSDocLinkCode).ForEachChild(v)
case KindTypeParameter:
return n.data.(*TypeParameterDeclaration).ForEachChild(v)
case KindSyntheticReferenceExpression:
return n.data.(*SyntheticReferenceExpression).ForEachChild(v)
case KindJSDocTypeLiteral:
return n.data.(*JSDocTypeLiteral).ForEachChild(v)
case KindJSDocParameterTag, KindJSDocPropertyTag:
return n.data.(*JSDocParameterOrPropertyTag).ForEachChild(v)
default:
return false
}
}
// ──────────────────────────────────────────────────────────────────────
// As*() cast methods
// ──────────────────────────────────────────────────────────────────────
func (n *Node) AsToken() *Token {
return n.data.(*Token)
}
func (n *Node) AsIdentifier() *Identifier {
return n.data.(*Identifier)
}
func (n *Node) AsPrivateIdentifier() *PrivateIdentifier {
return n.data.(*PrivateIdentifier)
}
func (n *Node) AsQualifiedName() *QualifiedName {
return n.data.(*QualifiedName)
}
func (n *Node) AsComputedPropertyName() *ComputedPropertyName {
return n.data.(*ComputedPropertyName)
}
func (n *Node) AsDecorator() *Decorator {
return n.data.(*Decorator)
}
func (n *Node) AsEmptyStatement() *EmptyStatement {
return n.data.(*EmptyStatement)
}
func (n *Node) AsIfStatement() *IfStatement {
return n.data.(*IfStatement)
}
func (n *Node) AsDoStatement() *DoStatement {
return n.data.(*DoStatement)
}
func (n *Node) AsWhileStatement() *WhileStatement {
return n.data.(*WhileStatement)
}
func (n *Node) AsForStatement() *ForStatement {
return n.data.(*ForStatement)
}
func (n *Node) AsForInOrOfStatement() *ForInOrOfStatement {
return n.data.(*ForInOrOfStatement)
}
func (n *Node) AsBreakStatement() *BreakStatement {
return n.data.(*BreakStatement)
}
func (n *Node) AsContinueStatement() *ContinueStatement {
return n.data.(*ContinueStatement)
}
func (n *Node) AsReturnStatement() *ReturnStatement {
return n.data.(*ReturnStatement)
}
func (n *Node) AsWithStatement() *WithStatement {
return n.data.(*WithStatement)
}
func (n *Node) AsSwitchStatement() *SwitchStatement {
return n.data.(*SwitchStatement)
}
func (n *Node) AsCaseBlock() *CaseBlock {
return n.data.(*CaseBlock)
}
func (n *Node) AsCaseOrDefaultClause() *CaseOrDefaultClause {
return n.data.(*CaseOrDefaultClause)
}
func (n *Node) AsThrowStatement() *ThrowStatement {
return n.data.(*ThrowStatement)
}
func (n *Node) AsTryStatement() *TryStatement {
return n.data.(*TryStatement)
}
func (n *Node) AsCatchClause() *CatchClause {
return n.data.(*CatchClause)
}
func (n *Node) AsDebuggerStatement() *DebuggerStatement {
return n.data.(*DebuggerStatement)
}
func (n *Node) AsLabeledStatement() *LabeledStatement {
return n.data.(*LabeledStatement)
}
func (n *Node) AsExpressionStatement() *ExpressionStatement {
return n.data.(*ExpressionStatement)
}
func (n *Node) AsBlock() *Block {
return n.data.(*Block)
}
func (n *Node) AsVariableStatement() *VariableStatement {
return n.data.(*VariableStatement)
}
func (n *Node) AsVariableDeclaration() *VariableDeclaration {
return n.data.(*VariableDeclaration)
}
func (n *Node) AsVariableDeclarationList() *VariableDeclarationList {
return n.data.(*VariableDeclarationList)
}
func (n *Node) AsBindingPattern() *BindingPattern {
return n.data.(*BindingPattern)
}
func (n *Node) AsParameterDeclaration() *ParameterDeclaration {
return n.data.(*ParameterDeclaration)
}
func (n *Node) AsBindingElement() *BindingElement {
return n.data.(*BindingElement)
}
func (n *Node) AsMissingDeclaration() *MissingDeclaration {
return n.data.(*MissingDeclaration)
}
func (n *Node) AsFunctionDeclaration() *FunctionDeclaration {
return n.data.(*FunctionDeclaration)
}
func (n *Node) AsClassDeclaration() *ClassDeclaration {
return n.data.(*ClassDeclaration)
}
func (n *Node) AsClassExpression() *ClassExpression {
return n.data.(*ClassExpression)
}
func (n *Node) AsHeritageClause() *HeritageClause {
return n.data.(*HeritageClause)
}
func (n *Node) AsInterfaceDeclaration() *InterfaceDeclaration {
return n.data.(*InterfaceDeclaration)
}
func (n *Node) AsTypeAliasDeclaration() *TypeAliasDeclaration {
return n.data.(*TypeAliasDeclaration)
}
func (n *Node) AsEnumMember() *EnumMember {
return n.data.(*EnumMember)
}
func (n *Node) AsEnumDeclaration() *EnumDeclaration {
return n.data.(*EnumDeclaration)
}
func (n *Node) AsModuleBlock() *ModuleBlock {
return n.data.(*ModuleBlock)
}
func (n *Node) AsNotEmittedStatement() *NotEmittedStatement {
return n.data.(*NotEmittedStatement)
}
func (n *Node) AsNotEmittedTypeElement() *NotEmittedTypeElement {
return n.data.(*NotEmittedTypeElement)
}
func (n *Node) AsImportDeclaration() *ImportDeclaration {
return n.data.(*ImportDeclaration)
}
func (n *Node) AsExternalModuleReference() *ExternalModuleReference {
return n.data.(*ExternalModuleReference)
}
func (n *Node) AsNamespaceImport() *NamespaceImport {
return n.data.(*NamespaceImport)
}
func (n *Node) AsNamedImports() *NamedImports {
return n.data.(*NamedImports)
}
func (n *Node) AsExportAssignment() *ExportAssignment {
return n.data.(*ExportAssignment)
}
func (n *Node) AsNamespaceExportDeclaration() *NamespaceExportDeclaration {
return n.data.(*NamespaceExportDeclaration)
}
func (n *Node) AsNamespaceExport() *NamespaceExport {
return n.data.(*NamespaceExport)
}
func (n *Node) AsNamedExports() *NamedExports {
return n.data.(*NamedExports)
}
func (n *Node) AsExportSpecifier() *ExportSpecifier {
return n.data.(*ExportSpecifier)
}
func (n *Node) AsCallSignatureDeclaration() *CallSignatureDeclaration {
return n.data.(*CallSignatureDeclaration)
}
func (n *Node) AsConstructSignatureDeclaration() *ConstructSignatureDeclaration {
return n.data.(*ConstructSignatureDeclaration)
}
func (n *Node) AsConstructorDeclaration() *ConstructorDeclaration {
return n.data.(*ConstructorDeclaration)
}
func (n *Node) AsGetAccessorDeclaration() *GetAccessorDeclaration {
return n.data.(*GetAccessorDeclaration)
}
func (n *Node) AsSetAccessorDeclaration() *SetAccessorDeclaration {
return n.data.(*SetAccessorDeclaration)
}
func (n *Node) AsIndexSignatureDeclaration() *IndexSignatureDeclaration {
return n.data.(*IndexSignatureDeclaration)
}
func (n *Node) AsMethodSignatureDeclaration() *MethodSignatureDeclaration {
return n.data.(*MethodSignatureDeclaration)
}
func (n *Node) AsMethodDeclaration() *MethodDeclaration {
return n.data.(*MethodDeclaration)
}
func (n *Node) AsPropertySignatureDeclaration() *PropertySignatureDeclaration {
return n.data.(*PropertySignatureDeclaration)
}
func (n *Node) AsPropertyDeclaration() *PropertyDeclaration {
return n.data.(*PropertyDeclaration)
}
func (n *Node) AsSemicolonClassElement() *SemicolonClassElement {
return n.data.(*SemicolonClassElement)
}
func (n *Node) AsClassStaticBlockDeclaration() *ClassStaticBlockDeclaration {
return n.data.(*ClassStaticBlockDeclaration)
}
func (n *Node) AsOmittedExpression() *OmittedExpression {
return n.data.(*OmittedExpression)
}
func (n *Node) AsKeywordExpression() *KeywordExpression {
return n.data.(*KeywordExpression)
}
func (n *Node) AsStringLiteral() *StringLiteral {
return n.data.(*StringLiteral)
}
func (n *Node) AsNumericLiteral() *NumericLiteral {
return n.data.(*NumericLiteral)
}
func (n *Node) AsBigIntLiteral() *BigIntLiteral {
return n.data.(*BigIntLiteral)
}
func (n *Node) AsRegularExpressionLiteral() *RegularExpressionLiteral {
return n.data.(*RegularExpressionLiteral)
}
func (n *Node) AsNoSubstitutionTemplateLiteral() *NoSubstitutionTemplateLiteral {
return n.data.(*NoSubstitutionTemplateLiteral)
}
func (n *Node) AsBinaryExpression() *BinaryExpression {
return n.data.(*BinaryExpression)
}
func (n *Node) AsPrefixUnaryExpression() *PrefixUnaryExpression {
return n.data.(*PrefixUnaryExpression)
}
func (n *Node) AsPostfixUnaryExpression() *PostfixUnaryExpression {
return n.data.(*PostfixUnaryExpression)
}
func (n *Node) AsYieldExpression() *YieldExpression {
return n.data.(*YieldExpression)
}
func (n *Node) AsArrowFunction() *ArrowFunction {
return n.data.(*ArrowFunction)
}
func (n *Node) AsFunctionExpression() *FunctionExpression {
return n.data.(*FunctionExpression)
}
func (n *Node) AsAsExpression() *AsExpression {
return n.data.(*AsExpression)
}
func (n *Node) AsSatisfiesExpression() *SatisfiesExpression {
return n.data.(*SatisfiesExpression)
}
func (n *Node) AsConditionalExpression() *ConditionalExpression {
return n.data.(*ConditionalExpression)
}
func (n *Node) AsPropertyAccessExpression() *PropertyAccessExpression {
return n.data.(*PropertyAccessExpression)
}
func (n *Node) AsElementAccessExpression() *ElementAccessExpression {
return n.data.(*ElementAccessExpression)
}
func (n *Node) AsCallExpression() *CallExpression {
return n.data.(*CallExpression)
}
func (n *Node) AsNewExpression() *NewExpression {
return n.data.(*NewExpression)
}
func (n *Node) AsMetaProperty() *MetaProperty {
return n.data.(*MetaProperty)
}
func (n *Node) AsNonNullExpression() *NonNullExpression {
return n.data.(*NonNullExpression)
}
func (n *Node) AsSpreadElement() *SpreadElement {
return n.data.(*SpreadElement)
}
func (n *Node) AsTemplateExpression() *TemplateExpression {
return n.data.(*TemplateExpression)
}
func (n *Node) AsTemplateSpan() *TemplateSpan {
return n.data.(*TemplateSpan)
}
func (n *Node) AsTaggedTemplateExpression() *TaggedTemplateExpression {
return n.data.(*TaggedTemplateExpression)
}
func (n *Node) AsParenthesizedExpression() *ParenthesizedExpression {
return n.data.(*ParenthesizedExpression)
}
func (n *Node) AsArrayLiteralExpression() *ArrayLiteralExpression {
return n.data.(*ArrayLiteralExpression)
}
func (n *Node) AsObjectLiteralExpression() *ObjectLiteralExpression {
return n.data.(*ObjectLiteralExpression)
}
func (n *Node) AsSpreadAssignment() *SpreadAssignment {
return n.data.(*SpreadAssignment)
}
func (n *Node) AsPropertyAssignment() *PropertyAssignment {
return n.data.(*PropertyAssignment)
}
func (n *Node) AsShorthandPropertyAssignment() *ShorthandPropertyAssignment {
return n.data.(*ShorthandPropertyAssignment)
}
func (n *Node) AsDeleteExpression() *DeleteExpression {
return n.data.(*DeleteExpression)
}
func (n *Node) AsTypeOfExpression() *TypeOfExpression {
return n.data.(*TypeOfExpression)
}
func (n *Node) AsVoidExpression() *VoidExpression {
return n.data.(*VoidExpression)
}
func (n *Node) AsAwaitExpression() *AwaitExpression {
return n.data.(*AwaitExpression)
}
func (n *Node) AsTypeAssertion() *TypeAssertion {
return n.data.(*TypeAssertion)
}
func (n *Node) AsKeywordTypeNode() *KeywordTypeNode {
return n.data.(*KeywordTypeNode)
}
func (n *Node) AsUnionTypeNode() *UnionTypeNode {
return n.data.(*UnionTypeNode)
}
func (n *Node) AsIntersectionTypeNode() *IntersectionTypeNode {
return n.data.(*IntersectionTypeNode)
}
func (n *Node) AsConditionalTypeNode() *ConditionalTypeNode {
return n.data.(*ConditionalTypeNode)
}
func (n *Node) AsTypeOperatorNode() *TypeOperatorNode {
return n.data.(*TypeOperatorNode)
}
func (n *Node) AsInferTypeNode() *InferTypeNode {
return n.data.(*InferTypeNode)
}
func (n *Node) AsArrayTypeNode() *ArrayTypeNode {
return n.data.(*ArrayTypeNode)
}
func (n *Node) AsIndexedAccessTypeNode() *IndexedAccessTypeNode {
return n.data.(*IndexedAccessTypeNode)
}
func (n *Node) AsTypeReferenceNode() *TypeReferenceNode {
return n.data.(*TypeReferenceNode)
}
func (n *Node) AsExpressionWithTypeArguments() *ExpressionWithTypeArguments {
return n.data.(*ExpressionWithTypeArguments)
}
func (n *Node) AsLiteralTypeNode() *LiteralTypeNode {
return n.data.(*LiteralTypeNode)
}
func (n *Node) AsThisTypeNode() *ThisTypeNode {
return n.data.(*ThisTypeNode)
}
func (n *Node) AsTypePredicateNode() *TypePredicateNode {
return n.data.(*TypePredicateNode)
}
func (n *Node) AsImportAttribute() *ImportAttribute {
return n.data.(*ImportAttribute)
}
func (n *Node) AsImportAttributes() *ImportAttributes {
return n.data.(*ImportAttributes)
}
func (n *Node) AsTypeQueryNode() *TypeQueryNode {
return n.data.(*TypeQueryNode)
}
func (n *Node) AsMappedTypeNode() *MappedTypeNode {
return n.data.(*MappedTypeNode)
}
func (n *Node) AsTypeLiteralNode() *TypeLiteralNode {
return n.data.(*TypeLiteralNode)
}
func (n *Node) AsTupleTypeNode() *TupleTypeNode {
return n.data.(*TupleTypeNode)
}
func (n *Node) AsNamedTupleMember() *NamedTupleMember {
return n.data.(*NamedTupleMember)
}
func (n *Node) AsOptionalTypeNode() *OptionalTypeNode {
return n.data.(*OptionalTypeNode)
}
func (n *Node) AsRestTypeNode() *RestTypeNode {
return n.data.(*RestTypeNode)
}
func (n *Node) AsParenthesizedTypeNode() *ParenthesizedTypeNode {
return n.data.(*ParenthesizedTypeNode)
}
func (n *Node) AsFunctionTypeNode() *FunctionTypeNode {
return n.data.(*FunctionTypeNode)
}
func (n *Node) AsConstructorTypeNode() *ConstructorTypeNode {
return n.data.(*ConstructorTypeNode)
}
func (n *Node) AsTemplateHead() *TemplateHead {
return n.data.(*TemplateHead)
}
func (n *Node) AsTemplateMiddle() *TemplateMiddle {
return n.data.(*TemplateMiddle)
}
func (n *Node) AsTemplateTail() *TemplateTail {
return n.data.(*TemplateTail)
}
func (n *Node) AsTemplateLiteralTypeNode() *TemplateLiteralTypeNode {
return n.data.(*TemplateLiteralTypeNode)
}
func (n *Node) AsTemplateLiteralTypeSpan() *TemplateLiteralTypeSpan {
return n.data.(*TemplateLiteralTypeSpan)
}
func (n *Node) AsSyntheticExpression() *SyntheticExpression {
return n.data.(*SyntheticExpression)
}
func (n *Node) AsPartiallyEmittedExpression() *PartiallyEmittedExpression {
return n.data.(*PartiallyEmittedExpression)
}
func (n *Node) AsJsxElement() *JsxElement {
return n.data.(*JsxElement)
}
func (n *Node) AsJsxAttributes() *JsxAttributes {
return n.data.(*JsxAttributes)
}
func (n *Node) AsJsxNamespacedName() *JsxNamespacedName {
return n.data.(*JsxNamespacedName)
}
func (n *Node) AsJsxOpeningElement() *JsxOpeningElement {
return n.data.(*JsxOpeningElement)
}
func (n *Node) AsJsxSelfClosingElement() *JsxSelfClosingElement {
return n.data.(*JsxSelfClosingElement)
}
func (n *Node) AsJsxFragment() *JsxFragment {
return n.data.(*JsxFragment)
}
func (n *Node) AsJsxOpeningFragment() *JsxOpeningFragment {
return n.data.(*JsxOpeningFragment)
}
func (n *Node) AsJsxClosingFragment() *JsxClosingFragment {
return n.data.(*JsxClosingFragment)
}
func (n *Node) AsJsxAttribute() *JsxAttribute {
return n.data.(*JsxAttribute)
}
func (n *Node) AsJsxSpreadAttribute() *JsxSpreadAttribute {
return n.data.(*JsxSpreadAttribute)
}
func (n *Node) AsJsxClosingElement() *JsxClosingElement {
return n.data.(*JsxClosingElement)
}
func (n *Node) AsJsxExpression() *JsxExpression {
return n.data.(*JsxExpression)
}
func (n *Node) AsJsxText() *JsxText {
return n.data.(*JsxText)
}
func (n *Node) AsSyntaxList() *SyntaxList {
return n.data.(*SyntaxList)
}
func (n *Node) AsJSDoc() *JSDoc {
return n.data.(*JSDoc)
}
func (n *Node) AsJSDocTypeExpression() *JSDocTypeExpression {
return n.data.(*JSDocTypeExpression)
}
func (n *Node) AsJSDocNonNullableType() *JSDocNonNullableType {
return n.data.(*JSDocNonNullableType)
}
func (n *Node) AsJSDocNullableType() *JSDocNullableType {
return n.data.(*JSDocNullableType)
}
func (n *Node) AsJSDocAllType() *JSDocAllType {
return n.data.(*JSDocAllType)
}
func (n *Node) AsJSDocVariadicType() *JSDocVariadicType {
return n.data.(*JSDocVariadicType)
}
func (n *Node) AsJSDocOptionalType() *JSDocOptionalType {
return n.data.(*JSDocOptionalType)
}
func (n *Node) AsJSDocTypeTag() *JSDocTypeTag {
return n.data.(*JSDocTypeTag)
}
func (n *Node) AsJSDocUnknownTag() *JSDocUnknownTag {
return n.data.(*JSDocUnknownTag)
}
func (n *Node) AsJSDocTemplateTag() *JSDocTemplateTag {
return n.data.(*JSDocTemplateTag)
}
func (n *Node) AsJSDocReturnTag() *JSDocReturnTag {
return n.data.(*JSDocReturnTag)
}
func (n *Node) AsJSDocPublicTag() *JSDocPublicTag {
return n.data.(*JSDocPublicTag)
}
func (n *Node) AsJSDocPrivateTag() *JSDocPrivateTag {
return n.data.(*JSDocPrivateTag)
}
func (n *Node) AsJSDocProtectedTag() *JSDocProtectedTag {
return n.data.(*JSDocProtectedTag)
}
func (n *Node) AsJSDocReadonlyTag() *JSDocReadonlyTag {
return n.data.(*JSDocReadonlyTag)
}
func (n *Node) AsJSDocOverrideTag() *JSDocOverrideTag {
return n.data.(*JSDocOverrideTag)
}
func (n *Node) AsJSDocDeprecatedTag() *JSDocDeprecatedTag {
return n.data.(*JSDocDeprecatedTag)
}
func (n *Node) AsJSDocSeeTag() *JSDocSeeTag {
return n.data.(*JSDocSeeTag)
}
func (n *Node) AsJSDocImplementsTag() *JSDocImplementsTag {
return n.data.(*JSDocImplementsTag)
}
func (n *Node) AsJSDocAugmentsTag() *JSDocAugmentsTag {
return n.data.(*JSDocAugmentsTag)
}
func (n *Node) AsJSDocSatisfiesTag() *JSDocSatisfiesTag {
return n.data.(*JSDocSatisfiesTag)
}
func (n *Node) AsJSDocThrowsTag() *JSDocThrowsTag {
return n.data.(*JSDocThrowsTag)
}
func (n *Node) AsJSDocThisTag() *JSDocThisTag {
return n.data.(*JSDocThisTag)
}
func (n *Node) AsJSDocImportTag() *JSDocImportTag {
return n.data.(*JSDocImportTag)
}
func (n *Node) AsJSDocCallbackTag() *JSDocCallbackTag {
return n.data.(*JSDocCallbackTag)
}
func (n *Node) AsJSDocOverloadTag() *JSDocOverloadTag {
return n.data.(*JSDocOverloadTag)
}
func (n *Node) AsJSDocTypedefTag() *JSDocTypedefTag {
return n.data.(*JSDocTypedefTag)
}
func (n *Node) AsJSDocSignature() *JSDocSignature {
return n.data.(*JSDocSignature)
}
func (n *Node) AsJSDocNameReference() *JSDocNameReference {
return n.data.(*JSDocNameReference)
}
func (n *Node) AsSourceFile() *SourceFile {
return n.data.(*SourceFile)
}
func (n *Node) AsModuleDeclaration() *ModuleDeclaration {
return n.data.(*ModuleDeclaration)
}
func (n *Node) AsImportEqualsDeclaration() *ImportEqualsDeclaration {
return n.data.(*ImportEqualsDeclaration)
}
func (n *Node) AsExportDeclaration() *ExportDeclaration {
return n.data.(*ExportDeclaration)
}
func (n *Node) AsImportTypeNode() *ImportTypeNode {
return n.data.(*ImportTypeNode)
}
func (n *Node) AsImportClause() *ImportClause {
return n.data.(*ImportClause)
}
func (n *Node) AsImportSpecifier() *ImportSpecifier {
return n.data.(*ImportSpecifier)
}
func (n *Node) AsJSDocText() *JSDocText {
return n.data.(*JSDocText)
}
func (n *Node) AsJSDocLink() *JSDocLink {
return n.data.(*JSDocLink)
}
func (n *Node) AsJSDocLinkPlain() *JSDocLinkPlain {
return n.data.(*JSDocLinkPlain)
}
func (n *Node) AsJSDocLinkCode() *JSDocLinkCode {
return n.data.(*JSDocLinkCode)
}
func (n *Node) AsTypeParameterDeclaration() *TypeParameterDeclaration {
return n.data.(*TypeParameterDeclaration)
}
func (n *Node) AsSyntheticReferenceExpression() *SyntheticReferenceExpression {
return n.data.(*SyntheticReferenceExpression)
}
func (n *Node) AsJSDocTypeLiteral() *JSDocTypeLiteral {
return n.data.(*JSDocTypeLiteral)
}
func (n *Node) AsJSDocParameterOrPropertyTag() *JSDocParameterOrPropertyTag {
return n.data.(*JSDocParameterOrPropertyTag)
}
// ──────────────────────────────────────────────────────────────────────
// Kind alias guards
// ──────────────────────────────────────────────────────────────────────
func IsTriviaKind(kind Kind) bool {
switch kind {
case KindSingleLineCommentTrivia, KindMultiLineCommentTrivia, KindNewLineTrivia, KindWhitespaceTrivia, KindConflictMarkerTrivia:
return true
}
return false
}
func IsLiteralKind(kind Kind) bool {
return kind >= KindFirstLiteralToken && kind <= KindLastLiteralToken
}
func IsPseudoLiteralKind(kind Kind) bool {
switch kind {
case KindTemplateHead, KindTemplateMiddle, KindTemplateTail:
return true
}
return false
}
func IsPunctuationKind(kind Kind) bool {
return kind >= KindFirstPunctuation && kind <= KindLastPunctuation
}
func IsKeywordKind(kind Kind) bool {
return kind >= KindFirstKeyword && kind <= KindLastKeyword
}
func IsModifierKind(kind Kind) bool {
switch kind {
case KindAbstractKeyword, KindAccessorKeyword, KindAsyncKeyword, KindConstKeyword, KindDeclareKeyword, KindDefaultKeyword, KindExportKeyword, KindInKeyword, KindPrivateKeyword, KindProtectedKeyword, KindPublicKeyword, KindReadonlyKeyword, KindOutKeyword, KindOverrideKeyword, KindStaticKeyword:
return true
}
return false
}
func IsKeywordTypeKind(kind Kind) bool {
switch kind {
case KindAnyKeyword, KindBigIntKeyword, KindBooleanKeyword, KindIntrinsicKeyword, KindNeverKeyword, KindNumberKeyword, KindObjectKeyword, KindStringKeyword, KindSymbolKeyword, KindUndefinedKeyword, KindUnknownKeyword, KindVoidKeyword:
return true
}
return false
}
func IsKeywordExpressionKind(kind Kind) bool {
switch kind {
case KindNullKeyword, KindTrueKeyword, KindFalseKeyword, KindThisKeyword, KindSuperKeyword, KindImportKeyword:
return true
}
return false
}
func IsTokenKind(kind Kind) bool {
return kind >= KindFirstToken && kind <= KindLastToken
}
func IsJsxTokenKind(kind Kind) bool {
switch kind {
case KindLessThanSlashToken, KindEndOfFile, KindConflictMarkerTrivia, KindJsxText, KindJsxTextAllWhiteSpaces, KindOpenBraceToken, KindLessThanToken:
return true
}
return false
}
func IsJSDocNodeKind(kind Kind) bool {
return kind >= KindFirstJSDocNode && kind <= KindLastJSDocNode
}
func IsImportPhaseModifierKind(kind Kind) bool {
switch kind {
case KindTypeKeyword, KindDeferKeyword:
return true
}
return false
}
func IsPostfixUnaryOperator(kind Kind) bool {
switch kind {
case KindPlusPlusToken, KindMinusMinusToken:
return true
}
return false
}
func IsPrefixUnaryOperator(kind Kind) bool {
switch kind {
case KindPlusToken, KindMinusToken, KindTildeToken, KindExclamationToken, KindPlusPlusToken, KindMinusMinusToken:
return true
}
return false
}
func IsAssignmentOperator(kind Kind) bool {
switch kind {
case KindEqualsToken, KindPlusEqualsToken, KindMinusEqualsToken, KindAsteriskAsteriskEqualsToken, KindAsteriskEqualsToken, KindSlashEqualsToken, KindPercentEqualsToken, KindAmpersandEqualsToken, KindBarEqualsToken, KindCaretEqualsToken, KindLessThanLessThanEqualsToken, KindGreaterThanGreaterThanGreaterThanEqualsToken, KindGreaterThanGreaterThanEqualsToken, KindBarBarEqualsToken, KindAmpersandAmpersandEqualsToken, KindQuestionQuestionEqualsToken:
return true
}
return false
}
func IsBinaryOperator(kind Kind) bool {
switch kind {
case KindQuestionQuestionToken, KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken, KindPlusToken, KindMinusToken, KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken, KindLessThanToken, KindLessThanEqualsToken, KindGreaterThanToken, KindGreaterThanEqualsToken, KindInstanceOfKeyword, KindInKeyword, KindEqualsEqualsToken, KindEqualsEqualsEqualsToken, KindExclamationEqualsEqualsToken, KindExclamationEqualsToken, KindAmpersandToken, KindBarToken, KindCaretToken, KindAmpersandAmpersandToken, KindBarBarToken, KindEqualsToken, KindPlusEqualsToken, KindMinusEqualsToken, KindAsteriskAsteriskEqualsToken, KindAsteriskEqualsToken, KindSlashEqualsToken, KindPercentEqualsToken, KindAmpersandEqualsToken, KindBarEqualsToken, KindCaretEqualsToken, KindLessThanLessThanEqualsToken, KindGreaterThanGreaterThanGreaterThanEqualsToken, KindGreaterThanGreaterThanEqualsToken, KindBarBarEqualsToken, KindAmpersandAmpersandEqualsToken, KindQuestionQuestionEqualsToken, KindCommaToken:
return true
}
return false
}
func IsExponentiationOperator(kind Kind) bool {
switch kind {
case KindAsteriskAsteriskToken:
return true
}
return false
}
func IsMultiplicativeOperator(kind Kind) bool {
switch kind {
case KindAsteriskToken, KindSlashToken, KindPercentToken:
return true
}
return false
}
func IsMultiplicativeOperatorOrHigher(kind Kind) bool {
switch kind {
case KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken:
return true
}
return false
}
func IsAdditiveOperator(kind Kind) bool {
switch kind {
case KindPlusToken, KindMinusToken:
return true
}
return false
}
func IsAdditiveOperatorOrHigher(kind Kind) bool {
switch kind {
case KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken, KindPlusToken, KindMinusToken:
return true
}
return false
}
func IsShiftOperator(kind Kind) bool {
switch kind {
case KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken:
return true
}
return false
}
func IsShiftOperatorOrHigher(kind Kind) bool {
switch kind {
case KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken, KindPlusToken, KindMinusToken, KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken:
return true
}
return false
}
func IsRelationalOperator(kind Kind) bool {
switch kind {
case KindLessThanToken, KindLessThanEqualsToken, KindGreaterThanToken, KindGreaterThanEqualsToken, KindInstanceOfKeyword, KindInKeyword:
return true
}
return false
}
func IsRelationalOperatorOrHigher(kind Kind) bool {
switch kind {
case KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken, KindPlusToken, KindMinusToken, KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken, KindLessThanToken, KindLessThanEqualsToken, KindGreaterThanToken, KindGreaterThanEqualsToken, KindInstanceOfKeyword, KindInKeyword:
return true
}
return false
}
func IsEqualityOperator(kind Kind) bool {
switch kind {
case KindEqualsEqualsToken, KindEqualsEqualsEqualsToken, KindExclamationEqualsEqualsToken, KindExclamationEqualsToken:
return true
}
return false
}
func IsEqualityOperatorOrHigher(kind Kind) bool {
switch kind {
case KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken, KindPlusToken, KindMinusToken, KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken, KindLessThanToken, KindLessThanEqualsToken, KindGreaterThanToken, KindGreaterThanEqualsToken, KindInstanceOfKeyword, KindInKeyword, KindEqualsEqualsToken, KindEqualsEqualsEqualsToken, KindExclamationEqualsEqualsToken, KindExclamationEqualsToken:
return true
}
return false
}
func IsBitwiseOperator(kind Kind) bool {
switch kind {
case KindAmpersandToken, KindBarToken, KindCaretToken:
return true
}
return false
}
func IsBitwiseOperatorOrHigher(kind Kind) bool {
switch kind {
case KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken, KindPlusToken, KindMinusToken, KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken, KindLessThanToken, KindLessThanEqualsToken, KindGreaterThanToken, KindGreaterThanEqualsToken, KindInstanceOfKeyword, KindInKeyword, KindEqualsEqualsToken, KindEqualsEqualsEqualsToken, KindExclamationEqualsEqualsToken, KindExclamationEqualsToken, KindAmpersandToken, KindBarToken, KindCaretToken:
return true
}
return false
}
func IsLogicalOperator(kind Kind) bool {
switch kind {
case KindAmpersandAmpersandToken, KindBarBarToken:
return true
}
return false
}
func IsLogicalOperatorOrHigher(kind Kind) bool {
switch kind {
case KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken, KindPlusToken, KindMinusToken, KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken, KindLessThanToken, KindLessThanEqualsToken, KindGreaterThanToken, KindGreaterThanEqualsToken, KindInstanceOfKeyword, KindInKeyword, KindEqualsEqualsToken, KindEqualsEqualsEqualsToken, KindExclamationEqualsEqualsToken, KindExclamationEqualsToken, KindAmpersandToken, KindBarToken, KindCaretToken, KindAmpersandAmpersandToken, KindBarBarToken:
return true
}
return false
}
func IsCompoundAssignmentOperator(kind Kind) bool {
switch kind {
case KindPlusEqualsToken, KindMinusEqualsToken, KindAsteriskAsteriskEqualsToken, KindAsteriskEqualsToken, KindSlashEqualsToken, KindPercentEqualsToken, KindAmpersandEqualsToken, KindBarEqualsToken, KindCaretEqualsToken, KindLessThanLessThanEqualsToken, KindGreaterThanGreaterThanGreaterThanEqualsToken, KindGreaterThanGreaterThanEqualsToken, KindBarBarEqualsToken, KindAmpersandAmpersandEqualsToken, KindQuestionQuestionEqualsToken:
return true
}
return false
}
func IsAssignmentOperatorOrHigher(kind Kind) bool {
switch kind {
case KindQuestionQuestionToken, KindAsteriskAsteriskToken, KindAsteriskToken, KindSlashToken, KindPercentToken, KindPlusToken, KindMinusToken, KindLessThanLessThanToken, KindGreaterThanGreaterThanToken, KindGreaterThanGreaterThanGreaterThanToken, KindLessThanToken, KindLessThanEqualsToken, KindGreaterThanToken, KindGreaterThanEqualsToken, KindInstanceOfKeyword, KindInKeyword, KindEqualsEqualsToken, KindEqualsEqualsEqualsToken, KindExclamationEqualsEqualsToken, KindExclamationEqualsToken, KindAmpersandToken, KindBarToken, KindCaretToken, KindAmpersandAmpersandToken, KindBarBarToken, KindEqualsToken, KindPlusEqualsToken, KindMinusEqualsToken, KindAsteriskAsteriskEqualsToken, KindAsteriskEqualsToken, KindSlashEqualsToken, KindPercentEqualsToken, KindAmpersandEqualsToken, KindBarEqualsToken, KindCaretEqualsToken, KindLessThanLessThanEqualsToken, KindGreaterThanGreaterThanGreaterThanEqualsToken, KindGreaterThanGreaterThanEqualsToken, KindBarBarEqualsToken, KindAmpersandAmpersandEqualsToken, KindQuestionQuestionEqualsToken:
return true
}
return false
}
func IsLogicalOrCoalescingAssignmentOperator(kind Kind) bool {
switch kind {
case KindAmpersandAmpersandEqualsToken, KindBarBarEqualsToken, KindQuestionQuestionEqualsToken:
return true
}
return false
}