.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / esrecurse / esrecurse.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/esrecurse/esrecurse.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/esrecurse/esrecurse.js
new file mode 100644 (file)
index 0000000..15d57df
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+  Copyright (C) 2014 Yusuke Suzuki <utatane.tea@gmail.com>
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+(function () {
+    'use strict';
+
+    var estraverse = require('estraverse');
+
+    function isNode(node) {
+        if (node == null) {
+            return false;
+        }
+        return typeof node === 'object' && typeof node.type === 'string';
+    }
+
+    function isProperty(nodeType, key) {
+        return (nodeType === estraverse.Syntax.ObjectExpression || nodeType === estraverse.Syntax.ObjectPattern) && key === 'properties';
+    }
+
+    function Visitor(visitor, options) {
+        options = options || {};
+
+        this.__visitor = visitor ||  this;
+        this.__childVisitorKeys = options.childVisitorKeys
+            ? Object.assign({}, estraverse.VisitorKeys, options.childVisitorKeys)
+            : estraverse.VisitorKeys;
+        if (options.fallback === 'iteration') {
+            this.__fallback = Object.keys;
+        } else if (typeof options.fallback === 'function') {
+            this.__fallback = options.fallback;
+        }
+    }
+
+    /* Default method for visiting children.
+     * When you need to call default visiting operation inside custom visiting
+     * operation, you can use it with `this.visitChildren(node)`.
+     */
+    Visitor.prototype.visitChildren = function (node) {
+        var type, children, i, iz, j, jz, child;
+
+        if (node == null) {
+            return;
+        }
+
+        type = node.type || estraverse.Syntax.Property;
+
+        children = this.__childVisitorKeys[type];
+        if (!children) {
+            if (this.__fallback) {
+                children = this.__fallback(node);
+            } else {
+                throw new Error('Unknown node type ' + type + '.');
+            }
+        }
+
+        for (i = 0, iz = children.length; i < iz; ++i) {
+            child = node[children[i]];
+            if (child) {
+                if (Array.isArray(child)) {
+                    for (j = 0, jz = child.length; j < jz; ++j) {
+                        if (child[j]) {
+                            if (isNode(child[j]) || isProperty(type, children[i])) {
+                                this.visit(child[j]);
+                            }
+                        }
+                    }
+                } else if (isNode(child)) {
+                    this.visit(child);
+                }
+            }
+        }
+    };
+
+    /* Dispatching node. */
+    Visitor.prototype.visit = function (node) {
+        var type;
+
+        if (node == null) {
+            return;
+        }
+
+        type = node.type || estraverse.Syntax.Property;
+        if (this.__visitor[type]) {
+            this.__visitor[type].call(this, node);
+            return;
+        }
+        this.visitChildren(node);
+    };
+
+    exports.version = require('./package.json').version;
+    exports.Visitor = Visitor;
+    exports.visit = function (node, visitor, options) {
+        var v = new Visitor(visitor, options);
+        v.visit(node);
+    };
+}());
+/* vim: set sw=4 ts=4 et tw=80 : */