import { Scope } from "./scope";
import { Variable } from "./variable";
import * as ESTree from "estree";
export declare class ScopeManager {
    readonly __options: any;
    constructor(__options: any);
    globalScope: Scope | null;
    __currentScope: Scope | null;
    readonly scopes: Scope[];
    readonly __nodeToScope: WeakMap<any, Scope[]>;
    readonly __declaredVariables: WeakMap<any, Variable[]>;
    __useDirective(): any;
    __isOptimistic(): any;
    __ignoreEval(): any;
    __isNodejsScope(): any;
    isModule(): boolean;
    isImpliedStrict(): any;
    isStrictModeSupported(): boolean;
    __get(node: ESTree.Node): Scope<ESTree.Node>[] | undefined;
    getDeclaredVariables(node: ESTree.Node[]): Variable[];
    acquire(node: ESTree.Node, inner: boolean): Scope | null;
    acquireAll(node: ESTree.Node): Scope[] | undefined;
    release(node: ESTree.Node, inner: boolean): Scope | null;
    attach(): void;
    detach(): void;
    __nestScope(scope: Scope): Scope<ESTree.Node>;
    __nestGlobalScope(node: ESTree.Node): Scope<ESTree.Node>;
    __nestBlockScope(node: ESTree.Node): Scope<ESTree.Node>;
    __nestFunctionScope(node: ESTree.Function | ESTree.Program, isMethodDefinition: boolean): Scope<ESTree.Node>;
    __nestForScope(node: ESTree.Node): Scope<ESTree.Node>;
    __nestCatchScope(node: ESTree.Node): Scope<ESTree.Node>;
    __nestWithScope(node: ESTree.Node): Scope<ESTree.Node>;
    __nestClassScope(node: ESTree.Node): Scope<ESTree.Node>;
    __nestSwitchScope(node: ESTree.SwitchStatement): Scope<ESTree.Node>;
    __nestModuleScope(node: ESTree.Node): Scope<ESTree.Node>;
    __nestTDZScope(node: ESTree.Node): Scope<ESTree.Node>;
    __nestFunctionExpressionNameScope(node: ESTree.FunctionExpression): Scope<ESTree.Node>;
    __isES6(): boolean;
}