summaryrefslogtreecommitdiff
path: root/tools/node_modules/babel-eslint/node_modules/eslint-visitor-keys/lib/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/babel-eslint/node_modules/eslint-visitor-keys/lib/index.js')
-rw-r--r--tools/node_modules/babel-eslint/node_modules/eslint-visitor-keys/lib/index.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/tools/node_modules/babel-eslint/node_modules/eslint-visitor-keys/lib/index.js b/tools/node_modules/babel-eslint/node_modules/eslint-visitor-keys/lib/index.js
new file mode 100644
index 0000000000..cd8a326083
--- /dev/null
+++ b/tools/node_modules/babel-eslint/node_modules/eslint-visitor-keys/lib/index.js
@@ -0,0 +1,81 @@
+/**
+ * @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);
+ }
+});