import * as esrecurse from "esrecurse";
import * as ESTree from "estree";
export declare type AssignmentType = ESTree.AssignmentPattern | ESTree.AssignmentExpression;
export interface ICallbackOption {
topLevel: boolean;
rest: boolean;
assignments: AssignmentType[];
}
export declare type PatternVisitorCallback = (id: ESTree.Identifier, option: ICallbackOption) => void;
export declare class PatternVisitor extends esrecurse.Visitor {
static isPattern(node: ESTree.Node): boolean;
rootPattern: any;
callback: PatternVisitorCallback;
assignments: AssignmentType[];
rightHandNodes: any[];
restElements: any[];
constructor(options: esrecurse.VisitorOption, rootPattern: ESTree.Node, callback: PatternVisitorCallback);
Identifier(pattern: ESTree.Identifier): void;
Property(property: ESTree.Property): void;
ArrayPattern(pattern: ESTree.ArrayPattern): void;
AssignmentPattern(pattern: ESTree.AssignmentPattern): void;
RestElement(pattern: ESTree.RestElement): void;
MemberExpression(node: ESTree.MemberExpression): void;
SpreadElement(node: ESTree.SpreadElement): void;
ArrayExpression(node: ESTree.ArrayExpression): void;
AssignmentExpression(node: ESTree.AssignmentExpression): void;
CallExpression(node: ESTree.CallExpression): void;
}