From b8a01a991914898d1a4b53aafbaa4c966b49811d Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 14 May 2015 19:12:26 +0100 Subject: [PATCH] move traversal scope logic and binding into it's own folder, rename Scope#generateTemp to generateDeclaredUidIdentifier, rename Scope#generateUidBasedOnNode to Scope#generateUidIdentifierBasedOnNode --- .../helpers/explode-assignable-expression.js | 4 +-- .../helpers/memoise-decorators.js | 2 +- src/babel/transformation/modules/common.js | 4 +-- .../transformers/es6/classes.js | 2 +- .../transformers/es6/destructuring.js | 8 +++--- .../transformers/es6/properties.computed.js | 2 +- .../transformation/transformers/es6/spread.js | 2 +- .../transformers/es7/comprehensions.js | 2 +- .../transformers/es7/function-bind.js | 2 +- .../transformers/spec/proto-to-assign.js | 2 +- src/babel/traversal/path/index.js | 2 +- src/babel/traversal/{ => scope}/binding.js | 2 +- .../traversal/{scope.js => scope/index.js} | 28 ++++++++++--------- 13 files changed, 32 insertions(+), 30 deletions(-) rename src/babel/traversal/{ => scope}/binding.js (97%) rename src/babel/traversal/{scope.js => scope/index.js} (96%) diff --git a/src/babel/transformation/helpers/explode-assignable-expression.js b/src/babel/transformation/helpers/explode-assignable-expression.js index 4c0ed87664..6575107292 100644 --- a/src/babel/transformation/helpers/explode-assignable-expression.js +++ b/src/babel/transformation/helpers/explode-assignable-expression.js @@ -26,7 +26,7 @@ var getObjRef = function (node, nodes, file, scope) { throw new Error(`We can't explode this node type ${node.type}`); } - var temp = scope.generateUidBasedOnNode(ref); + var temp = scope.generateUidIdentifierBasedOnNode(ref); nodes.push(t.variableDeclaration("var", [ t.variableDeclarator(temp, ref) ])); @@ -38,7 +38,7 @@ var getPropRef = function (node, nodes, file, scope) { var key = t.toComputedKey(node, prop); if (t.isLiteral(key)) return key; - var temp = scope.generateUidBasedOnNode(prop); + var temp = scope.generateUidIdentifierBasedOnNode(prop); nodes.push(t.variableDeclaration("var", [ t.variableDeclarator(temp, prop) ])); diff --git a/src/babel/transformation/helpers/memoise-decorators.js b/src/babel/transformation/helpers/memoise-decorators.js index 25d1032b1d..17d2ae3234 100644 --- a/src/babel/transformation/helpers/memoise-decorators.js +++ b/src/babel/transformation/helpers/memoise-decorators.js @@ -6,7 +6,7 @@ export default function (decorators, scope) { var expression = decorator.expression; if (!t.isMemberExpression(expression)) continue; - var temp = scope.generateMemoisedReference(expression.object); + var temp = scope.maybeGenerateMemoised(expression.object); var ref; var nodes = []; diff --git a/src/babel/transformation/modules/common.js b/src/babel/transformation/modules/common.js index 90261a7b3b..20215af7c5 100644 --- a/src/babel/transformation/modules/common.js +++ b/src/babel/transformation/modules/common.js @@ -52,7 +52,7 @@ export default class CommonJSFormatter extends DefaultFormatter { } else if (this.noInteropRequireImport) { this.internalRemap[variableName.name] = t.memberExpression(ref, t.identifier("default")); } else { - var uid = this.scope.generateUidBasedOnNode(node, "import"); + var uid = this.scope.generateUidIdentifierBasedOnNode(node, "import"); nodes.push(t.variableDeclaration("var", [ t.variableDeclarator(uid, t.callExpression(this.file.addHelper("interop-require-default"), [ref])) @@ -111,7 +111,7 @@ export default class CommonJSFormatter extends DefaultFormatter { } else if (this.isModuleType(node, "absoluteDefault")) { call = t.memberExpression(call, t.identifier("default")); } else { - uid = this.scope.generateUidBasedOnNode(node, "import"); + uid = this.scope.generateUidIdentifierBasedOnNode(node, "import"); } uid = uid || node.specifiers[0].local; diff --git a/src/babel/transformation/transformers/es6/classes.js b/src/babel/transformation/transformers/es6/classes.js index 7deabb6fb2..c86c38f6fa 100644 --- a/src/babel/transformation/transformers/es6/classes.js +++ b/src/babel/transformation/transformers/es6/classes.js @@ -173,7 +173,7 @@ class ClassTransformer { if (this.hasSuper) { closureArgs.push(superName); - superName = this.scope.generateUidBasedOnNode(superName); + superName = this.scope.generateUidIdentifierBasedOnNode(superName); closureParams.push(superName); this.superName = superName; diff --git a/src/babel/transformation/transformers/es6/destructuring.js b/src/babel/transformation/transformers/es6/destructuring.js index ef02dbcc88..47c751827f 100644 --- a/src/babel/transformation/transformers/es6/destructuring.js +++ b/src/babel/transformation/transformers/es6/destructuring.js @@ -295,7 +295,7 @@ class DestructuringTransformer { // we need to assign the current value of the assignment to avoid evaluating // it more than once - var tempValueRef = this.scope.generateUidBasedOnNode(valueRef); + var tempValueRef = this.scope.generateUidIdentifierBasedOnNode(valueRef); var declar = t.variableDeclaration("var", [ t.variableDeclarator(tempValueRef, valueRef) @@ -377,7 +377,7 @@ class DestructuringTransformer { // only evaluated once if (pattern.properties.length > 1 && t.isMemberExpression(objRef)) { - var temp = this.scope.generateUidBasedOnNode(objRef, this.file); + var temp = this.scope.generateUidIdentifierBasedOnNode(objRef, this.file); this.nodes.push(this.buildVariableDeclaration(temp, objRef)); objRef = temp; } @@ -461,7 +461,7 @@ class DestructuringTransformer { // array arrayRef = toArray; } else { - arrayRef = this.scope.generateUidBasedOnNode(arrayRef); + arrayRef = this.scope.generateUidIdentifierBasedOnNode(arrayRef); this.arrays[arrayRef.name] = true; this.nodes.push(this.buildVariableDeclaration(arrayRef, toArray)); } @@ -500,7 +500,7 @@ class DestructuringTransformer { var shouldMemoise = true; if (!t.isArrayExpression(ref) && !t.isMemberExpression(ref)) { - var memo = this.scope.generateMemoisedReference(ref, true); + var memo = this.scope.maybeGenerateMemoised(ref, true); if (memo) { this.nodes.push(this.buildVariableDeclaration(memo, ref)); ref = memo; diff --git a/src/babel/transformation/transformers/es6/properties.computed.js b/src/babel/transformation/transformers/es6/properties.computed.js index 9c477f8348..92b8ff87ec 100644 --- a/src/babel/transformation/transformers/es6/properties.computed.js +++ b/src/babel/transformation/transformers/es6/properties.computed.js @@ -75,7 +75,7 @@ export var ObjectExpression = { if (!hasComputed) return; var initProps = []; - var objId = scope.generateUidBasedOnNode(parent); + var objId = scope.generateUidIdentifierBasedOnNode(parent); // diff --git a/src/babel/transformation/transformers/es6/spread.js b/src/babel/transformation/transformers/es6/spread.js index e7c403588a..73c9f782b1 100644 --- a/src/babel/transformation/transformers/es6/spread.js +++ b/src/babel/transformation/transformers/es6/spread.js @@ -84,7 +84,7 @@ export function CallExpression(node, parent, scope) { var callee = node.callee; if (this.get("callee").isMemberExpression()) { - var temp = scope.generateMemoisedReference(callee.object); + var temp = scope.maybeGenerateMemoised(callee.object); if (temp) { callee.object = t.assignmentExpression("=", temp, callee.object); contextLiteral = temp; diff --git a/src/babel/transformation/transformers/es7/comprehensions.js b/src/babel/transformation/transformers/es7/comprehensions.js index 5d89bdbbec..e3b51ed050 100644 --- a/src/babel/transformation/transformers/es7/comprehensions.js +++ b/src/babel/transformation/transformers/es7/comprehensions.js @@ -26,7 +26,7 @@ function generator(node) { } function array(node, parent, scope, file) { - var uid = scope.generateUidBasedOnNode(parent); + var uid = scope.generateUidIdentifierBasedOnNode(parent); var container = util.template("array-comprehension-container", { KEY: uid diff --git a/src/babel/transformation/transformers/es7/function-bind.js b/src/babel/transformation/transformers/es7/function-bind.js index 90ff4e4130..7bd6f58a46 100644 --- a/src/babel/transformation/transformers/es7/function-bind.js +++ b/src/babel/transformation/transformers/es7/function-bind.js @@ -11,7 +11,7 @@ function getTempId(scope) { var id = scope.path.getData("functionBind"); if (id) return id; - id = scope.generateTemp("context"); + id = scope.generateDeclaredUidIdentifier("context"); return scope.path.setData("functionBind", id); } diff --git a/src/babel/transformation/transformers/spec/proto-to-assign.js b/src/babel/transformation/transformers/spec/proto-to-assign.js index 69fd3ad618..6f1443f43c 100644 --- a/src/babel/transformation/transformers/spec/proto-to-assign.js +++ b/src/babel/transformation/transformers/spec/proto-to-assign.js @@ -24,7 +24,7 @@ export function AssignmentExpression(node, parent, scope, file) { var nodes = []; var left = node.left.object; - var temp = scope.generateMemoisedReference(left); + var temp = scope.maybeGenerateMemoised(left); nodes.push(t.expressionStatement(t.assignmentExpression("=", temp, left))); nodes.push(buildDefaultsCallExpression(node, temp, file)); diff --git a/src/babel/traversal/path/index.js b/src/babel/traversal/path/index.js index 4194110dba..e69f25106c 100644 --- a/src/babel/traversal/path/index.js +++ b/src/babel/traversal/path/index.js @@ -287,7 +287,7 @@ export default class TraversalPath { return this.parentPath.insertAfter(nodes); } else if (this.isPreviousType("Expression") || (this.parentPath.isForStatement() && this.key === "init")) { if (this.node) { - var temp = this.scope.generateTemp(); + var temp = this.scope.generateDeclaredUidIdentifier(); nodes.unshift(t.expressionStatement(t.assignmentExpression("=", temp, this.node))); nodes.push(t.expressionStatement(temp)); } diff --git a/src/babel/traversal/binding.js b/src/babel/traversal/scope/binding.js similarity index 97% rename from src/babel/traversal/binding.js rename to src/babel/traversal/scope/binding.js index 58a09ce951..9e8b9eb181 100644 --- a/src/babel/traversal/binding.js +++ b/src/babel/traversal/scope/binding.js @@ -1,4 +1,4 @@ -import * as t from "../types"; +import * as t from "../../types"; export default class Binding { constructor({ identifier, scope, path, kind }) { diff --git a/src/babel/traversal/scope.js b/src/babel/traversal/scope/index.js similarity index 96% rename from src/babel/traversal/scope.js rename to src/babel/traversal/scope/index.js index e77d9efb86..2ebde17cf1 100644 --- a/src/babel/traversal/scope.js +++ b/src/babel/traversal/scope/index.js @@ -1,15 +1,15 @@ import includes from "lodash/collection/includes"; -import { explode } from "./visitors"; -import traverse from "./index"; +import { explode } from "../visitors"; +import traverse from "../index"; import defaults from "lodash/object/defaults"; -import * as messages from "../messages"; +import * as messages from "../../messages"; import Binding from "./binding"; import globals from "globals"; import flatten from "lodash/array/flatten"; import extend from "lodash/object/extend"; -import object from "../helpers/object"; +import object from "../../helpers/object"; import each from "lodash/collection/each"; -import * as t from "../types"; +import * as t from "../../types"; var functionVariableVisitor = { enter(node, parent, scope, state) { @@ -167,7 +167,7 @@ export default class Scope { * Description */ - generateTemp(name: string = "temp") { + generateDeclaredUidIdentifier(name: string = "temp") { var id = this.generateUidIdentifier(name); this.push({ id }); return id; @@ -213,7 +213,7 @@ export default class Scope { * Description */ - generateUidBasedOnNode(parent: Object, defaultName?: String): Object { + generateUidIdentifierBasedOnNode(parent: Object, defaultName?: String): Object { var node = parent; if (t.isAssignmentExpression(parent)) { @@ -289,12 +289,14 @@ export default class Scope { * Description */ - generateMemoisedReference(node: Object, dontPush?: boolean): ?Object { - if (this.isStatic(node)) return null; - - var id = this.generateUidBasedOnNode(node); - if (!dontPush) this.push({ id }); - return id; + maybeGenerateMemoised(node: Object, dontPush?: boolean): ?Object { + if (this.isStatic(node)) { + return null; + } else { + var id = this.generateUidIdentifierBasedOnNode(node); + if (!dontPush) this.push({ id }); + return id; + } } /**