| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
							- /**
 
-  * @author Toru Nagashima <https://github.com/mysticatea>
 
-  * See LICENSE file in root directory for full license.
 
-  */
 
- "use strict";
 
- const KEYS = require("./visitor-keys.json");
 
- // Types.
 
- const NODE_TYPES = Object.freeze(Object.keys(KEYS));
 
- // Freeze the keys.
 
- for (const type of NODE_TYPES) {
 
-     Object.freeze(KEYS[type]);
 
- }
 
- Object.freeze(KEYS);
 
- // List to ignore keys.
 
- const KEY_BLACKLIST = new Set([
 
-     "parent",
 
-     "leadingComments",
 
-     "trailingComments"
 
- ]);
 
- /**
 
-  * Check whether a given key should be used or not.
 
-  * @param {string} key The key to check.
 
-  * @returns {boolean} `true` if the key should be used.
 
-  */
 
- function filterKey(key) {
 
-     return !KEY_BLACKLIST.has(key) && key[0] !== "_";
 
- }
 
- //------------------------------------------------------------------------------
 
- // Public interfaces
 
- //------------------------------------------------------------------------------
 
- module.exports = Object.freeze({
 
-     /**
 
-      * Visitor keys.
 
-      * @type {{ [type: string]: string[] | undefined }}
 
-      */
 
-     KEYS,
 
-     /**
 
-      * Get visitor keys of a given node.
 
-      * @param {Object} node The AST node to get keys.
 
-      * @returns {string[]} Visitor keys of the node.
 
-      */
 
-     getKeys(node) {
 
-         return Object.keys(node).filter(filterKey);
 
-     },
 
-     // Disable valid-jsdoc rule because it reports syntax error on the type of @returns.
 
-     // eslint-disable-next-line valid-jsdoc
 
-     /**
 
-      * Make the union set with `KEYS` and given keys.
 
-      * @param {Object} additionalKeys The additional keys.
 
-      * @returns {{ [type: string]: string[] | undefined }} The union set.
 
-      */
 
-     unionWith(additionalKeys) {
 
-         const retv = Object.assign({}, KEYS);
 
-         for (const type of Object.keys(additionalKeys)) {
 
-             if (retv.hasOwnProperty(type)) {
 
-                 const keys = new Set(additionalKeys[type]);
 
-                 for (const key of retv[type]) {
 
-                     keys.add(key);
 
-                 }
 
-                 retv[type] = Object.freeze(Array.from(keys));
 
-             } else {
 
-                 retv[type] = Object.freeze(Array.from(additionalKeys[type]));
 
-             }
 
-         }
 
-         return Object.freeze(retv);
 
-     }
 
- });
 
 
  |