From 454933ef7643dd30b625992cddc8420887cf510e Mon Sep 17 00:00:00 2001 From: Logan Smyth Date: Mon, 13 Feb 2017 18:15:50 -0800 Subject: [PATCH] Revert "Rewrite Hub as interface #5047" (#5306) --- .../src/transformation/file/index.js | 21 +++---------------- packages/babel-traverse/src/hub.js | 14 +++---------- packages/babel-traverse/src/index.js | 16 +++++++------- packages/babel-traverse/src/path/index.js | 10 +++++---- .../babel-traverse/src/path/introspection.js | 8 +++---- packages/babel-traverse/src/scope/index.js | 9 ++++---- packages/babel-traverse/test/hub.js | 13 ------------ 7 files changed, 27 insertions(+), 64 deletions(-) delete mode 100644 packages/babel-traverse/test/hub.js diff --git a/packages/babel-core/src/transformation/file/index.js b/packages/babel-core/src/transformation/file/index.js index 9866b147a808..50b641c19435 100644 --- a/packages/babel-core/src/transformation/file/index.js +++ b/packages/babel-core/src/transformation/file/index.js @@ -6,8 +6,7 @@ import convertSourceMap from "convert-source-map"; import OptionManager from "./options/option-manager"; import type Pipeline from "../pipeline"; import PluginPass from "../plugin-pass"; -import { NodePath, Scope } from "babel-traverse"; -import type { HubInterface } from "babel-traverse"; +import { NodePath, Hub, Scope } from "babel-traverse"; import sourceMap from "source-map"; import generate from "babel-generator"; import codeFrame from "babel-code-frame"; @@ -99,21 +98,7 @@ export default class File extends Store { this.code = ""; this.shebang = ""; - this.hub = { - // keep it for the usage in babel-core, ex: path.hub.file.opts.filename - file: this, - mark: (type: string, message: string, loc: Object) => { - this.metadata.marked.push({ - type, - message, - loc - }); - }, - addHelper: this.addHelper.bind(this), - getCode: () => this.code, - getScope: () => this.scope, - buildError: this.buildCodeFrameError.bind(this) - }; + this.hub = new Hub(this); } static helpers: Array; @@ -133,7 +118,7 @@ export default class File extends Store { ast: Object; scope: Scope; metadata: BabelFileMetadata; - hub: HubInterface; + hub: Hub; code: string; shebang: string; diff --git a/packages/babel-traverse/src/hub.js b/packages/babel-traverse/src/hub.js index d4151a16ed59..f05eaa813680 100644 --- a/packages/babel-traverse/src/hub.js +++ b/packages/babel-traverse/src/hub.js @@ -1,14 +1,6 @@ -import Scope from "./scope"; -export interface HubInterface { - mark?: (type: string, message: string) => void; - addHelper?: (name: string) => Object; - getScope?: () => Scope; - getCode?: () => string; - buildError:(node: Object, msg: string, Error: Error) => Error; -} - export default class Hub { - buildError(node, msg, BuildError = TypeError): Error { - return new BuildError(msg); + constructor(file, options) { + this.file = file; + this.options = options; } } diff --git a/packages/babel-traverse/src/index.js b/packages/babel-traverse/src/index.js index 6d6215e30805..1c5c96b58c5d 100644 --- a/packages/babel-traverse/src/index.js +++ b/packages/babel-traverse/src/index.js @@ -5,12 +5,10 @@ import includes from "lodash/includes"; import * as t from "babel-types"; import * as cache from "./cache"; -import NodePath from "./path"; -import Scope from "./scope"; -import Hub from "./hub"; - -export { visitors, NodePath, Scope, Hub }; -export type { HubInterface } from "./hub"; +export { default as NodePath } from "./path"; +export { default as Scope } from "./scope"; +export { default as Hub } from "./hub"; +export { visitors }; export default function traverse( parent: Object | Array, @@ -37,9 +35,9 @@ traverse.visitors = visitors; traverse.verify = visitors.verify; traverse.explode = visitors.explode; -traverse.NodePath = NodePath; -traverse.Scope = Scope; -traverse.Hub = Hub; +traverse.NodePath = require("./path"); +traverse.Scope = require("./scope"); +traverse.Hub = require("./hub"); traverse.cheap = function (node, enter) { return t.traverseFast(node, enter); diff --git a/packages/babel-traverse/src/path/index.js b/packages/babel-traverse/src/path/index.js index 41d60c3e4780..c66d0e848245 100644 --- a/packages/babel-traverse/src/path/index.js +++ b/packages/babel-traverse/src/path/index.js @@ -114,7 +114,7 @@ export default class NodePath { } buildCodeFrameError(msg: string, Error: typeof Error = SyntaxError): Error { - return this.hub.buildError(this.node, msg, Error); + return this.hub.file.buildCodeFrameError(this.node, msg, Error); } traverse(visitor: Object, state?: any) { @@ -122,9 +122,11 @@ export default class NodePath { } mark(type: string, message: string) { - if (this.hub.mark) { - this.hub.mark(type, message, this.node.loc); - } + this.hub.file.metadata.marked.push({ + type, + message, + loc: this.node.loc + }); } set(key: string, node: Object) { diff --git a/packages/babel-traverse/src/path/introspection.js b/packages/babel-traverse/src/path/introspection.js index 0a722e61be8c..e8e54f18c01f 100644 --- a/packages/babel-traverse/src/path/introspection.js +++ b/packages/babel-traverse/src/path/introspection.js @@ -235,12 +235,10 @@ export function referencesImport(moduleSource, importName) { export function getSource() { const node = this.node; if (node.end) { - const code = this.hub.getCode(); - if (code) { - return code.slice(node.start, node.end); - } + return this.hub.file.code.slice(node.start, node.end); + } else { + return ""; } - return ""; } export function willIMaybeExecuteBefore(target) { diff --git a/packages/babel-traverse/src/scope/index.js b/packages/babel-traverse/src/scope/index.js index 1df4c8e485b9..a0b26bc57320 100644 --- a/packages/babel-traverse/src/scope/index.js +++ b/packages/babel-traverse/src/scope/index.js @@ -346,8 +346,7 @@ export default class Scope { local.kind === "param" && (kind === "let" || kind === "const"); if (duplicate) { - const errorMsg = messages.get("scopeDuplicateDeclaration", name); - throw this.hub.buildError ? this.hub.buildError(id, errorMsg, TypeError) : new TypeError(errorMsg); + throw this.hub.file.buildCodeFrameError(id, messages.get("scopeDuplicateDeclaration", name), TypeError); } } @@ -386,6 +385,8 @@ export default class Scope { } toArray(node: Object, i?: number) { + const file = this.hub.file; + if (t.isIdentifier(node)) { const binding = this.getBinding(node.name); if (binding && binding.constant && binding.path.isGenericType("Array")) return node; @@ -418,9 +419,9 @@ export default class Scope { } else if (i) { args.push(t.numericLiteral(i)); helperName = "slicedToArray"; - // TODO if (this.hub.isLoose("es6.forOf")) helperName += "-loose"; + // TODO if (this.hub.file.isLoose("es6.forOf")) helperName += "-loose"; } - return t.callExpression(this.hub.addHelper(helperName), args); + return t.callExpression(file.addHelper(helperName), args); } hasLabel(name: string) { diff --git a/packages/babel-traverse/test/hub.js b/packages/babel-traverse/test/hub.js deleted file mode 100644 index a3d67bb9d88c..000000000000 --- a/packages/babel-traverse/test/hub.js +++ /dev/null @@ -1,13 +0,0 @@ -const assert = require("assert"); -const Hub = require("../lib").default.Hub; - -describe("hub", function () { - it("default buildError should return TypeError", function () { - const hub = new Hub(); - const msg = "test_msg"; - assert.deepEqual( - hub.buildError(null, msg), - new TypeError(msg) - ); - }); -});