summaryrefslogtreecommitdiff
path: root/tools/node_modules/babel-eslint/lib/babylon-to-espree/toAST.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/babel-eslint/lib/babylon-to-espree/toAST.js')
-rw-r--r--tools/node_modules/babel-eslint/lib/babylon-to-espree/toAST.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/tools/node_modules/babel-eslint/lib/babylon-to-espree/toAST.js b/tools/node_modules/babel-eslint/lib/babylon-to-espree/toAST.js
new file mode 100644
index 0000000000..b3da41f0cb
--- /dev/null
+++ b/tools/node_modules/babel-eslint/lib/babylon-to-espree/toAST.js
@@ -0,0 +1,118 @@
+"use strict";
+
+var t = require("@babel/types");
+var convertComments = require("./convertComments");
+
+module.exports = function(ast, traverse, code) {
+ var state = { source: code };
+
+ // Monkey patch visitor keys in order to be able to traverse the estree nodes
+ t.VISITOR_KEYS.Property = t.VISITOR_KEYS.ObjectProperty;
+ t.VISITOR_KEYS.MethodDefinition = [
+ "key",
+ "value",
+ "decorators",
+ "returnType",
+ "typeParameters",
+ ];
+
+ traverse(ast, astTransformVisitor, null, state);
+
+ delete t.VISITOR_KEYS.Property;
+ delete t.VISITOR_KEYS.MethodDefinition;
+};
+
+var astTransformVisitor = {
+ noScope: true,
+ enter(path) {
+ var node = path.node;
+
+ // private var to track original node type
+ node._babelType = node.type;
+
+ if (node.innerComments) {
+ node.trailingComments = node.innerComments;
+ delete node.innerComments;
+ }
+
+ if (node.trailingComments) {
+ convertComments(node.trailingComments);
+ }
+
+ if (node.leadingComments) {
+ convertComments(node.leadingComments);
+ }
+ },
+ exit(path) {
+ var node = path.node;
+
+ if (path.isJSXText()) {
+ node.type = "Literal";
+ }
+
+ if (
+ path.isRestElement() &&
+ path.parent &&
+ path.parent.type === "ObjectPattern"
+ ) {
+ node.type = "ExperimentalRestProperty";
+ }
+
+ if (
+ path.isSpreadElement() &&
+ path.parent &&
+ path.parent.type === "ObjectExpression"
+ ) {
+ node.type = "ExperimentalSpreadProperty";
+ }
+
+ if (path.isTypeParameter()) {
+ node.type = "Identifier";
+ node.typeAnnotation = node.bound;
+ delete node.bound;
+ }
+
+ // flow: prevent "no-undef"
+ // for "Component" in: "let x: React.Component"
+ if (path.isQualifiedTypeIdentifier()) {
+ delete node.id;
+ }
+ // for "b" in: "var a: { b: Foo }"
+ if (path.isObjectTypeProperty()) {
+ delete node.key;
+ }
+ // for "indexer" in: "var a: {[indexer: string]: number}"
+ if (path.isObjectTypeIndexer()) {
+ delete node.id;
+ }
+ // for "param" in: "var a: { func(param: Foo): Bar };"
+ if (path.isFunctionTypeParam()) {
+ delete node.name;
+ }
+
+ // modules
+
+ if (path.isImportDeclaration()) {
+ delete node.isType;
+ }
+
+ // template string range fixes
+ if (path.isTemplateLiteral()) {
+ for (var j = 0; j < node.quasis.length; j++) {
+ var q = node.quasis[j];
+ q.range[0] -= 1;
+ if (q.tail) {
+ q.range[1] += 1;
+ } else {
+ q.range[1] += 2;
+ }
+ q.loc.start.column -= 1;
+ if (q.tail) {
+ q.loc.end.column += 1;
+ } else {
+ q.loc.end.column += 2;
+ }
+ }
+ }
+ },
+};