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.
		
		
		
		
			
				
					99 lines
				
				2.7 KiB
			
		
		
			
		
	
	
					99 lines
				
				2.7 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								# eslint-visitor-keys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[](https://www.npmjs.com/package/eslint-visitor-keys)
							 | 
						||
| 
								 | 
							
								[](http://www.npmtrends.com/eslint-visitor-keys)
							 | 
						||
| 
								 | 
							
								[](https://travis-ci.org/eslint/eslint-visitor-keys)
							 | 
						||
| 
								 | 
							
								[](https://david-dm.org/eslint/eslint-visitor-keys)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Constants and utilities about visitor keys to traverse AST.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 💿 Installation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Use [npm] to install.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								$ npm install eslint-visitor-keys
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Requirements
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- [Node.js] 4.0.0 or later.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 📖 Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								const evk = require("eslint-visitor-keys")
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### evk.KEYS
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								> type: `{ [type: string]: string[] | undefined }`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Visitor keys. This keys are frozen.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This is an object. Keys are the type of [ESTree] nodes. Their values are an array of property names which have child nodes.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								console.log(evk.KEYS.AssignmentExpression) // → ["left", "right"]
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### evk.getKeys(node)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								> type: `(node: object) => string[]`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Get the visitor keys of a given AST node.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This is similar to `Object.keys(node)` of ES Standard, but some keys are excluded: `parent`, `leadingComments`, `trailingComments`, and names which start with `_`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This will be used to traverse unknown nodes.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								const node = {
							 | 
						||
| 
								 | 
							
								    type: "AssignmentExpression",
							 | 
						||
| 
								 | 
							
								    left: { type: "Identifier", name: "foo" },
							 | 
						||
| 
								 | 
							
								    right: { type: "Literal", value: 0 }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								console.log(evk.getKeys(node)) // → ["type", "left", "right"]
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### evk.unionWith(additionalKeys)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								> type: `(additionalKeys: object) => { [type: string]: string[] | undefined }`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Make the union set with `evk.KEYS` and the given keys.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- The order of keys is, `additionalKeys` is at first, then `evk.KEYS` is concatenated after that.
							 | 
						||
| 
								 | 
							
								- It removes duplicated keys as keeping the first one.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								console.log(evk.unionWith({
							 | 
						||
| 
								 | 
							
								    MethodDefinition: ["decorators"]
							 | 
						||
| 
								 | 
							
								})) // → { ..., MethodDefinition: ["decorators", "key", "value"], ... }
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 📰 Change log
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See [GitHub releases](https://github.com/eslint/eslint-visitor-keys/releases).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 🍻 Contributing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Welcome. See [ESLint contribution guidelines](https://eslint.org/docs/developer-guide/contributing/).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Development commands
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- `npm test` runs tests and measures code coverage.
							 | 
						||
| 
								 | 
							
								- `npm run lint` checks source codes with ESLint.
							 | 
						||
| 
								 | 
							
								- `npm run coverage` opens the code coverage report of the previous test with your default browser.
							 | 
						||
| 
								 | 
							
								- `npm run release` publishes this package to [npm] registory.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[npm]: https://www.npmjs.com/
							 | 
						||
| 
								 | 
							
								[Node.js]: https://nodejs.org/en/
							 | 
						||
| 
								 | 
							
								[ESTree]: https://github.com/estree/estree
							 |