ScopeManager
本文档是基于 eslint-scope 的实现编写的,它是 escope 的分叉,并废弃了一些 ESLint 不使用的成员。
ScopeManager 接口
ScopeManager 对象拥有所有的变量作用域。
字段
scopes
- 类型:
Scope[] - 描述:所有作用域
globalScope
- 类型:
Scope - 描述:根作用域
方法
acquire(node, inner = false)
参数:
* node (ASTNode) … 用于获取其作用域的 AST 节点。
* inner (boolean) … 如果节点有多个作用域,这通常返回最外层的作用域。如果 inner 是 true 则返回最里面的作用域。默认是 false。
返回类型:Scope | null。
描述:获取给定的 AST 节点的作用域。得到的作用域的 block 属性是该节点。这个方法从不返回 function-expression-name 作用域。如果节点没有它们的作用域,这将返回 null。
getDeclaredVariables(node)
- 参数:
node(ASTNode) … 用于获取它们的变量的 AST 节点.
- 返回类型:
Variable[] - 描述:获取给定的 AST 节点所定义的变量。得到的变量的
def[].node/def[].parent属性是节点。如果该节点没有定义任何变量,将返回空数组。
废弃成员
ESLint 中定义了这些成员,但没有使用它们。
isModule()
- 参数:
- 返回类型:
boolean - 描述:如果该程序是模块则为
true。
isImpliedStrict()
- 参数:
- 返回类型:
boolean - 描述:如果这个程序是隐含的严格模式,即
options.impliedStrict === true,则为true。
isStrictModeSupported()
- 参数:
- 返回类型:
boolean - 描述:
true如果这个程序支持严格模式。即:options.ecmaVersion >= 5。
acquireAll(node)
- 参数:
node(ASTNode) … 用于获得它们作用域的 AST 节点。
- 返回类型:
Scope[] | null - 描述:获取给定的 AST 节点的作用域。得到的作用域的
block属性是节点。如果该节点没有他们的作用域,则返回null。
Scope 接口
Scope 对象拥有作用域内的所有变量和引用。
字段
type
- 类型:
string - 描述:此作用域的类型。可以是
"block"、"catch"、"class"、"class-field-initializer"、"class-static-block"、"for"、"function"、"function-expression-name"、"global"、"module"、"switch"或"with"其中之一。
isStrict
- 类型:
boolean - 描述:如果这个作用域是严格模式,则为
true。
upper
- 类型:
Scope | null - 描述:父作用域。如果这是全局作用域,那么这个属性就是
null。
childScopes
- 类型:
Scope[] - 描述:子作用域的数组。这不包括子孙作用域。
variableScope
- 类型:
Scope - 描述:最近的祖先,其
type是"class-field-initializer"、"class-static-block"、"function"、"global"或"module"之一。以上作用域是自引用作用域
这代表最低的包围函数或顶层作用域。类的字段初始化器和类的静态块是隐式函数。由于历史原因,这是承载由
var声明定义的变量的作用域,因此被称为variableScope。
block
- 类型:
ASTNode - 描述:创建此作用域的 AST 节点。
variables
- 类型:
Variable[] - 描述:此作用域上定义的所有变量的数组。这不包括在子作用域中定义的变量。
set
- 类型:
Map<string, Variable> - 描述:变量名称与变量对象的映射。
我希望重命名
set字段或用方法代替。
references
- 类型:
Reference[] - 描述:此作用域上的所有引用的数组。这不包括子作用域中的引用。
through
- 类型:
Reference[] - 描述:在此作用域内无法解析的引用数组。
functionExpressionScope
- 类型:
boolean - 描述:若此作用域为
"function-expression-name",则为true。
我希望废除
functionExpressionScope字段,并用scope.type === "function-expression-name"代替。
废弃成员
ESLint 中定义了这些成员,但没有使用它们。
taints
- 类型:
Map<string, boolean> - 描述:变量名与
tainted标志的映射。
dynamic
- 类型:
boolean - 描述:若为动态作用域,则为
true。也就是说,这个作用域的类型是"global"或"with"。
directCallToEvalScope
- 类型:
boolean - 描述:若此作用域调用了
eval(),则为true。
thisFound
- 类型:
boolean - 描述:若此作用域包含
this,则为true。
resolve(node)
- 参数:
node(ASTNode) … 用于获得其参考对象的 AST 节点。该节点的类型必须是"Identifier"。
- 返回类型:
Reference | null - 描述:返回
this.references.find(r => r.identifier === node)。
isStatic()
- 参数:
- 返回类型:
boolean - 描述:返回
!this.dynamic。
isArgumentsMaterialized()
- 参数:
- 返回类型:
boolean - 描述:如果是在
arguments变量中的使用的"function"作用域,则为true。
isThisMaterialized()
- 参数:
- 返回类型:
boolean - 描述:返回
this.thisFound.
isUsedName(name)
- 参数:
name(string) … 要检查的名字。
- 返回类型:
boolean - 描述:如果在变量名或引用名中使用给定的名称,则为
true。
Variable 接口
Variable 对象是变量的信息。
字段
name
- 类型:
string - 描述:该变量的名称。
scope
- 类型:
Scope - 描述:定义该变量的作用域。
identifiers
- 类型:
ASTNode[] - 描述:定义该变量的
Identifier节点的数组。如果这个变量被重新声明,这个数组包括两个或多个节点。
我希望废除
identifiers字段,并用defs[].name字段来代替。
references
- 类型:
Reference[] - 描述:该变量的引用数组。
defs
- 类型:
Definition[] - 描述:该变量的定义数组。
废弃的成员
ESLint 中定义了这些成员,但没有使用它们。
tainted
- 类型:
boolean - 描述:
tainted标志(总是false)。
stack
- 类型:
boolean - 描述:
stack标志(我不清楚它的作用)。
Reference 接口
Reference 对象是参考的信息。
Fields
identifier
- 类型:
ASTNode - 描述:该引用的
Identifier节点。
from
- 类型:
Scope - 描述:该引用所处的
Scope对象。
resolved
- 类型:
Variable | null - 描述:该引用指向
Variable对象。如果没有定义此变量,则为null。
writeExpr
- 类型:
ASTNode | null - 描述:作为右侧的 ASTNode 对象。
init
- 类型:
boolean - 描述:如果这个写入引用是变量初始化器或默认值,则为
true。
Methods
isWrite()
- 参数:
- 返回类型:
boolean - 描述:如果该引用可写,则为
true。
isRead()
- 参数:
- 返回类型:
boolean - 描述:如果正在读取该引用,则为
true。
isWriteOnly()
- 参数:
- 返回类型:
boolean - 描述:如果该引用可写不可读,则为
true。
isReadOnly()
- 参数:
- 返回类型:
boolean - 描述:
true,如果这个引用是读而不是写。
isReadWrite()
- 参数:
- 返回类型:
boolean - 描述:如果该引用可读写的,则为
true。
废弃成员
ESLint 中定义了这些成员,但没有使用它们。
tainted
- 类型:
boolean - 描述:
tainted标志(总是为false)。
flag
- 类型:
number - 描述:
1是读,2是写,3是读/写。
partial
- 类型:
boolean - 描述:
partial标志。
isStatic()
- 参数:
- 返回类型:
boolean - 描述:如果该引用被静态解析,则为
true。
Definition 接口
Definition 对象是变量定义的信息。
Fields
type
- 类型:
string - 描述:该定义的类型是
"CatchClause"、"ClassName"、"FunctionName"、"ImplicitGlobalVariable"、"ImportBinding"、"Parameter"和"Variable"之一。
name
- 类型:
ASTNode - 描述:该定义的
Identifier节点。
node
- 类型:
ASTNode - 描述:名称的包围性节点。
| 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
- 类型:
ASTNode | undefined | null - 描述:名称的包围性语句节点。
| type | parent |
|---|---|
"CatchClause" |
null |
"ClassName" |
null |
"FunctionName" |
null |
"ImplicitGlobalVariable" |
null |
"ImportBinding" |
ImportDeclaration |
"Parameter" |
null |
"Variable" |
VariableDeclaration |
废弃成员
ESLint 中定义了这些成员,但没有使用它们。
index
- 类型:
number | undefined | null - 描述:声明语句中的索引.
kind
- 类型:
string | undefined | null - 描述:声明声明的种类。