Spaces:
Running
Running
# eslint-visitor-keys | |
[](https://www.npmjs.com/package/eslint-visitor-keys) | |
[](http://www.npmtrends.com/eslint-visitor-keys) | |
[](https://github.com/eslint/js/actions) | |
Constants and utilities about visitor keys to traverse AST. | |
## πΏ Installation | |
Use [npm] to install. | |
```bash | |
$ npm install eslint-visitor-keys | |
``` | |
### Requirements | |
- [Node.js] `^18.18.0`, `^20.9.0`, or `>=21.1.0` | |
## π Usage | |
To use in an ESM file: | |
```js | |
import * as evk from "eslint-visitor-keys" | |
``` | |
To use in a CommonJS file: | |
```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: | |
```js | |
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: | |
```js | |
console.log(evk.unionWith({ | |
MethodDefinition: ["decorators"] | |
})) // β { ..., MethodDefinition: ["decorators", "key", "value"], ... } | |
``` | |
## π° Change log | |
See [GitHub releases](https://github.com/eslint/js/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 test:open-coverage` opens the code coverage report of the previous test with your default browser. | |
[npm]: https://www.npmjs.com/ | |
[Node.js]: https://nodejs.org/ | |
[ESTree]: https://github.com/estree/estree | |
<!-- NOTE: This section is autogenerated. Do not manually edit.--> | |
<!--sponsorsstart--> | |
## Sponsors | |
The following companies, organizations, and individuals support ESLint's ongoing maintenance and development. [Become a Sponsor](https://eslint.org/donate) | |
to get your logo on our READMEs and [website](https://eslint.org/sponsors). | |
<h3>Platinum Sponsors</h3> | |
<p><a href="https://automattic.com"><img src="https://images.opencollective.com/automattic/d0ef3e1/logo.png" alt="Automattic" height="128"></a> <a href="https://www.airbnb.com/"><img src="https://images.opencollective.com/airbnb/d327d66/logo.png" alt="Airbnb" height="128"></a></p><h3>Gold Sponsors</h3> | |
<p><a href="https://trunk.io/"><img src="https://images.opencollective.com/trunkio/fb92d60/avatar.png" alt="trunk.io" height="96"></a></p><h3>Silver Sponsors</h3> | |
<p><a href="https://www.jetbrains.com/"><img src="https://images.opencollective.com/jetbrains/fe76f99/logo.png" alt="JetBrains" height="64"></a> <a href="https://liftoff.io/"><img src="https://images.opencollective.com/liftoff/5c4fa84/logo.png" alt="Liftoff" height="64"></a> <a href="https://americanexpress.io"><img src="https://avatars.githubusercontent.com/u/3853301?v=4" alt="American Express" height="64"></a> <a href="https://www.workleap.com"><img src="https://avatars.githubusercontent.com/u/53535748?u=d1e55d7661d724bf2281c1bfd33cb8f99fe2465f&v=4" alt="Workleap" height="64"></a></p><h3>Bronze Sponsors</h3> | |
<p><a href="https://www.wordhint.net/"><img src="https://images.opencollective.com/wordhint/be86813/avatar.png" alt="WordHint" height="32"></a> <a href="https://www.crosswordsolver.org/anagram-solver/"><img src="https://images.opencollective.com/anagram-solver/2666271/logo.png" alt="Anagram Solver" height="32"></a> <a href="https://icons8.com/"><img src="https://images.opencollective.com/icons8/7fa1641/logo.png" alt="Icons8" height="32"></a> <a href="https://discord.com"><img src="https://images.opencollective.com/discordapp/f9645d9/logo.png" alt="Discord" height="32"></a> <a href="https://www.gitbook.com"><img src="https://avatars.githubusercontent.com/u/7111340?v=4" alt="GitBook" height="32"></a> <a href="https://nx.dev"><img src="https://avatars.githubusercontent.com/u/23692104?v=4" alt="Nx" height="32"></a> <a href="https://herocoders.com"><img src="https://avatars.githubusercontent.com/u/37549774?v=4" alt="HeroCoders" height="32"></a></p> | |
<h3>Technology Sponsors</h3> | |
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work. | |
<p><a href="https://netlify.com"><img src="https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/netlify-icon.svg" alt="Netlify" height="32"></a> <a href="https://algolia.com"><img src="https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/algolia-icon.svg" alt="Algolia" height="32"></a> <a href="https://1password.com"><img src="https://raw.githubusercontent.com/eslint/eslint.org/main/src/assets/images/techsponsors/1password-icon.svg" alt="1Password" height="32"></a></p> | |
<!--sponsorsend--> | |