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.
You can find our Getting Started docs here
$ yarn add -D typescript @typescript-eslint/scope-manager $ npm i --save-dev typescript @typescript-eslint/scope-manager
analyze(tree, options)
Analyses a given AST and returns the resulting ScopeManager
.
interface AnalyzeOptions { /** * Known visitor keys. */ childVisitorKeys?: Record<string, string[]> | null; /** * Which ECMAScript version is considered. * Defaults to `2018`. */ ecmaVersion?: EcmaVersion; /** * Whether the whole script is executed under node.js environment. * When enabled, the scope manager adds a function scope immediately following the global scope. * Defaults to `false`. */ globalReturn?: boolean; /** * Implied strict mode (if ecmaVersion >= 5). * Defaults to `false`. */ impliedStrict?: boolean; /** * The identifier that's used for JSX Element creation (after transpilation). * This should not be a member expression - just the root identifier (i.e. use "React" instead of "React.createElement"). * Defaults to `"React"`. */ jsxPragma?: string; /** * The identifier that's used for JSX fragment elements (after transpilation). * If `null`, assumes transpilation will always use a member on `jsxFactory` (i.e. React.Fragment). * This should not be a member expression - just the root identifier (i.e. use "h" instead of "h.Fragment"). * Defaults to `null`. */ jsxFragmentName?: string | null; /** * The lib used by the project. * This automatically defines a type variable for any types provided by the configured TS libs. * For more information, see https://www.typescriptlang.org/tsconfig#lib * * Defaults to the lib for the provided `ecmaVersion`. */ lib?: Lib[]; /** * The source type of the script. */ sourceType?: 'script' | 'module'; }
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, { // note that scope-manager requires ranges on the AST range: true, }); const scope = analyze(ast, { ecmaVersion: 2020, sourceType: 'module', });