Spaces:
Runtime error
Runtime error
| # is-reference | |
| Utility for determining whether an AST node is a reference. | |
| `foo` is a reference in these cases: | |
| ```js | |
| console.log(foo); | |
| var foo; | |
| function foo() {} | |
| function bar(foo) {} | |
| export { foo as x }; | |
| ``` | |
| `foo` is *not* a reference in these cases: | |
| ```js | |
| var obj = { foo: 1 }; | |
| console.log(obj.foo); | |
| export { x as foo }; | |
| ``` | |
| In all cases, `foo` is an `Identifier` node, but the two kinds must be treated differently for the purposes of scope analysis etc. (The examples are non-exhaustive.) | |
| ## Installation | |
| ```bash | |
| npm install is-reference | |
| ``` | |
| ## Usage | |
| Example using [Acorn](https://github.com/ternjs/acorn) and [estree-walker](https://github.com/Rich-Harris/estree-walker): | |
| ```js | |
| import { parse } from 'acorn'; | |
| import { walk } from 'estree-walker'; | |
| import is_reference from 'is-reference'; | |
| const identifiers = []; | |
| const references = []; | |
| const ast = parse(`var a = b.c;`); | |
| walk(ast, { | |
| enter(node, parent) { | |
| if (node.type === 'Identifier') identifiers.push(node); | |
| if (is_reference(node, parent)) references.push(node); | |
| } | |
| }); | |
| identifiers.forEach(node => console.log(node.name)); // a, b, c | |
| references.forEach(node => console.log(node.name)); // a, b | |
| ``` | |
| ## License | |
| MIT | |