You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					62 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					62 lines
				
				1.2 KiB
			| 
											3 years ago
										 | # 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 | ||
|  | const { parse } = require( 'acorn' ); | ||
|  | const { walk } = require( 'estree-walker' ); | ||
|  | const isReference = require( '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 ( isReference( 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 |