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;
}