ScopeManager
This document was written based on the implementation of eslint-scope, a fork of escope, and deprecates some members ESLint is not using.
ScopeManager interface
ScopeManager
object has all variable scopes.
Fields
scopes
- Type:
Scope[]
- Description: All scopes.
globalScope
- Type:
Scope
- Description: The root scope.
Methods
acquire(node, inner = false)
- Parameters:
node
(ASTNode
) … An AST node to get their scope.inner
(boolean
) … If the node has multiple scope, this returns the outermost scope normally. Ifinner
istrue
then this returns the innermost scope. Default isfalse
.
- Return type:
Scope | null
- Description: Get the scope of a given AST node. The gotten scope’s
block
property is the node. This method never returnsfunction-expression-name
scope. If the node does not have their scope, this returnsnull
.
getDeclaredVariables(node)
- Parameters:
node
(ASTNode
) … An AST node to get their variables.
- Return type:
Variable[]
- Description: Get the variables that a given AST node defines. The gotten variables’
def[].node
/def[].parent
property is the node. If the node does not define any variable, this returns an empty array.
Deprecated members
Those members are defined but not used in ESLint.
isModule()
- Parameters:
- Return type:
boolean
- Description:
true
if this program is module.
isImpliedStrict()
- Parameters:
- Return type:
boolean
- Description:
true
if this program is strict mode implicitly. I.e.,options.impliedStrict === true
.
isStrictModeSupported()
- Parameters:
- Return type:
boolean
- Description:
true
if this program supports strict mode. I.e.,options.ecmaVersion >= 5
.
acquireAll(node)
- Parameters:
node
(ASTNode
) … An AST node to get their scope.
- Return type:
Scope[] | null
- Description: Get the scopes of a given AST node. The gotten scopes’
block
property is the node. If the node does not have their scope, this returnsnull
.
Scope interface
Scope
object has all variables and references in the scope.
Fields
type
- Type:
string
- Description: The type of this scope. This is one of
"block"
,"catch"
,"class"
,"class-field-initializer"
,"class-static-block"
,"for"
,"function"
,"function-expression-name"
,"global"
,"module"
,"switch"
,"with"
.
isStrict
- Type:
boolean
- Description:
true
if this scope is strict mode.
upper
- Type:
Scope | null
- Description: The parent scope. If this is the global scope then this property is
null
.
childScopes
- Type:
Scope[]
- Description: The array of child scopes. This does not include grandchild scopes.
variableScope
- Type:
Scope
- Description: The nearest ancestor whose
type
is one of"class-field-initializer"
,"class-static-block"
,"function"
,"global"
, or"module"
. For the aforementioned scopes this is a self-reference.
This represents the lowest enclosing function or top-level scope. Class field initializers and class static blocks are implicit functions. Historically, this was the scope which hosts variables that are defined by
var
declarations, and thus the namevariableScope
.
block
- Type:
ASTNode
- Description: The AST node which created this scope.
variables
- Type:
Variable[]
- Description: The array of all variables which are defined on this scope. This does not include variables which are defined in child scopes.
set
- Type:
Map<string, Variable>
- Description: The map from variable names to variable objects.
I hope to rename
set
field or replace by a method.
references
- Type:
Reference[]
- Description: The array of all references on this scope. This does not include references in child scopes.
through
- Type:
Reference[]
- Description: The array of references which could not be resolved in this scope.
functionExpressionScope
- Type:
boolean
- Description:
true
if this scope is"function-expression-name"
scope.
I hope to deprecate
functionExpressionScope
field as replacing byscope.type === "function-expression-name"
.
Deprecated members
Those members are defined but not used in ESLint.
taints
- Type:
Map<string, boolean>
- Description: The map from variable names to
tainted
flag.
dynamic
- Type:
boolean
- Description:
true
if this scope is dynamic. I.e., the type of this scope is"global"
or"with"
.
directCallToEvalScope
- Type:
boolean
- Description:
true
if this scope containseval()
invocations.
thisFound
- Type:
boolean
- Description:
true
if this scope containsthis
.
resolve(node)
- Parameters:
node
(ASTNode
) … An AST node to get their reference object. The type of the node must be"Identifier"
.
- Return type:
Reference | null
- Description: Returns
this.references.find(r => r.identifier === node)
.
isStatic()
- Parameters:
- Return type:
boolean
- Description: Returns
!this.dynamic
.
isArgumentsMaterialized()
- Parameters:
- Return type:
boolean
- Description:
true
if this is a"function"
scope which has usedarguments
variable.
isThisMaterialized()
- Parameters:
- Return type:
boolean
- Description: Returns
this.thisFound
.
isUsedName(name)
- Parameters:
name
(string
) … The name to check.
- Return type:
boolean
- Description:
true
if a given name is used in variable names or reference names.
Variable interface
Variable
object is variable’s information.
Fields
name
- Type:
string
- Description: The name of this variable.
scope
- Type:
Scope
- Description: The scope in which this variable is defined.
identifiers
- Type:
ASTNode[]
- Description: The array of
Identifier
nodes which define this variable. If this variable is redeclared, this array includes two or more nodes.
I hope to deprecate
identifiers
field as replacing bydefs[].name
field.
references
- Type:
Reference[]
- Description: The array of the references of this variable.
defs
- Type:
Definition[]
- Description: The array of the definitions of this variable.
Deprecated members
Those members are defined but not used in ESLint.
tainted
- Type:
boolean
- Description: The
tainted
flag. (alwaysfalse
)
stack
- Type:
boolean
- Description: The
stack
flag. (I’m not sure what this means.)
Reference interface
Reference
object is reference’s information.
Fields
identifier
- Type:
ASTNode
- Description: The
Identifier
node of this reference.
from
- Type:
Scope
- Description: The
Scope
object that this reference is on.
resolved
- Type:
Variable | null
- Description: The
Variable
object that this reference refers. If such variable was not defined, this isnull
.
writeExpr
- Type:
ASTNode | null
- Description: The ASTNode object which is right-hand side.
init
- Type:
boolean
- Description:
true
if this writing reference is a variable initializer or a default value.
Methods
isWrite()
- Parameters:
- Return type:
boolean
- Description:
true
if this reference is writing.
isRead()
- Parameters:
- Return type:
boolean
- Description:
true
if this reference is reading.
isWriteOnly()
- Parameters:
- Return type:
boolean
- Description:
true
if this reference is writing but not reading.
isReadOnly()
- Parameters:
- Return type:
boolean
- Description:
true
if this reference is reading but not writing.
isReadWrite()
- Parameters:
- Return type:
boolean
- Description:
true
if this reference is reading and writing.
Deprecated members
Those members are defined but not used in ESLint.
tainted
- Type:
boolean
- Description: The
tainted
flag. (alwaysfalse
)
flag
- Type:
number
- Description:
1
is reading,2
is writing,3
is reading/writing.
partial
- Type:
boolean
- Description: The
partial
flag.
isStatic()
- Parameters:
- Return type:
boolean
- Description:
true
if this reference is resolved statically.
Definition interface
Definition
object is variable definition’s information.
Fields
type
- Type:
string
- Description: The type of this definition. One of
"CatchClause"
,"ClassName"
,"FunctionName"
,"ImplicitGlobalVariable"
,"ImportBinding"
,"Parameter"
, and"Variable"
.
name
- Type:
ASTNode
- Description: The
Identifier
node of this definition.
node
- Type:
ASTNode
- Description: The enclosing node of the name.
type | node |
---|---|
"CatchClause" |
CatchClause |
"ClassName" |
ClassDeclaration or ClassExpression |
"FunctionName" |
FunctionDeclaration or FunctionExpression |
"ImplicitGlobalVariable" |
Program |
"ImportBinding" |
ImportSpecifier , ImportDefaultSpecifier , or ImportNamespaceSpecifier |
"Parameter" |
FunctionDeclaration , FunctionExpression , or ArrowFunctionExpression |
"Variable" |
VariableDeclarator |
parent
- Type:
ASTNode | undefined | null
- Description: The enclosing statement node of the name.
type | parent |
---|---|
"CatchClause" |
null |
"ClassName" |
null |
"FunctionName" |
null |
"ImplicitGlobalVariable" |
null |
"ImportBinding" |
ImportDeclaration |
"Parameter" |
null |
"Variable" |
VariableDeclaration |
Deprecated members
Those members are defined but not used in ESLint.
index
- Type:
number | undefined | null
- Description: The index in the declaration statement.
kind
- Type:
string | undefined | null
- Description: The kind of the declaration statement.