将 eslint-scope 从 8.x 升级到 9.x
根据 TypeScript 类型自动比较 eslint-scope 8.4.0 与 9.1.2 的公开 API。签名变化表示可能存在不兼容变更,并非确定结论。
概要
| 已删除的导入路径 | 0 |
|---|---|
| 已删除的导出 | 0 |
| 已修改的签名 | 1 |
| 已删除的类或接口成员 | 4 |
| 已修改的类或接口成员 | 45 |
| 新增弃用 | 48 |
| 要求变化(engines、peer 依赖) | 1 |
| 新增导出 | 13 |
已删除的导出
未发现。
已修改的签名
| export | 之前 | 之后 |
|---|---|---|
eslint-scope · Definition | class | ({ type: "CatchClause"; node: ESTree.CatchClause; parent: null; } | { type: "ClassName"; node: any; parent: null; } | { type: "FunctionName"; node: any; parent: null; } | { type: "ImplicitGlobalVariable"; node: any; parent: null; } | { type: "ImportBinding"; node: any; parent: ESTree.ImportDeclaration; } | { type: "Parameter"; node: any; parent: null; } | { type: "Variable"; node: ESTree.VariableDeclarator; parent: ESTree.VariableDeclaration; }) & { name: ESTree.Identifier; index: number | null; kind: string | null; } |
已删除的类或接口成员
| member | import | 之前 |
|---|---|---|
Scope.implicit | eslint-scope | { left: TReference[]; set: Map<string, Variable<Reference>>; variables: Variable<Reference>[]; } |
BlockScope.implicit | eslint-scope | { left: Reference[]; set: Map<string, Variable<Reference>>; variables: Variable<Reference>[]; } |
ModuleScope.implicit | eslint-scope | { left: Reference[]; set: Map<string, Variable<Reference>>; variables: Variable<Reference>[]; } |
FunctionScope.implicit | eslint-scope | { left: Reference[]; set: Map<string, Variable<Reference>>; variables: Variable<Reference>[]; } |
已修改的类或接口成员
| member | 之前 | 之后 |
|---|---|---|
Scope.set | eslint.Scope.Scope | Map<string, TVariable> |
Scope.type | eslint.Scope.Scope | "function" | "module" | "block" | "catch" | "class" | "class-field-initializer" | "class-static-block" | "for" | "function-expression-name" | "global" | "switch" | "with" |
Scope.taints | Map<string, Variable<Reference>> | Map<string, TVariable> |
Scope.resolve | (ref: Reference, noChain?: boolean | undefined): void | (ident: ESTree.Identifier): TReference | null |
Scope.through | eslint.Scope.Scope | TReference[] |
Scope.constructor | <TVariable extends Variable = Variable<Reference>, TReference extends Reference = Reference>(scopeManager: ScopeManager, type: string, upper: Scope<Variable<Reference>, Reference> | null, block: ESTree.Node, isMethodDefinition: boolean): Scope<TVariable, TReference> | <TVariable extends Variable = Variable<Reference>, TReference extends Reference = Reference>(scopeManager: ScopeManager, type: "function" | "module" | "block" | "catch" | "class" | "class-field-initializer" | "class-static-block" | "for" | "function-expression-name" | "global" | "switch" | "with", u… |
Scope.variableScope | Scope<TVariable, TReference> | Scope<Variable<Reference>, Reference> |
Variable.defs | eslint.Scope.Definition[] | Definition[] |
Reference.init | boolean | boolean | undefined |
Reference.isRead | eslint.Scope.Reference | (): boolean |
Reference.isWrite | eslint.Scope.Reference | (): boolean |
Reference.partial | boolean | boolean | undefined |
Reference.identifier | ESTree.Identifier | any |
Reference.constructor | (identifier: ESTree.Identifier, scope: Scope<Variable<Reference>, Reference>, flag: number, writeExpr: any, maybeImplicitGlobal: boolean, partial: boolean, init: boolean): Reference | (ident: any, scope: Scope<Variable<Reference>, Reference>, flag: number, writeExpr: any, maybeImplicitGlobal: { pattern: ESTree.Pattern; node: ESTree.Node; } | null, partial: boolean, init: boolean): Reference |
BlockScope.set | eslint.Scope.Scope | Map<string, Variable<Reference>> |
BlockScope.resolve | (ref: Reference, noChain?: boolean | undefined): void | (ident: ESTree.Identifier): Reference | null |
BlockScope.through | eslint.Scope.Scope | Reference[] |
BlockScope.constructor | (scopeManager: ScopeManager, upper: Scope<Variable<Reference>, Reference>, block: ESTree.Node): BlockScope | (scopeManager: ScopeManager, upperScope: Scope<Variable<Reference>, Reference>, block: ESTree.Node): BlockScope |
BlockScope.variableScope | BlockScope | Scope<Variable<Reference>, Reference> |
BlockScope.isThisMaterialized | (): boolean | (): true |
BlockScope.functionExpressionScope | boolean | false |
BlockScope.isArgumentsMaterialized | (): boolean | (): true |
GlobalScope.set | eslint.Scope.Scope | Map<string, Variable<Reference>> |
GlobalScope.resolve | (ref: Reference, noChain?: boolean | undefined): void | (ident: ESTree.Identifier): Reference | null |
GlobalScope.through | eslint.Scope.Scope | Reference[] |
GlobalScope.variableScope | GlobalScope | Scope<Variable<Reference>, Reference> |
GlobalScope.isThisMaterialized | (): boolean | (): true |
GlobalScope.functionExpressionScope | boolean | false |
GlobalScope.isArgumentsMaterialized | (): boolean | (): true |
ModuleScope.set | eslint.Scope.Scope | Map<string, Variable<Reference>> |
ModuleScope.resolve | (ref: Reference, noChain?: boolean | undefined): void | (ident: ESTree.Identifier): Reference | null |
ModuleScope.through | eslint.Scope.Scope | Reference[] |
ModuleScope.constructor | (scopeManager: ScopeManager, upper: Scope<Variable<Reference>, Reference>, block: ESTree.Node): ModuleScope | (scopeManager: ScopeManager, upperScope: Scope<Variable<Reference>, Reference>, block: ESTree.Node): ModuleScope |
ModuleScope.variableScope | ModuleScope | Scope<Variable<Reference>, Reference> |
ModuleScope.isThisMaterialized | (): boolean | (): true |
ModuleScope.functionExpressionScope | boolean | false |
ModuleScope.isArgumentsMaterialized | (): boolean | (): true |
ScopeManager.globalScope | GlobalScope | GlobalScope | null |
FunctionScope.set | eslint.Scope.Scope | Map<string, Variable<Reference>> |
FunctionScope.resolve | (ref: Reference, noChain?: boolean | undefined): void | (ident: ESTree.Identifier): Reference | null |
FunctionScope.through | eslint.Scope.Scope | Reference[] |
FunctionScope.constructor | (scopeManager: ScopeManager, upper: Scope<Variable<Reference>, Reference>, block: ESTree.Node, isMethodDefinition: boolean): FunctionScope | (scopeManager: ScopeManager, upperScope: Scope<Variable<Reference>, Reference>, block: ESTree.Node, isMethodDefinition: boolean): FunctionScope |
FunctionScope.variableScope | FunctionScope | Scope<Variable<Reference>, Reference> |
FunctionScope.functionExpressionScope | boolean | false |
AnalyzeOptions.childVisitorKeys | any | { readonly [type: string]: readonly string[]; } | null | undefined |
新增弃用
| export | @deprecated |
|---|---|
eslint-scope · Scope.taints | — |
eslint-scope · Scope.dynamic | — |
eslint-scope · Scope.resolve | — |
eslint-scope · Scope.isStatic | — |
eslint-scope · Scope.thisFound | — |
eslint-scope · Scope.isUsedName | — |
eslint-scope · Scope.isThisMaterialized | — |
eslint-scope · Scope.directCallToEvalScope | — |
eslint-scope · Scope.isArgumentsMaterialized | — |
eslint-scope · Variable.stack | — |
eslint-scope · Variable.tainted | — |
eslint-scope · Reference.partial | — |
eslint-scope · Reference.tainted | — |
eslint-scope · Reference.isStatic | — |
eslint-scope · BlockScope.taints | — |
eslint-scope · BlockScope.dynamic | — |
eslint-scope · BlockScope.resolve | — |
eslint-scope · BlockScope.isStatic | — |
eslint-scope · BlockScope.thisFound | — |
eslint-scope · BlockScope.isUsedName | — |
eslint-scope · BlockScope.directCallToEvalScope | — |
eslint-scope · GlobalScope.taints | — |
eslint-scope · GlobalScope.dynamic | — |
eslint-scope · GlobalScope.resolve | — |
eslint-scope · GlobalScope.isStatic | — |
eslint-scope · GlobalScope.thisFound | — |
eslint-scope · GlobalScope.isUsedName | — |
eslint-scope · GlobalScope.directCallToEvalScope | — |
eslint-scope · ModuleScope.taints | — |
eslint-scope · ModuleScope.dynamic | — |
eslint-scope · ModuleScope.resolve | — |
eslint-scope · ModuleScope.isStatic | — |
eslint-scope · ModuleScope.thisFound | — |
eslint-scope · ModuleScope.isUsedName | — |
eslint-scope · ModuleScope.directCallToEvalScope | — |
eslint-scope · ScopeManager.isModule | — |
eslint-scope · ScopeManager.acquireAll | — |
eslint-scope · ScopeManager.isImpliedStrict | — |
eslint-scope · ScopeManager.isStrictModeSupported | — |
eslint-scope · FunctionScope.taints | — |
eslint-scope · FunctionScope.dynamic | — |
eslint-scope · FunctionScope.resolve | — |
eslint-scope · FunctionScope.isStatic | — |
eslint-scope · FunctionScope.thisFound | — |
eslint-scope · FunctionScope.isUsedName | — |
eslint-scope · FunctionScope.isThisMaterialized | — |
eslint-scope · FunctionScope.directCallToEvalScope | — |
eslint-scope · FunctionScope.isArgumentsMaterialized | — |
要求变化(engines、peer 依赖)
| 之前 | 之后 | |
|---|---|---|
engines.node | ^18.18.0 || ^20.9.0 || >=21.1.0 | ^20.19.0 || ^22.13.0 || >=24 |
新增导出 (13)
| import | export | kind |
|---|---|---|
eslint-scope | version | variable |
eslint-scope | ForScope | class |
eslint-scope | WithScope | class |
eslint-scope | CatchScope | class |
eslint-scope | ClassScope | class |
eslint-scope | Referencer | class |
eslint-scope | SwitchScope | class |
eslint-scope | JSXIdentifier | interface |
eslint-scope | PatternVisitor | class |
eslint-scope | ClassStaticBlockScope | class |
eslint-scope | PatternVisitorCallback | type |
eslint-scope | ClassFieldInitializerScope | class |
eslint-scope | FunctionExpressionNameScope | class |
把这些数据交给你的 AI 智能体
Vigia 是免费的 MCP 服务器:你的编程智能体在写代码之前就能检查版本、不兼容变更和安全漏洞。无需注册,无需 API 密钥。
claude mcp add --transport http vigia https://vigia.coredls.cloud/mcp
添加到 Cursor添加到 VS Code★ 在 GitHub 上加星
任何其他 MCP 客户端
{ "mcpServers": { "vigia": { "url": "https://vigia.coredls.cloud/mcp" } } }常见问题
将 eslint-scope 从 8 升级到 9 有哪些不兼容变更?
在 eslint-scope 8.4.0 与 9.1.2 之间,Vigia 发现 0 个已删除的导出、1 个已修改的签名,以及 49 个已删除或修改的类或接口成员。
eslint-scope 9 中弃用了哪些内容?
eslint-scope 9.1.2 中有 48 个导出或成员新被标记为弃用。
供智能体使用
GET https://vigia.coredls.cloud/v1/packages/npm/eslint-scope/upgrade?from=8.4.0&to=9.1.2