blob: 0adffd272e79760ed11efaa60d19588fa9bdb510 [file] [log] [blame]
import { TSESTree } from '@typescript-eslint/types';
import { FunctionScope } from './FunctionScope';
import { GlobalScope } from './GlobalScope';
import { ScopeType } from './ScopeType';
import { ScopeManager } from '../ScopeManager';
import { Scope } from './Scope';
import { ModuleScope } from './ModuleScope';
import { Definition } from '../definition';
import { Reference, ReferenceFlag, ReferenceImplicitGlobal } from '../referencer/Reference';
import { Variable } from '../variable';
import { TSModuleScope } from './TSModuleScope';
declare type VariableScope = GlobalScope | FunctionScope | ModuleScope | TSModuleScope;
declare abstract class ScopeBase<TType extends ScopeType, TBlock extends TSESTree.Node, TUpper extends Scope | null> {
#private;
/**
* A unique ID for this instance - primarily used to help debugging and testing
*/
readonly $id: number;
/**
* The AST node which created this scope.
* @public
*/
readonly block: TBlock;
/**
* The array of child scopes. This does not include grandchild scopes.
* @public
*/
readonly childScopes: Scope[];
/**
* Whether this scope is created by a FunctionExpression.
* @public
*/
readonly functionExpressionScope: boolean;
/**
* Whether 'use strict' is in effect in this scope.
* @public
*/
isStrict: boolean;
/**
* List of {@link Reference}s that are left to be resolved (i.e. which
* need to be linked to the variable they refer to).
*/
protected leftToResolve: Reference[] | null;
/**
* Any variable {@link Reference} found in this scope.
* This includes occurrences of local variables as well as variables from parent scopes (including the global scope).
* For local variables this also includes defining occurrences (like in a 'var' statement).
* In a 'function' scope this does not include the occurrences of the formal parameter in the parameter list.
* @public
*/
readonly references: Reference[];
/**
* The map from variable names to variable objects.
* @public
*/
readonly set: Map<string, Variable>;
/**
* The {@link Reference}s that are not resolved with this scope.
* @public
*/
readonly through: Reference[];
/**
* The type of scope
* @public
*/
readonly type: TType;
/**
* Reference to the parent {@link Scope}.
* @public
*/
readonly upper: TUpper;
/**
* The scoped {@link Variable}s of this scope.
* In the case of a 'function' scope this includes the automatic argument `arguments` as its first element, as well
* as all further formal arguments.
* This does not include variables which are defined in child scopes.
* @public
*/
readonly variables: Variable[];
/**
* For scopes that can contain variable declarations, this is a self-reference.
* For other scope types this is the *variableScope* value of the parent scope.
* @public
*/
readonly variableScope: VariableScope;
constructor(scopeManager: ScopeManager, type: TType, upperScope: TUpper, block: TBlock, isMethodDefinition: boolean);
private isVariableScope;
shouldStaticallyClose(): boolean;
private shouldStaticallyCloseForGlobal;
close(scopeManager: ScopeManager): Scope | null;
/**
* To override by function scopes.
* References in default parameters isn't resolved to variables which are in their function body.
*/
protected isValidResolution(_ref: Reference, _variable: Variable): boolean;
protected delegateToUpperScope(ref: Reference): void;
private addDeclaredVariablesOfNode;
protected defineVariable(nameOrVariable: string | Variable, set: Map<string, Variable>, variables: Variable[], node: TSESTree.Identifier | null, def: Definition | null): void;
defineIdentifier(node: TSESTree.Identifier, def: Definition): void;
defineLiteralIdentifier(node: TSESTree.StringLiteral, def: Definition): void;
referenceValue(node: TSESTree.Identifier | TSESTree.JSXIdentifier, assign?: ReferenceFlag, writeExpr?: TSESTree.Expression | null, maybeImplicitGlobal?: ReferenceImplicitGlobal | null, init?: boolean): void;
referenceType(node: TSESTree.Identifier): void;
referenceDualValueType(node: TSESTree.Identifier): void;
}
export { ScopeBase };
//# sourceMappingURL=ScopeBase.d.ts.map