import * as esrecurse from "esrecurse";
import { ImplicitGlobal } from "./reference";
import { VariableType } from "./variable";
import { PatternVisitorCallback, AssignmentType } from "./patternVisitor";
import { ScopeManager } from "./scopeManager";
import { Scope } from "./scope";
import * as ESTree from "estree";
export declare class Referencer extends esrecurse.Visitor {
    readonly options: esrecurse.VisitorOption;
    readonly scopeManager: ScopeManager;
    parent: Referencer | null;
    isInnerMethodDefinition: boolean;
    exportingSource: string | null;
    isExportingFromLocal: boolean;
    constructor(options: esrecurse.VisitorOption, scopeManager: ScopeManager);
    readonly currentScope: Scope<ESTree.Node> | null;
    close(node: ESTree.Node): void;
    pushInnerMethodDefinition(isInnerMethodDefinition: boolean): boolean;
    popInnerMethodDefinition(isInnerMethodDefinition: boolean): void;
    materializeTDZScope(node: ESTree.Node, iterationNode: ESTree.ForOfStatement | ESTree.ForInStatement): void;
    materializeIterationScope(node: ESTree.ForInStatement | ESTree.ForOfStatement): void;
    referencingDefaultValue(pattern: ESTree.Pattern, assignments: AssignmentType[], maybeImplicitGlobal?: ImplicitGlobal, init?: boolean): void;
    visitPattern(node: ESTree.Pattern, options: {
        processRightHandNodes: boolean;
    } | undefined, callback: PatternVisitorCallback): void;
    visitFunction(node: ESTree.Function): void;
    visitClass(node: ESTree.Class): void;
    visitProperty(node: any): void;
    visitForIn(node: ESTree.ForInStatement | ESTree.ForOfStatement): void;
    visitVariableDeclaration(variableTargetScope: Scope, type: VariableType, node: ESTree.VariableDeclaration, index: number, fromTDZ?: boolean): void;
    AssignmentExpression(node: ESTree.AssignmentExpression): void;
    CatchClause(node: ESTree.CatchClause): void;
    Program(node: ESTree.Program): void;
    Identifier(node: ESTree.Identifier): void;
    UpdateExpression(node: ESTree.UpdateExpression): void;
    MemberExpression(node: ESTree.MemberExpression): void;
    Property(node: ESTree.Property): void;
    MethodDefinition(node: ESTree.MethodDefinition): void;
    BreakStatement(): void;
    ContinueStatement(): void;
    LabeledStatement(node: ESTree.LabeledStatement): void;
    ForStatement(node: ESTree.ForStatement): void;
    ClassExpression(node: ESTree.ClassExpression): void;
    ClassDeclaration(node: ESTree.ClassDeclaration): void;
    CallExpression(node: ESTree.CallExpression): void;
    BlockStatement(node: ESTree.BlockStatement): void;
    ThisExpression(): void;
    WithStatement(node: ESTree.WithStatement): void;
    VariableDeclaration(node: ESTree.VariableDeclaration): void;
    SwitchStatement(node: ESTree.SwitchStatement): void;
    FunctionDeclaration(node: ESTree.FunctionDeclaration): void;
    FunctionExpression(node: ESTree.FunctionExpression): void;
    ForOfStatement(node: ESTree.ForOfStatement): void;
    ForInStatement(node: ESTree.ForInStatement): void;
    ArrowFunctionExpression(node: ESTree.ArrowFunctionExpression): void;
    ImportDeclaration(node: ESTree.ImportDeclaration): void;
    visitExportDeclaration(node: ESTree.ExportNamedDeclaration): void;
    ExportNamedDeclaration(node: ESTree.ExportNamedDeclaration): void;
    ExportDefaultDeclaration(node: ESTree.ExportDefaultDeclaration): void;
    ExportAllDeclaration(node: ESTree.ExportAllDeclaration): void;
    ExportSpecifier(node: ESTree.ExportSpecifier): void;
    MetaProperty(): void;
}