版本

ScopeManager

本文档基于 eslint-scope 的实现编写,escope 的一个分支,并弃用了一些 ESLint 未使用的成员。


ScopeManager 接口

ScopeManager 对象包含所有变量作用域。

字段

scopes

  • 类型: Scope[]
  • 描述: 所有作用域。

globalScope

  • 类型: Scope
  • 描述: 根作用域。

方法

acquire(node, inner = false)

  • 参数
    • node (ASTNode) … 获取其作用域的 AST 节点。
    • inner (boolean) … 如果节点具有多个作用域,则此方法通常返回最外层的作用域。如果 innertrue,则此方法返回最内层的作用域。默认为 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
  • 描述: 如果此程序隐式处于严格模式,则返回 true。即,options.impliedStrict === 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 对象是引用的信息。

字段

identifier

  • 类型: ASTNode
  • 描述: 此引用的 Identifier 节点。

from

  • 类型: Scope
  • 描述: 此引用所在的 Scope 对象。

resolved

  • 类型: Variable | null
  • 描述: 此引用引用的 Variable 对象。如果没有定义此类变量,则为 null

writeExpr

  • 类型: ASTNode | null
  • 描述: 右侧的 ASTNode 对象。

init

  • 类型: boolean
  • 描述: 如果此写引用是变量初始化程序或默认值,则返回 true

方法

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 对象是变量定义的信息。

字段

type

  • 类型: string
  • 描述: 此定义的类型。可能是 "CatchClause""ClassName""FunctionName""ImplicitGlobalVariable""ImportBinding""Parameter""Variable" 之一。

name

  • 类型: ASTNode
  • 描述: 此定义的 Identifier 节点。

node

  • 类型: ASTNode
  • 描述: 名称的封闭节点。
type node
"CatchClause" CatchClause
"ClassName" ClassDeclarationClassExpression
"FunctionName" FunctionDeclarationFunctionExpression
"ImplicitGlobalVariable" Program
"ImportBinding" ImportSpecifierImportDefaultSpecifierImportNamespaceSpecifier
"Parameter" FunctionDeclarationFunctionExpressionArrowFunctionExpression
"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
  • 描述: 声明语句的种类。
更改语言