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 | |