blob: 4f7e499e4def3e6b7c251c32583175e60552b07f [file] [log] [blame]
/**
* @flow
*/
'use strict';
/*
* Flow types for the Babylon AST.
*/
// Abstract types. Something must extend these.
export type Comment = {
type: 'CommentLine';
_CommentLine: void;
value: string;
end: number;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
} | {
type: 'CommentBlock';
_CommentBlock: void;
value: string;
end: number;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
};
export type Declaration = {
type: 'ClassBody';
_ClassBody: void;
body: Array<Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ClassDeclaration';
_ClassDeclaration: void;
body: ClassBody;
id: ?Identifier;
superClass: ?Expression;
decorators: any;
superTypeParameters: any;
typeParameters: any;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'FunctionDeclaration';
_FunctionDeclaration: void;
body: BlockStatement;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
} | {
type: 'MethodDefinition';
_MethodDefinition: void;
computed: boolean;
key: Node;
kind: 'constructor' | 'method' | 'get' | 'set';
static: boolean;
value: FunctionExpression;
decorators: ?Array<Decorator>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'VariableDeclaration';
_VariableDeclaration: void;
declarations: Array<VariableDeclarator>;
kind: 'var' | 'let' | 'const';
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ClassProperty';
_ClassProperty: void;
computed: boolean;
key: Node;
static: boolean;
typeAnnotation: ?TypeAnnotation;
value: ?Expression;
decorators: Array<Decorator>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Expression = {
type: 'ArrayExpression';
_ArrayExpression: void;
elements: Array<?Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'AssignmentExpression';
_AssignmentExpression: void;
left: Pattern;
operator: AssignmentOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'AwaitExpression';
_AwaitExpression: void;
all: boolean;
argument: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BinaryExpression';
_BinaryExpression: void;
left: Expression;
operator: BinaryOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BindExpression';
_BindExpression: void;
callee: Node;
object: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'CallExpression';
_CallExpression: void;
arguments: Array<Node>;
callee: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ClassExpression';
_ClassExpression: void;
body: ClassBody;
id: ?Identifier;
superClass: ?Expression;
decorators: any;
superTypeParameters: any;
typeParameters: any;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ComprehensionExpression';
_ComprehensionExpression: void;
body: Expression;
blocks: Array<ComprehensionBlock>;
filter: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ConditionalExpression';
_ConditionalExpression: void;
alternate: Expression;
consequent: Expression;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DoExpression';
_DoExpression: void;
body: Statement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'FunctionExpression';
_FunctionExpression: void;
body: BlockStatement;
id: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
} | {
type: 'Identifier';
_Identifier: void;
name: string;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'Literal';
_Literal: void;
raw: string;
regex: ?{pattern: string, flags: string};
value: ?(string | boolean | number | RegExp);
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'LogicalExpression';
_LogicalExpression: void;
left: Expression;
operator: LogicalOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'MemberExpression';
_MemberExpression: void;
computed: boolean;
object: Expression;
property: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'NewExpression';
_NewExpression: void;
arguments: Array<Node>;
callee: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectExpression';
_ObjectExpression: void;
properties: Array<Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'SequenceExpression';
_SequenceExpression: void;
expression: Array<Expression>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TaggedTemplateExpression';
_TaggedTemplateExpression: void;
quasi: TemplateLiteral;
tag: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TemplateLiteral';
_TemplateLiteral: void;
expressions: Array<Expression>;
quasis: Array<TemplateElement>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ThisExpression';
_ThisExpression: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'UnaryExpression';
_UnaryExpression: void;
argument: Expression;
operator: UnaryOperator;
prefix: true;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'UpdateExpression';
_UpdateExpression: void;
argument: Expression;
operator: UpdateOperator;
prefix: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'YieldExpression';
_YieldExpression: void;
argument: ?Expression;
delegate: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TypeCastExpression';
_TypeCastExpression: void;
expression: Expression;
typeAnnotation: TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXElement';
_JSXElement: void;
children: Array<Node>;
closingElement: ?JSXClosingElement;
openingElement: JSXOpeningElement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXEmptyExpression';
_JSXEmptyExpression: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXExpressionContainer';
_JSXExpressionContainer: void;
expression: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXMemberExpression';
_JSXMemberExpression: void;
computed: boolean;
object: Node;
property: JSXIdentifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Function = {
type: 'ArrowFunctionExpression';
_ArrowFunctionExpression: void;
body: Node;
id: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
} | {
type: 'FunctionDeclaration';
_FunctionDeclaration: void;
body: BlockStatement;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
} | {
type: 'FunctionExpression';
_FunctionExpression: void;
body: BlockStatement;
id: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
};
export type Node = {
type: 'ArrayExpression';
_ArrayExpression: void;
elements: Array<?Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ArrayPattern';
_ArrayPattern: void;
elements: Array<?Node>;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ArrowFunctionExpression';
_ArrowFunctionExpression: void;
body: Node;
id: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
} | {
type: 'AssignmentExpression';
_AssignmentExpression: void;
left: Pattern;
operator: AssignmentOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'AssignmentPattern';
_AssignmentPattern: void;
left: Pattern;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'AwaitExpression';
_AwaitExpression: void;
all: boolean;
argument: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BinaryExpression';
_BinaryExpression: void;
left: Expression;
operator: BinaryOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BindExpression';
_BindExpression: void;
callee: Node;
object: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BlockStatement';
_BlockStatement: void;
body: Array<Statement>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BreakStatement';
_BreakStatement: void;
label: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'CallExpression';
_CallExpression: void;
arguments: Array<Node>;
callee: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'CatchClause';
_CatchClause: void;
body: BlockStatement;
param: Pattern;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ClassBody';
_ClassBody: void;
body: Array<Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ClassDeclaration';
_ClassDeclaration: void;
body: ClassBody;
id: ?Identifier;
superClass: ?Expression;
decorators: any;
superTypeParameters: any;
typeParameters: any;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ClassExpression';
_ClassExpression: void;
body: ClassBody;
id: ?Identifier;
superClass: ?Expression;
decorators: any;
superTypeParameters: any;
typeParameters: any;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ComprehensionBlock';
_ComprehensionBlock: void;
each: boolean;
left: Pattern;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ComprehensionExpression';
_ComprehensionExpression: void;
body: Expression;
blocks: Array<ComprehensionBlock>;
filter: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ConditionalExpression';
_ConditionalExpression: void;
alternate: Expression;
consequent: Expression;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ContinueStatement';
_ContinueStatement: void;
label: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'Decorator';
_Decorator: void;
expression: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DebuggerStatement';
_DebuggerStatement: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DoWhileStatement';
_DoWhileStatement: void;
body: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DoExpression';
_DoExpression: void;
body: Statement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'EmptyStatement';
_EmptyStatement: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ExpressionStatement';
_ExpressionStatement: void;
expression: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'File';
_File: void;
program: Program;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ForInStatement';
_ForInStatement: void;
body: Statement;
left: Node;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ForOfStatement';
_ForOfStatement: void;
body: Statement;
left: Node;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ForStatement';
_ForStatement: void;
init: ?Node;
test: ?Expression;
update: ?Expression;
body: Statement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'FunctionDeclaration';
_FunctionDeclaration: void;
body: BlockStatement;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
} | {
type: 'FunctionExpression';
_FunctionExpression: void;
body: BlockStatement;
id: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
} | {
type: 'Identifier';
_Identifier: void;
name: string;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'IfStatement';
_IfStatement: void;
alternate: ?Statement;
consequent: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ImportDefaultSpecifier';
_ImportDefaultSpecifier: void;
local: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ImportNamespaceSpecifier';
_ImportNamespaceSpecifier: void;
local: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ImportDeclaration';
_ImportDeclaration: void;
specifiers: Array<Node>;
source: Literal;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ImportSpecifier';
_ImportSpecifier: void;
imported: Node;
local: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'LabeledStatement';
_LabeledStatement: void;
body: Statement;
label: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'Literal';
_Literal: void;
raw: string;
regex: ?{pattern: string, flags: string};
value: ?(string | boolean | number | RegExp);
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'LogicalExpression';
_LogicalExpression: void;
left: Expression;
operator: LogicalOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'MemberExpression';
_MemberExpression: void;
computed: boolean;
object: Expression;
property: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'MetaProperty';
_MetaProperty: void;
meta: Node;
property: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'MethodDefinition';
_MethodDefinition: void;
computed: boolean;
key: Node;
kind: 'constructor' | 'method' | 'get' | 'set';
static: boolean;
value: FunctionExpression;
decorators: ?Array<Decorator>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'NewExpression';
_NewExpression: void;
arguments: Array<Node>;
callee: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'Noop';
_Noop: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectExpression';
_ObjectExpression: void;
properties: Array<Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectPattern';
_ObjectPattern: void;
properties: Array<Node>;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'Program';
_Program: void;
body: Array<Statement>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'Property';
_Property: void;
computed: boolean;
key: Node;
kind: 'init' | 'get' | 'set';
method: boolean;
shorthand: boolean;
value: Node;
decorators: ?Array<Decorator>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'RestElement';
_RestElement: void;
argument: Pattern;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ReturnStatement';
_ReturnStatement: void;
argument: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'SequenceExpression';
_SequenceExpression: void;
expression: Array<Expression>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'SpreadElement';
_SpreadElement: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'SpreadProperty';
_SpreadProperty: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'Super';
_Super: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'SwitchCase';
_SwitchCase: void;
consequent: Array<Statement>;
test: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'SwitchStatement';
_SwitchStatement: void;
cases: Array<SwitchCase>;
discriminant: Expression;
lexical: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TaggedTemplateExpression';
_TaggedTemplateExpression: void;
quasi: TemplateLiteral;
tag: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TemplateElement';
_TemplateElement: void;
tail: boolean;
value: {cooked: string, raw: string};
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TemplateLiteral';
_TemplateLiteral: void;
expressions: Array<Expression>;
quasis: Array<TemplateElement>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ThisExpression';
_ThisExpression: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ThrowStatement';
_ThrowStatement: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TryStatement';
_TryStatement: void;
block: BlockStatement;
finalizer: ?BlockStatement;
guardedHandlers: Array<CatchClause>;
handler: ?CatchClause;
handlers: ?Array<CatchClause>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'UnaryExpression';
_UnaryExpression: void;
argument: Expression;
operator: UnaryOperator;
prefix: true;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'UpdateExpression';
_UpdateExpression: void;
argument: Expression;
operator: UpdateOperator;
prefix: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'VariableDeclaration';
_VariableDeclaration: void;
declarations: Array<VariableDeclarator>;
kind: 'var' | 'let' | 'const';
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'VariableDeclarator';
_VariableDeclarator: void;
id: Pattern;
init: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'WhileStatement';
_WhileStatement: void;
body: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'WithStatement';
_WithStatement: void;
body: Statement;
object: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'YieldExpression';
_YieldExpression: void;
argument: ?Expression;
delegate: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ExportAllDeclaration';
_ExportAllDeclaration: void;
exported: Node;
source: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ExportDefaultDeclaration';
_ExportDefaultDeclaration: void;
declaration: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ExportNamedDeclaration';
_ExportNamedDeclaration: void;
declaration: Node;
source: Literal;
specifiers: Array<Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ExportDefaultSpecifier';
_ExportDefaultSpecifier: void;
exported: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ExportNamespaceSpecifier';
_ExportNamespaceSpecifier: void;
exported: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ExportSpecifier';
_ExportSpecifier: void;
local: Node;
exported: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'AnyTypeAnnotation';
_AnyTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ArrayTypeAnnotation';
_ArrayTypeAnnotation: void;
elementType: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BooleanLiteralTypeAnnotation';
_BooleanLiteralTypeAnnotation: void;
raw: string;
value: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BooleanTypeAnnotation';
_BooleanTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ClassImplements';
_ClassImplements: void;
id: Identifier;
typeParameters: ?TypeParameterInstantiation;
superClass: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ClassProperty';
_ClassProperty: void;
computed: boolean;
key: Node;
static: boolean;
typeAnnotation: ?TypeAnnotation;
value: ?Expression;
decorators: Array<Decorator>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DeclareClass';
_DeclareClass: void;
body: ObjectTypeAnnotation;
extends: Array<InterfaceExtends>;
id: Identifier;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DeclareFunction';
_DeclareFunction: void;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DeclareModule';
_DeclareModule: void;
body: BlockStatement;
id: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DeclareVariable';
_DeclareVariable: void;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'FunctionTypeAnnotation';
_FunctionTypeAnnotation: void;
params: Array<FunctionTypeParam>;
rest: ?FunctionTypeParam;
returnType: Type;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'FunctionTypeParam';
_FunctionTypeParam: void;
name: Identifier;
optional: boolean;
typeAnnotation: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'GenericTypeAnnotation';
_GenericTypeAnnotation: void;
id: Node;
typeParameters: ?TypeParameterInstantiation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'InterfaceExtends';
_InterfaceExtends: void;
id: Identifier;
typeParameters: ?TypeParameterInstantiation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'InterfaceDeclaration';
_InterfaceDeclaration: void;
body: ObjectTypeAnnotation;
extends: Array<InterfaceExtends>;
id: Identifier;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'IntersectionTypeAnnotation';
_IntersectionTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'MixedTypeAnnotation';
_MixedTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'NullableTypeAnnotation';
_NullableTypeAnnotation: void;
typeAnnotation: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'NumberLiteralTypeAnnotation';
_NumberLiteralTypeAnnotation: void;
raw: string;
value: number;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'NumberTypeAnnotation';
_NumberTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'StringLiteralTypeAnnotation';
_StringLiteralTypeAnnotation: void;
raw: string;
value: string;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'StringTypeAnnotation';
_StringTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TupleTypeAnnotation';
_TupleTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TypeofTypeAnnotation';
_TypeofTypeAnnotation: void;
argument: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TypeAlias';
_TypeAlias: void;
id: Identifier;
right: Type;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TypeAnnotation';
_TypeAnnotation: void;
typeAnnotation: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TypeCastExpression';
_TypeCastExpression: void;
expression: Expression;
typeAnnotation: TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TypeParameterDeclaration';
_TypeParameterDeclaration: void;
params: Array<Identifier>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TypeParameterInstantiation';
_TypeParameterInstantiation: void;
params: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectTypeAnnotation';
_ObjectTypeAnnotation: void;
callProperties: Array<ObjectTypeCallProperty>;
indexers: Array<ObjectTypeIndexer>;
properties: Array<ObjectTypeProperty>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectTypeCallProperty';
_ObjectTypeCallProperty: void;
static: boolean;
value: FunctionTypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectTypeIndexer';
_ObjectTypeIndexer: void;
id: Identifier;
key: Type;
value: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectTypeProperty';
_ObjectTypeProperty: void;
key: Node;
optional: boolean;
value: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'QualifiedTypeIdentifier';
_QualifiedTypeIdentifier: void;
id: Identifier;
qualification: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'UnionTypeAnnotation';
_UnionTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'VoidTypeAnnotation';
_VoidTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXAttribute';
_JSXAttribute: void;
name: Node;
value: ?Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXClosingElement';
_JSXClosingElement: void;
name: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXElement';
_JSXElement: void;
children: Array<Node>;
closingElement: ?JSXClosingElement;
openingElement: JSXOpeningElement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXEmptyExpression';
_JSXEmptyExpression: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXExpressionContainer';
_JSXExpressionContainer: void;
expression: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXIdentifier';
_JSXIdentifier: void;
name: string;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXMemberExpression';
_JSXMemberExpression: void;
computed: boolean;
object: Node;
property: JSXIdentifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXNamespacedName';
_JSXNamespacedName: void;
name: JSXIdentifier;
namespace: JSXIdentifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXOpeningElement';
_JSXOpeningElement: void;
attributes: Array<Node>;
name: Array<Node>;
selfClosing: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'JSXSpreadAttribute';
_JSXSpreadAttribute: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Pattern = {
type: 'ArrayPattern';
_ArrayPattern: void;
elements: Array<?Node>;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'AssignmentPattern';
_AssignmentPattern: void;
left: Pattern;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'Identifier';
_Identifier: void;
name: string;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectPattern';
_ObjectPattern: void;
properties: Array<Node>;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'RestElement';
_RestElement: void;
argument: Pattern;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Statement = {
type: 'BlockStatement';
_BlockStatement: void;
body: Array<Statement>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BreakStatement';
_BreakStatement: void;
label: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ContinueStatement';
_ContinueStatement: void;
label: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DoWhileStatement';
_DoWhileStatement: void;
body: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'EmptyStatement';
_EmptyStatement: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ExpressionStatement';
_ExpressionStatement: void;
expression: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ForInStatement';
_ForInStatement: void;
body: Statement;
left: Node;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ForOfStatement';
_ForOfStatement: void;
body: Statement;
left: Node;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ForStatement';
_ForStatement: void;
init: ?Node;
test: ?Expression;
update: ?Expression;
body: Statement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'IfStatement';
_IfStatement: void;
alternate: ?Statement;
consequent: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'LabeledStatement';
_LabeledStatement: void;
body: Statement;
label: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ReturnStatement';
_ReturnStatement: void;
argument: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'SwitchStatement';
_SwitchStatement: void;
cases: Array<SwitchCase>;
discriminant: Expression;
lexical: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ThrowStatement';
_ThrowStatement: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TryStatement';
_TryStatement: void;
block: BlockStatement;
finalizer: ?BlockStatement;
guardedHandlers: Array<CatchClause>;
handler: ?CatchClause;
handlers: ?Array<CatchClause>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'WhileStatement';
_WhileStatement: void;
body: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'WithStatement';
_WithStatement: void;
body: Statement;
object: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DeclareClass';
_DeclareClass: void;
body: ObjectTypeAnnotation;
extends: Array<InterfaceExtends>;
id: Identifier;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DeclareFunction';
_DeclareFunction: void;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DeclareModule';
_DeclareModule: void;
body: BlockStatement;
id: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'DeclareVariable';
_DeclareVariable: void;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'InterfaceDeclaration';
_InterfaceDeclaration: void;
body: ObjectTypeAnnotation;
extends: Array<InterfaceExtends>;
id: Identifier;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TypeAlias';
_TypeAlias: void;
id: Identifier;
right: Type;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Type = {
type: 'AnyTypeAnnotation';
_AnyTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ArrayTypeAnnotation';
_ArrayTypeAnnotation: void;
elementType: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BooleanLiteralTypeAnnotation';
_BooleanLiteralTypeAnnotation: void;
raw: string;
value: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'BooleanTypeAnnotation';
_BooleanTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'FunctionTypeAnnotation';
_FunctionTypeAnnotation: void;
params: Array<FunctionTypeParam>;
rest: ?FunctionTypeParam;
returnType: Type;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'GenericTypeAnnotation';
_GenericTypeAnnotation: void;
id: Node;
typeParameters: ?TypeParameterInstantiation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'IntersectionTypeAnnotation';
_IntersectionTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'MixedTypeAnnotation';
_MixedTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'NullableTypeAnnotation';
_NullableTypeAnnotation: void;
typeAnnotation: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'NumberLiteralTypeAnnotation';
_NumberLiteralTypeAnnotation: void;
raw: string;
value: number;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'NumberTypeAnnotation';
_NumberTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'StringLiteralTypeAnnotation';
_StringLiteralTypeAnnotation: void;
raw: string;
value: string;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'StringTypeAnnotation';
_StringTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'TupleTypeAnnotation';
_TupleTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'ObjectTypeAnnotation';
_ObjectTypeAnnotation: void;
callProperties: Array<ObjectTypeCallProperty>;
indexers: Array<ObjectTypeIndexer>;
properties: Array<ObjectTypeProperty>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'UnionTypeAnnotation';
_UnionTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
} | {
type: 'VoidTypeAnnotation';
_VoidTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// Concrete Types. Nothing can extend these.
export type CommentLine = {
type: 'CommentLine';
_CommentLine: void;
value: string;
end: number;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
};
export type CommentBlock = {
type: 'CommentBlock';
_CommentBlock: void;
value: string;
end: number;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
};
// Babel concrete types.
export type ArrayExpression = {
type: 'ArrayExpression';
_ArrayExpression: void;
elements: Array<?Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ArrayPattern = {
type: 'ArrayPattern';
_ArrayPattern: void;
elements: Array<?Node>;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ArrowFunctionExpression = {
type: 'ArrowFunctionExpression';
_ArrowFunctionExpression: void;
body: Node;
id: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
};
type AssignmentOperator =
'=' |
'+=' |
'-=' |
'*=' |
'/=' |
'%=' |
'<<=' |
'>>=' |
'>>>=' |
'|=' |
'^=' |
'&=';
export type AssignmentExpression = {
type: 'AssignmentExpression';
_AssignmentExpression: void;
left: Pattern;
operator: AssignmentOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type AssignmentPattern = {
type: 'AssignmentPattern';
_AssignmentPattern: void;
left: Pattern;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type AwaitExpression = {
type: 'AwaitExpression';
_AwaitExpression: void;
all: boolean;
argument: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
type BinaryOperator =
'==' |
'!=' |
'===' |
'!==' |
'<' |
'<=' |
'>' |
'>=' |
'<<' |
'>>' |
'>>>' |
'+' |
'-' |
'*' |
'/' |
'%' |
'&' |
'|' |
'^' |
'in' |
'instanceof' |
'..';
export type BinaryExpression = {
type: 'BinaryExpression';
_BinaryExpression: void;
left: Expression;
operator: BinaryOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: What is this?
export type BindExpression = {
type: 'BindExpression';
_BindExpression: void;
callee: Node;
object: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type BlockStatement = {
type: 'BlockStatement';
_BlockStatement: void;
body: Array<Statement>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type BreakStatement = {
type: 'BreakStatement';
_BreakStatement: void;
label: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type CallExpression = {
type: 'CallExpression';
_CallExpression: void;
arguments: Array<Node>;
callee: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type CatchClause = {
type: 'CatchClause';
_CatchClause: void;
body: BlockStatement;
param: Pattern;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ClassBody = {
type: 'ClassBody';
_ClassBody: void;
body: Array<Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ClassDeclaration = {
type: 'ClassDeclaration';
_ClassDeclaration: void;
body: ClassBody;
id: ?Identifier;
superClass: ?Expression;
decorators: any;
superTypeParameters: any;
typeParameters: any;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ClassExpression = {
type: 'ClassExpression';
_ClassExpression: void;
body: ClassBody;
id: ?Identifier;
superClass: ?Expression;
decorators: any;
superTypeParameters: any;
typeParameters: any;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ComprehensionBlock = {
type: 'ComprehensionBlock';
_ComprehensionBlock: void;
each: boolean;
left: Pattern;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ComprehensionExpression = {
type: 'ComprehensionExpression';
_ComprehensionExpression: void;
body: Expression;
blocks: Array<ComprehensionBlock>;
filter: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ConditionalExpression = {
type: 'ConditionalExpression';
_ConditionalExpression: void;
alternate: Expression;
consequent: Expression;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ContinueStatement = {
type: 'ContinueStatement';
_ContinueStatement: void;
label: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type Decorator = {
type: 'Decorator';
_Decorator: void;
expression: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type DebuggerStatement = {
type: 'DebuggerStatement';
_DebuggerStatement: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type DoWhileStatement = {
type: 'DoWhileStatement';
_DoWhileStatement: void;
body: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type DoExpression = {
type: 'DoExpression';
_DoExpression: void;
body: Statement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type EmptyStatement = {
type: 'EmptyStatement';
_EmptyStatement: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ExpressionStatement = {
type: 'ExpressionStatement';
_ExpressionStatement: void;
expression: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type File = {
type: 'File';
_File: void;
program: Program;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ForInStatement = {
type: 'ForInStatement';
_ForInStatement: void;
body: Statement;
left: Node;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ForOfStatement = {
type: 'ForOfStatement';
_ForOfStatement: void;
body: Statement;
left: Node;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ForStatement = {
type: 'ForStatement';
_ForStatement: void;
init: ?Node;
test: ?Expression;
update: ?Expression;
body: Statement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type FunctionDeclaration = {
type: 'FunctionDeclaration';
_FunctionDeclaration: void;
body: BlockStatement;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
};
export type FunctionExpression = {
type: 'FunctionExpression';
_FunctionExpression: void;
body: BlockStatement;
id: ?Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
async: boolean;
defaults: Array<?Expression>;
expression: boolean;
generator: boolean;
params: Array<Pattern>;
rest: ?Identifier;
returnType: ?TypeAnnotation;
typeParameters: ?TypeParameterDeclaration;
};
export type Identifier = {
type: 'Identifier';
_Identifier: void;
name: string;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type IfStatement = {
type: 'IfStatement';
_IfStatement: void;
alternate: ?Statement;
consequent: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ImportDefaultSpecifier = {
type: 'ImportDefaultSpecifier';
_ImportDefaultSpecifier: void;
local: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ImportNamespaceSpecifier = {
type: 'ImportNamespaceSpecifier';
_ImportNamespaceSpecifier: void;
local: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ImportDeclaration = {
type: 'ImportDeclaration';
_ImportDeclaration: void;
specifiers: Array<Node>;
source: Literal;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ImportSpecifier = {
type: 'ImportSpecifier';
_ImportSpecifier: void;
imported: Node;
local: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type LabeledStatement = {
type: 'LabeledStatement';
_LabeledStatement: void;
body: Statement;
label: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Literal = {
type: 'Literal';
_Literal: void;
raw: string;
regex: ?{pattern: string, flags: string};
value: ?(string | boolean | number | RegExp);
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
type LogicalOperator = '||' | '&&';
export type LogicalExpression = {
type: 'LogicalExpression';
_LogicalExpression: void;
left: Expression;
operator: LogicalOperator;
right: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type MemberExpression = {
type: 'MemberExpression';
_MemberExpression: void;
computed: boolean;
object: Expression;
property: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type MetaProperty = {
type: 'MetaProperty';
_MetaProperty: void;
meta: Node;
property: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type MethodDefinition = {
type: 'MethodDefinition';
_MethodDefinition: void;
computed: boolean;
key: Node;
kind: 'constructor' | 'method' | 'get' | 'set';
static: boolean;
value: FunctionExpression;
decorators: ?Array<Decorator>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type NewExpression = {
type: 'NewExpression';
_NewExpression: void;
arguments: Array<Node>;
callee: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Noop = {
type: 'Noop';
_Noop: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ObjectExpression = {
type: 'ObjectExpression';
_ObjectExpression: void;
properties: Array<Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ObjectPattern = {
type: 'ObjectPattern';
_ObjectPattern: void;
properties: Array<Node>;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Program = {
type: 'Program';
_Program: void;
body: Array<Statement>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Property = {
type: 'Property';
_Property: void;
computed: boolean;
key: Node;
kind: 'init' | 'get' | 'set';
method: boolean;
shorthand: boolean;
value: Node;
decorators: ?Array<Decorator>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type RestElement = {
type: 'RestElement';
_RestElement: void;
argument: Pattern;
typeAnnotation: ?TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ReturnStatement = {
type: 'ReturnStatement';
_ReturnStatement: void;
argument: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type SequenceExpression = {
type: 'SequenceExpression';
_SequenceExpression: void;
expression: Array<Expression>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type SpreadElement = {
type: 'SpreadElement';
_SpreadElement: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type SpreadProperty = {
type: 'SpreadProperty';
_SpreadProperty: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type Super = {
type: 'Super';
_Super: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type SwitchCase = {
type: 'SwitchCase';
_SwitchCase: void;
consequent: Array<Statement>;
test: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type SwitchStatement = {
type: 'SwitchStatement';
_SwitchStatement: void;
cases: Array<SwitchCase>;
discriminant: Expression;
lexical: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TaggedTemplateExpression = {
type: 'TaggedTemplateExpression';
_TaggedTemplateExpression: void;
quasi: TemplateLiteral;
tag: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TemplateElement = {
type: 'TemplateElement';
_TemplateElement: void;
tail: boolean;
value: {cooked: string, raw: string};
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TemplateLiteral = {
type: 'TemplateLiteral';
_TemplateLiteral: void;
expressions: Array<Expression>;
quasis: Array<TemplateElement>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ThisExpression = {
type: 'ThisExpression';
_ThisExpression: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ThrowStatement = {
type: 'ThrowStatement';
_ThrowStatement: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TryStatement = {
type: 'TryStatement';
_TryStatement: void;
block: BlockStatement;
finalizer: ?BlockStatement;
guardedHandlers: Array<CatchClause>;
handler: ?CatchClause;
handlers: ?Array<CatchClause>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
type UnaryOperator = '-' | '+' | '!' | '~' | 'typeof' | 'void' | 'delete';
export type UnaryExpression = {
type: 'UnaryExpression';
_UnaryExpression: void;
argument: Expression;
operator: UnaryOperator;
prefix: true;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
type UpdateOperator = '++' | '--';
export type UpdateExpression = {
type: 'UpdateExpression';
_UpdateExpression: void;
argument: Expression;
operator: UpdateOperator;
prefix: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type VariableDeclaration = {
type: 'VariableDeclaration';
_VariableDeclaration: void;
declarations: Array<VariableDeclarator>;
kind: 'var' | 'let' | 'const';
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type VariableDeclarator = {
type: 'VariableDeclarator';
_VariableDeclarator: void;
id: Pattern;
init: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type WhileStatement = {
type: 'WhileStatement';
_WhileStatement: void;
body: Statement;
test: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type WithStatement = {
type: 'WithStatement';
_WithStatement: void;
body: Statement;
object: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type YieldExpression = {
type: 'YieldExpression';
_YieldExpression: void;
argument: ?Expression;
delegate: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ExportAllDeclaration = {
type: 'ExportAllDeclaration';
_ExportAllDeclaration: void;
exported: Node;
source: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ExportDefaultDeclaration = {
type: 'ExportDefaultDeclaration';
_ExportDefaultDeclaration: void;
declaration: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ExportNamedDeclaration = {
type: 'ExportNamedDeclaration';
_ExportNamedDeclaration: void;
declaration: Node;
source: Literal;
specifiers: Array<Node>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ExportDefaultSpecifier = {
type: 'ExportDefaultSpecifier';
_ExportDefaultSpecifier: void;
exported: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ExportNamespaceSpecifier = {
type: 'ExportNamespaceSpecifier';
_ExportNamespaceSpecifier: void;
exported: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type ExportSpecifier = {
type: 'ExportSpecifier';
_ExportSpecifier: void;
local: Node;
exported: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type AnyTypeAnnotation = {
type: 'AnyTypeAnnotation';
_AnyTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ArrayTypeAnnotation = {
type: 'ArrayTypeAnnotation';
_ArrayTypeAnnotation: void;
elementType: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type BooleanLiteralTypeAnnotation = {
type: 'BooleanLiteralTypeAnnotation';
_BooleanLiteralTypeAnnotation: void;
raw: string;
value: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type BooleanTypeAnnotation = {
type: 'BooleanTypeAnnotation';
_BooleanTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ClassImplements = {
type: 'ClassImplements';
_ClassImplements: void;
id: Identifier;
typeParameters: ?TypeParameterInstantiation;
superClass: ?Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ClassProperty = {
type: 'ClassProperty';
_ClassProperty: void;
computed: boolean;
key: Node;
static: boolean;
typeAnnotation: ?TypeAnnotation;
value: ?Expression;
decorators: Array<Decorator>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type DeclareClass = {
type: 'DeclareClass';
_DeclareClass: void;
body: ObjectTypeAnnotation;
extends: Array<InterfaceExtends>;
id: Identifier;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type DeclareFunction = {
type: 'DeclareFunction';
_DeclareFunction: void;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type DeclareModule = {
type: 'DeclareModule';
_DeclareModule: void;
body: BlockStatement;
id: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
// TODO: Make this correct.
export type DeclareVariable = {
type: 'DeclareVariable';
_DeclareVariable: void;
id: Identifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type FunctionTypeAnnotation = {
type: 'FunctionTypeAnnotation';
_FunctionTypeAnnotation: void;
params: Array<FunctionTypeParam>;
rest: ?FunctionTypeParam;
returnType: Type;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type FunctionTypeParam = {
type: 'FunctionTypeParam';
_FunctionTypeParam: void;
name: Identifier;
optional: boolean;
typeAnnotation: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type GenericTypeAnnotation = {
type: 'GenericTypeAnnotation';
_GenericTypeAnnotation: void;
id: Node;
typeParameters: ?TypeParameterInstantiation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type InterfaceExtends = {
type: 'InterfaceExtends';
_InterfaceExtends: void;
id: Identifier;
typeParameters: ?TypeParameterInstantiation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type InterfaceDeclaration = {
type: 'InterfaceDeclaration';
_InterfaceDeclaration: void;
body: ObjectTypeAnnotation;
extends: Array<InterfaceExtends>;
id: Identifier;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type IntersectionTypeAnnotation = {
type: 'IntersectionTypeAnnotation';
_IntersectionTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type MixedTypeAnnotation = {
type: 'MixedTypeAnnotation';
_MixedTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type NullableTypeAnnotation = {
type: 'NullableTypeAnnotation';
_NullableTypeAnnotation: void;
typeAnnotation: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type NumberLiteralTypeAnnotation = {
type: 'NumberLiteralTypeAnnotation';
_NumberLiteralTypeAnnotation: void;
raw: string;
value: number;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type NumberTypeAnnotation = {
type: 'NumberTypeAnnotation';
_NumberTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type StringLiteralTypeAnnotation = {
type: 'StringLiteralTypeAnnotation';
_StringLiteralTypeAnnotation: void;
raw: string;
value: string;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type StringTypeAnnotation = {
type: 'StringTypeAnnotation';
_StringTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TupleTypeAnnotation = {
type: 'TupleTypeAnnotation';
_TupleTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TypeofTypeAnnotation = {
type: 'TypeofTypeAnnotation';
_TypeofTypeAnnotation: void;
argument: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TypeAlias = {
type: 'TypeAlias';
_TypeAlias: void;
id: Identifier;
right: Type;
typeParameters: ?TypeParameterDeclaration;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TypeAnnotation = {
type: 'TypeAnnotation';
_TypeAnnotation: void;
typeAnnotation: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TypeCastExpression = {
type: 'TypeCastExpression';
_TypeCastExpression: void;
expression: Expression;
typeAnnotation: TypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TypeParameterDeclaration = {
type: 'TypeParameterDeclaration';
_TypeParameterDeclaration: void;
params: Array<Identifier>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type TypeParameterInstantiation = {
type: 'TypeParameterInstantiation';
_TypeParameterInstantiation: void;
params: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ObjectTypeAnnotation = {
type: 'ObjectTypeAnnotation';
_ObjectTypeAnnotation: void;
callProperties: Array<ObjectTypeCallProperty>;
indexers: Array<ObjectTypeIndexer>;
properties: Array<ObjectTypeProperty>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ObjectTypeCallProperty = {
type: 'ObjectTypeCallProperty';
_ObjectTypeCallProperty: void;
static: boolean;
value: FunctionTypeAnnotation;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ObjectTypeIndexer = {
type: 'ObjectTypeIndexer';
_ObjectTypeIndexer: void;
id: Identifier;
key: Type;
value: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type ObjectTypeProperty = {
type: 'ObjectTypeProperty';
_ObjectTypeProperty: void;
key: Node;
optional: boolean;
value: Type;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type QualifiedTypeIdentifier = {
type: 'QualifiedTypeIdentifier';
_QualifiedTypeIdentifier: void;
id: Identifier;
qualification: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type UnionTypeAnnotation = {
type: 'UnionTypeAnnotation';
_UnionTypeAnnotation: void;
types: Array<Type>;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type VoidTypeAnnotation = {
type: 'VoidTypeAnnotation';
_VoidTypeAnnotation: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXAttribute = {
type: 'JSXAttribute';
_JSXAttribute: void;
name: Node;
value: ?Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXClosingElement = {
type: 'JSXClosingElement';
_JSXClosingElement: void;
name: Node;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXElement = {
type: 'JSXElement';
_JSXElement: void;
children: Array<Node>;
closingElement: ?JSXClosingElement;
openingElement: JSXOpeningElement;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXEmptyExpression = {
type: 'JSXEmptyExpression';
_JSXEmptyExpression: void;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXExpressionContainer = {
type: 'JSXExpressionContainer';
_JSXExpressionContainer: void;
expression: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXIdentifier = {
type: 'JSXIdentifier';
_JSXIdentifier: void;
name: string;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXMemberExpression = {
type: 'JSXMemberExpression';
_JSXMemberExpression: void;
computed: boolean;
object: Node;
property: JSXIdentifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXNamespacedName = {
type: 'JSXNamespacedName';
_JSXNamespacedName: void;
name: JSXIdentifier;
namespace: JSXIdentifier;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXOpeningElement = {
type: 'JSXOpeningElement';
_JSXOpeningElement: void;
attributes: Array<Node>;
name: Array<Node>;
selfClosing: boolean;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};
export type JSXSpreadAttribute = {
type: 'JSXSpreadAttribute';
_JSXSpreadAttribute: void;
argument: Expression;
end: number;
innerComments: ?Array<Comment>;
leadingComments: ?Array<Comment>;
loc: {
end: {column: number, line: number},
start: {column: number, line: number},
};
start: number;
trailingComments: ?Array<Comment>;
};