From a55f210c7f01b2b26fe052f9e9cdc19c41f3d0be Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 10 Nov 2015 03:40:35 -0800 Subject: [PATCH 1/2] fix buildExternalHelpers whitelist not including underscored helpers - fixes #2940 --- .../src/tools/build-external-helpers.js | 20 ++++++++++++++++++- packages/babel-core/test/api.js | 5 +++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/babel-core/src/tools/build-external-helpers.js b/packages/babel-core/src/tools/build-external-helpers.js index 9bc0221977..fd1e91940b 100644 --- a/packages/babel-core/src/tools/build-external-helpers.js +++ b/packages/babel-core/src/tools/build-external-helpers.js @@ -73,8 +73,26 @@ function buildVar(namespace, builder) { } function buildHelpers(body, namespace, whitelist) { + function shouldIgnore(name) { + if (!whitelist) { + return false; + } + + // check for the raw name + if (whitelist.indexOf(name) >= 0) { + return false; + } + + // typeof -> _typeof + if (name[0] === "_" && whitelist.indexOf(name.slice(1)) >= 0) { + return false; + } + + return true; + } + each(helpers.list, function (name) { - if (whitelist && whitelist.indexOf(name) === -1) return; + if (shouldIgnore(name)) return; let key = t.identifier(t.toIdentifier(name)); body.push(t.expressionStatement( diff --git a/packages/babel-core/test/api.js b/packages/babel-core/test/api.js index e279d5f613..c9efbb2e59 100644 --- a/packages/babel-core/test/api.js +++ b/packages/babel-core/test/api.js @@ -387,5 +387,10 @@ suite("api", function () { assert.ok(script.indexOf("classCallCheck") === -1); assert.ok(script.indexOf("inherits") === -1); }); + + test("underscored", function () { + var script = buildExternalHelpers(["typeof"]); + assert.ok(script.indexOf("typeof") >= 0); + }); }); }); From 884252b90ff6c2abdf7291cbda49f59afd1d38ee Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 10 Nov 2015 14:26:40 -0800 Subject: [PATCH 2/2] increase test coverage --- packages/babel-code-frame/test/index.js | 5 +++++ .../transformation/file/options/parsers.js | 4 ---- packages/babel-core/test/api.js | 20 ++++++++++++++----- packages/babel-core/test/fixtures/api/file.js | 1 + .../package.json | 2 +- .../src/visit.js | 8 +------- 6 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 packages/babel-code-frame/test/index.js create mode 100644 packages/babel-core/test/fixtures/api/file.js diff --git a/packages/babel-code-frame/test/index.js b/packages/babel-code-frame/test/index.js new file mode 100644 index 0000000000..02a36f9f8e --- /dev/null +++ b/packages/babel-code-frame/test/index.js @@ -0,0 +1,5 @@ +var buildCodeFrame = require(".."); + +suite("babel-code-frame", function () { + +}); diff --git a/packages/babel-core/src/transformation/file/options/parsers.js b/packages/babel-core/src/transformation/file/options/parsers.js index 5b5c57faaa..840c6e5f6c 100644 --- a/packages/babel-core/src/transformation/file/options/parsers.js +++ b/packages/babel-core/src/transformation/file/options/parsers.js @@ -3,10 +3,6 @@ import slash from "slash"; import * as util from "../../../util"; -export function number(val: any): number { - return +val; -} - export let filename = slash; export function boolean(val: any): boolean { diff --git a/packages/babel-core/test/api.js b/packages/babel-core/test/api.js index c9efbb2e59..93fb13abe3 100644 --- a/packages/babel-core/test/api.js +++ b/packages/babel-core/test/api.js @@ -1,7 +1,5 @@ -require("../lib/api/node"); - +var babel = require("../lib/api/node"); var buildExternalHelpers = require("../lib/tools/build-external-helpers"); -var transform = require("../lib/api/node").transform; var Pipeline = require("../lib/transformation/pipeline"); var sourceMap = require("source-map"); var assert = require("assert"); @@ -19,12 +17,24 @@ function assertNotIgnored(result) { function transformAsync(code, opts) { return { then: function (resolve) { - resolve(transform(code, opts)); + resolve(babel.transform(code, opts)); } }; } suite("api", function () { + test("transformFile", function (done) { + babel.transformFile(__dirname + "/fixtures/api/file.js", {}, function (err, res) { + if (err) return done(err); + assert.equal(res.code, "foo();"); + done(); + }); + }); + + test("transformFileSync", function () { + assert.equal(babel.transformFileSync(__dirname + "/fixtures/api/file.js", {}).code, "foo();"); + }); + test("options merge backwards", function () { return transformAsync("", { presets: [__dirname + "/../../babel-preset-es2015"], @@ -35,7 +45,7 @@ suite("api", function () { }); test("source map merging", function () { - var result = transform([ + var result = babel.transform([ 'function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }', '', 'let Foo = function Foo() {', diff --git a/packages/babel-core/test/fixtures/api/file.js b/packages/babel-core/test/fixtures/api/file.js new file mode 100644 index 0000000000..a280f9a5cc --- /dev/null +++ b/packages/babel-core/test/fixtures/api/file.js @@ -0,0 +1 @@ +foo(); diff --git a/packages/babel-plugin-transform-regenerator/package.json b/packages/babel-plugin-transform-regenerator/package.json index 0f6b496566..53b1399120 100644 --- a/packages/babel-plugin-transform-regenerator/package.json +++ b/packages/babel-plugin-transform-regenerator/package.json @@ -1,7 +1,7 @@ { "name": "babel-plugin-transform-regenerator", "author": "Ben Newman ", - "description": "", + "description": "Explode async and generator functions into a state machine.", "version": "6.0.18", "homepage": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-regenerator", "main": "lib/index.js", diff --git a/packages/babel-plugin-transform-regenerator/src/visit.js b/packages/babel-plugin-transform-regenerator/src/visit.js index ad22fe3c76..10706d43f0 100644 --- a/packages/babel-plugin-transform-regenerator/src/visit.js +++ b/packages/babel-plugin-transform-regenerator/src/visit.js @@ -37,13 +37,7 @@ exports.visitor = { return; } - if (node.expression) { - // Transform expression lambdas into normal functions. - node.expression = false; - node.body = t.blockStatement([ - t.returnStatement(node.body) - ]); - } + path.ensureBlock(); if (node.async) { path.get("body").traverse(awaitVisitor);