prettier/tests/flow/disjoint-union-perf/jsAst.js

637 lines
12 KiB
JavaScript

/**
* @flow
*/
export type Comment = {
loc: ?SourceLocation,
value: string,
leading: boolean,
trailing: boolean,
};
export type SourceLocation = {
start: SourcePosition,
end: SourcePosition,
source: ?string,
};
export type SourcePosition = {
line: number,
column: number,
};
export type File = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'File',
program: Program,
}
export type Program = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'Program',
body: Statement[],
}
export type BinaryOperator =
|'=='
| '!='
| '==='
| '!=='
| '<'
| '<='
| '>'
| '>='
| '<<'
| '>>'
| '>>>'
| '+'
| '-'
| '*'
| '/'
| '%'
| '&' // TODO Missing from the Parser API.
| '|'
| '^'
| 'in'
| 'instanceof'
| '..'
;
export type UnaryOperator =
| '-'
| '+'
| '!'
| '~'
| 'typeof'
| 'void'
| 'delete'
;
export type AssignmentOperator =
| '='
| '+='
| '-='
| '*='
| '/='
| '%='
| '<<='
| '>>='
| '>>>='
| '|='
| '^='
| '&='
;
export type UpdateOperator =
| '++'
| '--'
;
export type LogicalOperator =
| '&&'
| '||'
;
export type Node =
| EmptyStatement
| BlockStatement
| ExpressionStatement
| IfStatement
| BreakStatement
| ContinueStatement
| ReturnStatement
| ThrowStatement
| WhileStatement
| ForStatement
| ForInStatement
| TryStatement
| CatchClause
| Identifier
| Literal
| ThisExpression
| ArrayExpression
| ObjectExpreession
| Property
| FunctionExpression
| BinaryExpression
| UnaryExpression
| AssignmentExpression
| UpdateExpression
| LogicalExpression
| ConditionalExpression
| NewExpression
| CallExpression
| MemberExpression
| VariableDeclaration
| FunctionDeclaration
| VariableDeclarator
;
export type Statement =
| BlockStatement
| EmptyStatement
| ExpressionStatement
| IfStatement
| BreakStatement
| ContinueStatement
| ReturnStatement
| ThrowStatement
| WhileStatement
| ForStatement
| ForInStatement
| TryStatement
| Declaration
;
export type EmptyStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'EmptyStatement',
}
export type BlockStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'BlockStatement',
body: Statement[],
}
export type ExpressionStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ExpressionStatement',
expression: Expression,
}
export type IfStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'IfStatement',
test: Expression,
consequent: Statement,
alternate: ?Statement,
}
export type BreakStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'BreakStatement',
label: ?Identifier,
}
export type ContinueStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ContinueStatement',
label: ?Identifier,
}
export type ReturnStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ReturnStatement',
argument: ?Expression,
}
export type ThrowStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ThrowStatement',
argument: ?Expression,
}
export type WhileStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'WhileStatement',
test: Expression,
body: Statement,
}
export type ForStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ForStatement',
init: ?(VariableDeclaration | Expression),
test: ?Expression,
update: ?Expression,
body: Statement,
}
export type ForInStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ForInStatement',
left: VariableDeclaration | Expression,
right: Expression,
body: Statement,
}
export type TryStatement = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'TryStatement',
block: BlockStatement,
handler: ?CatchClause,
handlers: CatchClause[],
finalizer: ?BlockStatement,
};
export type CatchClause = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'CatchClause',
param: Pattern,
guard: ?Expression,
body: BlockStatement,
};
export type Expression =
| Identifier
| ThisExpression
| Literal
| FunctionExpression
| BinaryExpression
| UnaryExpression
| AssignmentExpression
| UpdateExpression
| LogicalExpression
| ConditionalExpression
| NewExpression
| CallExpression
| MemberExpression
| ArrayExpression
| ObjectExpreession
;
export type Identifier = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'Identifier',
name: string,
}
export type Literal = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'Literal',
value: ?(string | boolean | number | RegExp),
regex: ?{ pattern: string, flags: string },
}
export type ThisExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ThisExpression',
}
export type ArrayExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ArrayExpression',
elements: Expression[],
}
export type ObjectExpreession = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ObjectExpression',
properties: Property[],
}
export type Property = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'Property',
kind: 'init' | 'get' | 'set',
key: Literal | Identifier,
value: Expression,
};
export type FunctionExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'FunctionExpression',
id: ?Identifier,
params: Pattern[],
body: BlockStatement,
}
export type BinaryExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'BinaryExpression',
operator: BinaryOperator,
left: Expression,
right: Expression,
}
export type UnaryExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'UnaryExpression',
operator: UnaryOperator,
argument: Expression,
prefix: boolean,
};
export type AssignmentExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'AssignmentExpression',
operator: AssignmentOperator,
left: Pattern,
right: Expression,
};
export type UpdateExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'UpdateExpression',
operator: UpdateOperator,
argument: Expression,
prefix: boolean,
};
export type LogicalExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'LogicalExpression',
operator: LogicalOperator,
left: Expression,
right: Expression,
};
export type ConditionalExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'ConditionalExpression',
test: Expression,
consequent: Expression,
alternate: Expression,
};
export type NewExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'NewExpression',
callee: Expression,
arguments: Expression[],
};
export type CallExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'CallExpression',
callee: Expression,
arguments: Expression[],
};
export type MemberExpression = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'MemberExpression',
object: Expression,
property: Identifier | Expression,
computed: bool,
}
// ast-types exports all expressions as patterns.
// That seems not like it was intended.
export type Pattern =
| Identifier
;
export type Declaration =
| VariableDeclaration
| FunctionDeclaration
;
export type VariableDeclaration = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'VariableDeclaration',
kind: 'var' | 'let' | 'const',
declarations: VariableDeclarator[],
}
export type FunctionDeclaration = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'FunctionDeclaration',
id: Identifier,
body: BlockStatement,
params: Pattern[],
}
export type VariableDeclarator = {
source: ?string,
start: SourcePosition,
end: SourcePosition,
comments: ?Array<Comment>,
type: 'VariableDeclarator',
id: Pattern,
init: ?Expression,
}
const a : any = null;
export const builders : {
emptyStatement() : EmptyStatement,
blockStatement(
body: Statement[]
) : BlockStatement,
expressionStatement(
expression: Expression
) : ExpressionStatement,
ifStatement(
test: Expression,
consequent: Statement,
alternate?: Statement
) : IfStatement,
breakStatement(
label?: Identifier
) : BreakStatement,
continueStatement(
label?: Identifier
) : ContinueStatement,
returnStatement(
argument: ?Expression
) : ReturnStatement,
throwStatement(
argument: ?Expression
) : ThrowStatement,
whileStatement(
test: Expression,
body: Statement
) : WhileStatement,
forStatement(
init: ?(VariableDeclaration | Expression),
test: ?Expression,
update: ?Expression,
body: Statement
) : ForStatement,
forInStatement(
left: VariableDeclaration | Expression,
right: Expression,
body: Statement
) : ForInStatement,
tryStatement(
block: BlockStatement,
handler: ?CatchClause,
handlers: CatchClause[],
finalizer?: BlockStatement
) : TryStatement,
catchClause(
param: Pattern,
guard: ?Expression,
body: BlockStatement
) : CatchClause,
identifier(
name: string
) : Identifier,
literal(
value: ?(string | boolean | number | RegExp),
regex?: { pattern: string, flags: string }
) : Literal,
thisExpression() : ThisExpression,
arrayExpression(
elements: Expression[]
) : ArrayExpression,
objectExpreession(
properties: Property[]
) : ObjectExpreession,
property(
kind: 'init' | 'get' | 'set',
key: Literal | Identifier,
value: Expression
) : Property,
functionExpression(
id: ?Identifier,
params: Pattern[],
body: BlockStatement
) : FunctionExpression,
binaryExpression(
operator: BinaryOperator,
left: Expression,
right: Expression
) : BinaryExpression,
unaryExpression(
operator: UnaryOperator,
argument: Expression,
prefix: boolean
) : UnaryExpression,
assignmentExpression(
operator: AssignmentOperator,
left: Pattern,
right: Expression
) : AssignmentExpression,
updateExpression(
operator: UpdateOperator,
argument: Expression,
prefix: boolean
) : UpdateExpression,
logicalExpression(
operator: LogicalOperator,
left: Expression,
right: Expression
) : LogicalExpression,
conditionalExpression(
test: Expression,
consequent: Expression,
alternate: Expression
) : ConditionalExpression,
newExpression(
callee: Expression,
arguments: Expression[]
) : NewExpression,
callExpression(
callee: Expression,
arguments: Expression[]
) : CallExpression,
memberExpression(
object: Expression,
property: Identifier | Expression,
computed: bool
) : MemberExpression,
variableDeclaration(
kind: 'var' | 'let' | 'const',
declarations: VariableDeclarator[]
) : VariableDeclaration,
functionDeclaration(
id: Identifier,
body: BlockStatement,
params: Pattern[]
) : FunctionDeclaration,
variableDeclarator(
id: Pattern,
init?: Expression
) : VariableDeclarator,
} = a;