--- /dev/null
+'use strict'
+
+module.exports = visit
+
+var visitParents = require('unist-util-visit-parents')
+
+var CONTINUE = visitParents.CONTINUE
+var SKIP = visitParents.SKIP
+var EXIT = visitParents.EXIT
+
+visit.CONTINUE = CONTINUE
+visit.SKIP = SKIP
+visit.EXIT = EXIT
+
+function visit(tree, test, visitor, reverse) {
+ if (typeof test === 'function' && typeof visitor !== 'function') {
+ reverse = visitor
+ visitor = test
+ test = null
+ }
+
+ visitParents(tree, test, overload, reverse)
+
+ function overload(node, parents) {
+ var parent = parents[parents.length - 1]
+ var index = parent ? parent.children.indexOf(node) : null
+ return visitor(node, index, parent)
+ }
+}