declare module "estraverse" {
import * as ESTree from 'estree';
export enum Syntax {
AssignmentExpression = 'AssignmentExpression',
AssignmentPattern = 'AssignmentPattern',
ArrayExpression = 'ArrayExpression',
ArrayPattern = 'ArrayPattern',
ArrowFunctionExpression = 'ArrowFunctionExpression',
AwaitExpression = 'AwaitExpression', // CAUTION: It's deferred to ES7.
BlockStatement = 'BlockStatement',
BinaryExpression = 'BinaryExpression',
BreakStatement = 'BreakStatement',
CallExpression = 'CallExpression',
CatchClause = 'CatchClause',
ClassBody = 'ClassBody',
ClassDeclaration = 'ClassDeclaration',
ClassExpression = 'ClassExpression',
ComprehensionBlock = 'ComprehensionBlock', // CAUTION: It's deferred to ES7.
ComprehensionExpression = 'ComprehensionExpression', // CAUTION: It's deferred to ES7.
ConditionalExpression = 'ConditionalExpression',
ContinueStatement = 'ContinueStatement',
DebuggerStatement = 'DebuggerStatement',
DirectiveStatement = 'DirectiveStatement',
DoWhileStatement = 'DoWhileStatement',
EmptyStatement = 'EmptyStatement',
ExportAllDeclaration = 'ExportAllDeclaration',
ExportDefaultDeclaration = 'ExportDefaultDeclaration',
ExportNamedDeclaration = 'ExportNamedDeclaration',
ExportSpecifier = 'ExportSpecifier',
ExpressionStatement = 'ExpressionStatement',
ForStatement = 'ForStatement',
ForInStatement = 'ForInStatement',
ForOfStatement = 'ForOfStatement',
FunctionDeclaration = 'FunctionDeclaration',
FunctionExpression = 'FunctionExpression',
GeneratorExpression = 'GeneratorExpression', // CAUTION: It's deferred to ES7.
Identifier = 'Identifier',
IfStatement = 'IfStatement',
ImportDeclaration = 'ImportDeclaration',
ImportDefaultSpecifier = 'ImportDefaultSpecifier',
ImportNamespaceSpecifier = 'ImportNamespaceSpecifier',
ImportSpecifier = 'ImportSpecifier',
Literal = 'Literal',
LabeledStatement = 'LabeledStatement',
LogicalExpression = 'LogicalExpression',
MemberExpression = 'MemberExpression',
MetaProperty = 'MetaProperty',
MethodDefinition = 'MethodDefinition',
ModuleSpecifier = 'ModuleSpecifier',
NewExpression = 'NewExpression',
ObjectExpression = 'ObjectExpression',
ObjectPattern = 'ObjectPattern',
Program = 'Program',
Property = 'Property',
RestElement = 'RestElement',
ReturnStatement = 'ReturnStatement',
SequenceExpression = 'SequenceExpression',
SpreadElement = 'SpreadElement',
Super = 'Super',
SwitchStatement = 'SwitchStatement',
SwitchCase = 'SwitchCase',
TaggedTemplateExpression = 'TaggedTemplateExpression',
TemplateElement = 'TemplateElement',
TemplateLiteral = 'TemplateLiteral',
ThisExpression = 'ThisExpression',
ThrowStatement = 'ThrowStatement',
TryStatement = 'TryStatement',
UnaryExpression = 'UnaryExpression',
UpdateExpression = 'UpdateExpression',
VariableDeclaration = 'VariableDeclaration',
VariableDeclarator = 'VariableDeclarator',
WhileStatement = 'WhileStatement',
WithStatement = 'WithStatement',
YieldExpression = 'YieldExpression'
}
export type TraverseFunction = (node: ESTree.Node, parent: ESTree.Node) => void;
export interface TraverseOption {
enter?: TraverseFunction;
leave?: TraverseFunction;
fallback?: string;
}
function traverse(node: ESTree.Node, option: TraverseOption): void;
}