summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/node_modules/unist-util-visit/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/node_modules/unist-util-visit/index.js')
-rw-r--r--tools/node_modules/eslint/node_modules/unist-util-visit/index.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/tools/node_modules/eslint/node_modules/unist-util-visit/index.js b/tools/node_modules/eslint/node_modules/unist-util-visit/index.js
new file mode 100644
index 0000000000..d51a97513b
--- /dev/null
+++ b/tools/node_modules/eslint/node_modules/unist-util-visit/index.js
@@ -0,0 +1,55 @@
+'use strict';
+
+/* Expose. */
+module.exports = visit;
+
+var is = require('unist-util-is');
+
+/* Visit. */
+function visit(tree, test, visitor, reverse) {
+ if (typeof test === 'function' && typeof visitor !== 'function') {
+ reverse = visitor;
+ visitor = test;
+ test = null;
+ }
+
+ one(tree);
+
+ /* Visit a single node. */
+ function one(node, index, parent) {
+ var result;
+
+ index = index || (parent ? 0 : null);
+
+ if (!test || node.type === test || is(test, node, index, parent || null)) {
+ result = visitor(node, index, parent || null);
+ }
+
+ if (node.children && result !== false) {
+ return all(node.children, node);
+ }
+
+ return result;
+ }
+
+ /* Visit children in `parent`. */
+ function all(children, parent) {
+ var step = reverse ? -1 : 1;
+ var max = children.length;
+ var min = -1;
+ var index = (reverse ? max : min) + step;
+ var child;
+
+ while (index > min && index < max) {
+ child = children[index];
+
+ if (child && one(child, index, parent) === false) {
+ return false;
+ }
+
+ index += step;
+ }
+
+ return true;
+ }
+}