diff --git a/CHANGELOG.md b/CHANGELOG.md index b55d851e13..2b98654b41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,11 @@ _Note: Gaps between patch versions are faulty, broken or test releases._ See [CHANGELOG - 6to5](CHANGELOG-6to5.md) for the pre-4.0.0 version changelog. +## 5.7.1 + + * **Bug Fix** + * Add back mistakenly removed `replaceWithSourceString` method. + ## 5.7.0 * **Bug Fix** diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1c3dd1b3b8..1e6e5c1909 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,12 +7,6 @@ | Running tests | - Workflow - | - Dependencies - | - Code Standards - | Internals

@@ -26,6 +20,8 @@ contributing, please read the ## Developing +**Note:** Versions `< 5.1.10` can't be built. + #### Setup ```sh diff --git a/VERSION b/VERSION index 3b867ccd76..262122f679 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.7.0 \ No newline at end of file +5.7.1 \ No newline at end of file diff --git a/packages/babel/package.json b/packages/babel/package.json index d70573a566..052fe85c44 100644 --- a/packages/babel/package.json +++ b/packages/babel/package.json @@ -1,6 +1,6 @@ { "name": "babel-core", - "version": "5.7.0", + "version": "5.7.1", "description": "A compiler for writing next generation JavaScript", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/", @@ -42,7 +42,7 @@ "babel-plugin-runtime": "^1.0.7", "babel-plugin-undeclared-variables-check": "^1.0.2", "babel-plugin-undefined-to-void": "^1.1.6", - "babylon": "^5.6.23", + "babylon": "^5.7.1", "bluebird": "^2.9.33", "chalk": "^1.0.0", "convert-source-map": "^1.1.0", diff --git a/packages/babel/src/traversal/path/replacement.js b/packages/babel/src/traversal/path/replacement.js index 262a5afa5b..16bda31e7a 100644 --- a/packages/babel/src/traversal/path/replacement.js +++ b/packages/babel/src/traversal/path/replacement.js @@ -1,4 +1,7 @@ +import codeFrame from "../../helpers/code-frame"; +import traverse from "../index"; import NodePath from "./index"; +import parse from "../../helpers/parse"; import * as t from "../../types"; /** @@ -60,11 +63,31 @@ export function replaceWithMultiple(nodes: Array) { } /** - * DEPRECATED + * Parse a string as an expression and replace the current node with the result. + * + * NOTE: This is typically not a good idea to use. Building source strings when + * transforming ASTs is an antipattern and SHOULD NOT be encouraged. Even if it's + * easier to use, your transforms will be extremely brittle. */ export function replaceWithSourceString(replacement) { - throw new Error("TODO"); + this.resync(); + + try { + replacement = `(${replacement})`; + replacement = parse(replacement); + } catch (err) { + var loc = err.loc; + if (loc) { + err.message += " - make sure this is an expression."; + err.message += "\n" + codeFrame(replacement, loc.line, loc.column + 1); + } + throw err; + } + + replacement = replacement.program.body[0].expression; + traverse.removeProperties(replacement); + return this.replaceWith(replacement); } /** diff --git a/packages/babel/test/path.js b/packages/babel/test/path.js new file mode 100644 index 0000000000..e203c55c9d --- /dev/null +++ b/packages/babel/test/path.js @@ -0,0 +1,23 @@ +var transform = require("../lib/transformation"); +var Plugin = require("../lib/transformation/plugin"); +var babel = require("../lib/api/node"); +var chai = require("chai"); + +suite("traversal path", function () { + test("replaceWithSourceString", function () { + var expectCode = "function foo() {}"; + + var actualCode = transform(expectCode, { + blacklist: "strict", + plugins: [new Plugin("foobar", { + visitor: { + FunctionDeclaration: function () { + this.replaceWithSourceString("console.whatever()"); + } + } + })] + }).code; + + chai.expect(actualCode).to.be.equal("console.whatever();"); + }); +}); diff --git a/packages/babylon/package.json b/packages/babylon/package.json index 392ca5d5d2..a2aa542051 100644 --- a/packages/babylon/package.json +++ b/packages/babylon/package.json @@ -1,6 +1,6 @@ { "name": "babylon", - "version": "5.6.23", + "version": "5.7.1", "description": "", "author": "Sebastian McKenzie ", "homepage": "https://babeljs.io/",