|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- # ast-walker-scope [](https://npmjs.com/package/ast-walker-scope)
-
- [](https://github.com/sxzz/ast-walker-scope/actions/workflows/unit-test.yml)
-
- Traverse Babel AST with scope information.
-
- Inherited from [estree-walker](https://github.com/Rich-Harris/estree-walker).
-
- ## Install
-
- ```bash
- npm i ast-walker-scope
- ```
-
- ## Usage
-
- ### Basic Example
-
- For a real example, you can refer to [example.ts](./example.ts)
-
- ```ts
- import { walk } from 'ast-walker-scope'
-
- const code = `
- const a = 'root level'
-
- {
- const a = 'second level'
- let secondLevel = true
- console.log(a, secondLevel)
- }
-
- var err = undefined
- try {
- } catch (err) {
- console.log(err)
- }
-
- console.log(a)
- `.trim()
-
- walk(code, {
- leave(this, node) {
- if (node.type === 'CallExpression') {
- console.log(`\nLevel: ${this.level}`)
- for (const [name, node] of Object.entries(this.scope)) {
- console.log(
- `variable ${name} is located at line ${node.loc?.start.line}, column ${node.loc?.start.column}`
- )
- }
- }
- },
- })
- ```
-
- Output:
-
- ```
- Level: 2
- variable a is located at line 4, column 8
- variable secondLevel is located at line 5, column 6
-
- Level: 2
- variable a is located at line 1, column 6
- variable err is located at line 12, column 9
-
- Level: 1
- variable a is located at line 1, column 6
- variable err is located at line 9, column 4
- ```
-
- ## Typings
-
- ```ts
- export type Scope = Record<string, Node>
- export interface HookContext extends WalkerContext {
- // inherited from estree-walker
- skip: () => void
- remove: () => void
- replace: (node: Node) => void
-
- // arguments of estree-walker hook
- parent: Node
- key: string
- index: number
-
- // scope info
- scope: Scope
- scopes: Scope[]
- level: number
- }
- ```
-
- ## Sponsors
-
- <p align="center">
- <a href="https://cdn.jsdelivr.net/gh/sxzz/sponsors/sponsors.svg">
- <img src='https://cdn.jsdelivr.net/gh/sxzz/sponsors/sponsors.svg'/>
- </a>
- </p>
-
- ## Credits
-
- - [@vue/reactivity-transform](https://github.com/vuejs/core/blob/v3.2.37/packages/reactivity-transform/src/reactivityTransform.ts) - almost copy-like referenced
-
- ## License
-
- [MIT](./LICENSE) License © 2022 [三咲智子](https://github.com/sxzz)
|