What is @typescript-eslint/scope-manager?
The @typescript-eslint/scope-manager package is part of the TypeScript ESLint project. It is used to generate TypeScript-aware scope information for ESLint. This scope information is essential for linting TypeScript codebases, as it understands TypeScript-specific features like types and interfaces, which are not present in regular JavaScript.
What are @typescript-eslint/scope-manager's main functionalities?
Scope Analysis
The package analyzes the scope of variables and types within TypeScript code. It helps in identifying where variables are defined and how they are being used, which is crucial for linting and avoiding errors like variable shadowing or undeclared variables.
N/A
TypeScript-specific Scope Handling
It extends ESLint's scope analysis capabilities to understand TypeScript-specific constructs such as interfaces, types, and enums, which are not part of the standard JavaScript language.
N/A
Integration with ESLint
The scope manager is designed to work seamlessly with ESLint, allowing developers to use ESLint's rule set for TypeScript code. It provides the necessary scope information to ESLint rules so they can operate on TypeScript code as they would on JavaScript code.
N/A
Other packages similar to @typescript-eslint/scope-manager
eslint-scope
eslint-scope is a package that performs scope analysis for JavaScript code. It is used by ESLint to determine the variables and their references within the code. Unlike @typescript-eslint/scope-manager, it does not have built-in support for TypeScript-specific features.
ts-morph
ts-morph is a TypeScript compiler API wrapper that provides an easier way to interact with the TypeScript compiler. It includes features for analyzing and manipulating TypeScript code, which can be used for tasks similar to scope analysis. However, it is a more general-purpose tool and not specifically tailored for ESLint integration.
typescript-eslint-parser
typescript-eslint-parser is a parser that allows ESLint to lint TypeScript code. It is an older package that has been deprecated in favor of @typescript-eslint/parser, which works in conjunction with @typescript-eslint/scope-manager to provide linting capabilities for TypeScript code.
TypeScript Scope Manager
This is a fork of eslint-scope
, enhanced to support TypeScript functionality.
You can view the original licence for the code here.
This package is consumed automatically by @typescript-eslint/parser
.
You probably don't want to use it directly.
Getting Started
You can find our Getting Started docs here
Installation
$ yarn add -D typescript @typescript-eslint/scope-manager
$ npm i --save-dev typescript @typescript-eslint/scope-manager
API
analyze(tree, options)
Analyses a given AST and returns the resulting ScopeManager
.
interface AnalyzeOptions {
childVisitorKeys?: Record<string, string[]> | null;
ecmaVersion?: EcmaVersion | 1e8;
globalReturn?: boolean;
impliedStrict?: boolean;
jsxPragma?: string;
jsxFragmentName?: string | null;
lib?: Lib[];
sourceType?: 'script' | 'module';
emitDecoratorMetadata?: boolean;
}
Example usage:
import { analyze } from '@typescript-eslint/scope-manager';
import { parse } from '@typescript-eslint/typescript-estree';
const code = `const hello: string = 'world';`;
const ast = parse(code, {
range: true,
});
const scope = analyze(ast, {
ecmaVersion: 2020,
sourceType: 'module',
});
References
Contributing
See the contributing guide here