--- /dev/null
+/**
+ * @fileoverview The visitor keys for the node types Espree supports
+ * @author Nicholas C. Zakas
+ *
+ * This file contains code from estraverse-fb.
+ *
+ * The MIT license. Copyright (c) 2014 Ingvar Stepanyan
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+// None!
+
+//------------------------------------------------------------------------------
+// Public
+//------------------------------------------------------------------------------
+
+module.exports = {
+
+ // ECMAScript
+ AssignmentExpression: ["left", "right"],
+ AssignmentPattern: ["left", "right"],
+ ArrayExpression: ["elements"],
+ ArrayPattern: ["elements"],
+ ArrowFunctionExpression: ["params", "body"],
+ BlockStatement: ["body"],
+ BinaryExpression: ["left", "right"],
+ BreakStatement: ["label"],
+ CallExpression: ["callee", "arguments"],
+ CatchClause: ["param", "body"],
+ ClassBody: ["body"],
+ ClassDeclaration: ["id", "superClass", "body"],
+ ClassExpression: ["id", "superClass", "body"],
+ ConditionalExpression: ["test", "consequent", "alternate"],
+ ContinueStatement: ["label"],
+ DebuggerStatement: [],
+ DirectiveStatement: [],
+ DoWhileStatement: ["body", "test"],
+ EmptyStatement: [],
+ ExportAllDeclaration: ["source"],
+ ExportDefaultDeclaration: ["declaration"],
+ ExportNamedDeclaration: ["declaration", "specifiers", "source"],
+ ExportSpecifier: ["exported", "local"],
+ ExpressionStatement: ["expression"],
+ ForStatement: ["init", "test", "update", "body"],
+ ForInStatement: ["left", "right", "body"],
+ ForOfStatement: ["left", "right", "body"],
+ FunctionDeclaration: ["id", "params", "body"],
+ FunctionExpression: ["id", "params", "body"],
+ Identifier: [],
+ IfStatement: ["test", "consequent", "alternate"],
+ ImportDeclaration: ["specifiers", "source"],
+ ImportDefaultSpecifier: ["local"],
+ ImportNamespaceSpecifier: ["local"],
+ ImportSpecifier: ["imported", "local"],
+ Literal: [],
+ LabeledStatement: ["label", "body"],
+ LogicalExpression: ["left", "right"],
+ MemberExpression: ["object", "property"],
+ MetaProperty: ["meta", "property"],
+ MethodDefinition: ["key", "value"],
+ ModuleSpecifier: [],
+ NewExpression: ["callee", "arguments"],
+ ObjectExpression: ["properties"],
+ ObjectPattern: ["properties"],
+ Program: ["body"],
+ Property: ["key", "value"],
+ RestElement: ["argument"],
+ ReturnStatement: ["argument"],
+ SequenceExpression: ["expressions"],
+ SpreadElement: ["argument"],
+ Super: [],
+ SwitchStatement: ["discriminant", "cases"],
+ SwitchCase: ["test", "consequent"],
+ TaggedTemplateExpression: ["tag", "quasi"],
+ TemplateElement: [],
+ TemplateLiteral: ["quasis", "expressions"],
+ ThisExpression: [],
+ ThrowStatement: ["argument"],
+ TryStatement: ["block", "handler", "finalizer"],
+ UnaryExpression: ["argument"],
+ UpdateExpression: ["argument"],
+ VariableDeclaration: ["declarations"],
+ VariableDeclarator: ["id", "init"],
+ WhileStatement: ["test", "body"],
+ WithStatement: ["object", "body"],
+ YieldExpression: ["argument"],
+
+ // JSX
+ JSXIdentifier: [],
+ JSXNamespacedName: ["namespace", "name"],
+ JSXMemberExpression: ["object", "property"],
+ JSXEmptyExpression: [],
+ JSXExpressionContainer: ["expression"],
+ JSXElement: ["openingElement", "closingElement", "children"],
+ JSXClosingElement: ["name"],
+ JSXOpeningElement: ["name", "attributes"],
+ JSXAttribute: ["name", "value"],
+ JSXText: null,
+ JSXSpreadAttribute: ["argument"]
+};