From 23f98a753a97d2e0db42f4a6f3f06fa953b74172 Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Wed, 27 Sep 2017 16:15:44 -0400 Subject: [PATCH] Add throw expressions (#6325) * Add throw expressions Stage 2 proposal: https://github.com/tc39/proposal-throw-expressions * Update babylon * Add to stage 2 --- package.json | 2 +- packages/babel-core/package.json | 2 +- packages/babel-generator/package.json | 2 +- .../.npmignore | 3 ++ .../README.md | 42 +++++++++++++++++ .../package.json | 11 +++++ .../src/index.js | 7 +++ .../.npmignore | 3 ++ .../README.md | 47 +++++++++++++++++++ .../package.json | 17 +++++++ .../src/index.js | 23 +++++++++ .../arguments-in-argument/actual.js | 3 ++ .../arguments-in-argument/expected.js | 5 ++ .../await-in-argument/actual.js | 3 ++ .../await-in-argument/expected.js | 5 ++ .../expression-in-body/actual.js | 3 ++ .../expression-in-body/expected.js | 5 ++ .../expression-in-module/actual.js | 1 + .../expression-in-module/expected.js | 3 ++ .../expression-in-sequence/actual.js | 1 + .../expression-in-sequence/expected.js | 3 ++ .../expression-logical/actual.js | 1 + .../expression-logical/expected.js | 3 ++ .../expression-params/actual.js | 2 + .../expression-params/expected.js | 3 ++ .../expression-with-comma/actual.js | 1 + .../expression-with-comma/expected.js | 3 ++ .../function-sent-in-argument/actual.js | 3 ++ .../function-sent-in-argument/expected.js | 5 ++ .../function-sent-in-argument/options.json | 3 ++ .../options.json | 3 ++ .../this-in-argument/actual.js | 3 ++ .../this-in-argument/expected.js | 5 ++ .../throw-statement/actual.js | 3 ++ .../throw-statement/expected.js | 3 ++ .../yield-in-argument/actual.js | 3 ++ .../yield-in-argument/expected.js | 5 ++ .../test/index.js | 3 ++ packages/babel-preset-stage-2/package.json | 1 + packages/babel-preset-stage-2/src/index.js | 2 + packages/babel-template/package.json | 2 +- packages/babel-traverse/package.json | 2 +- packages/babel-types/package.json | 2 +- packages/babel-types/src/constants.js | 1 + 44 files changed, 247 insertions(+), 6 deletions(-) create mode 100644 packages/babel-plugin-syntax-throw-expressions/.npmignore create mode 100644 packages/babel-plugin-syntax-throw-expressions/README.md create mode 100644 packages/babel-plugin-syntax-throw-expressions/package.json create mode 100644 packages/babel-plugin-syntax-throw-expressions/src/index.js create mode 100644 packages/babel-plugin-transform-throw-expressions/.npmignore create mode 100644 packages/babel-plugin-transform-throw-expressions/README.md create mode 100644 packages/babel-plugin-transform-throw-expressions/package.json create mode 100644 packages/babel-plugin-transform-throw-expressions/src/index.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/arguments-in-argument/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/arguments-in-argument/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/await-in-argument/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/await-in-argument/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-body/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-body/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-module/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-module/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-sequence/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-sequence/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-logical/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-logical/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-params/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-params/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-with-comma/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-with-comma/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/options.json create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/options.json create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/this-in-argument/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/this-in-argument/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/throw-statement/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/throw-statement/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/yield-in-argument/actual.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/yield-in-argument/expected.js create mode 100644 packages/babel-plugin-transform-throw-expressions/test/index.js diff --git a/package.json b/package.json index 40f35d2fac..909bcbfcce 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-preset-flow": "7.0.0-alpha.18", "babel-preset-stage-0": "7.0.0-alpha.18", "babel-register": "7.0.0-alpha.18", - "babylon": "7.0.0-beta.25", + "babylon": "7.0.0-beta.26", "browserify": "^13.1.1", "bundle-collapser": "^1.2.1", "chai": "^4.1.0", diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index 3fc4505324..5831982641 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -32,7 +32,7 @@ "babel-template": "7.0.0-beta.2", "babel-traverse": "7.0.0-beta.2", "babel-types": "7.0.0-beta.2", - "babylon": "7.0.0-beta.25", + "babylon": "7.0.0-beta.26", "convert-source-map": "^1.1.0", "debug": "^3.0.1", "json5": "^0.5.0", diff --git a/packages/babel-generator/package.json b/packages/babel-generator/package.json index e2958c4751..ee86949534 100644 --- a/packages/babel-generator/package.json +++ b/packages/babel-generator/package.json @@ -20,6 +20,6 @@ }, "devDependencies": { "babel-helper-fixtures": "7.0.0-beta.2", - "babylon": "^7.0.0-beta.25" + "babylon": "^7.0.0-beta.26" } } diff --git a/packages/babel-plugin-syntax-throw-expressions/.npmignore b/packages/babel-plugin-syntax-throw-expressions/.npmignore new file mode 100644 index 0000000000..cace0d6ddc --- /dev/null +++ b/packages/babel-plugin-syntax-throw-expressions/.npmignore @@ -0,0 +1,3 @@ +node_modules +*.log +src diff --git a/packages/babel-plugin-syntax-throw-expressions/README.md b/packages/babel-plugin-syntax-throw-expressions/README.md new file mode 100644 index 0000000000..edadb7781d --- /dev/null +++ b/packages/babel-plugin-syntax-throw-expressions/README.md @@ -0,0 +1,42 @@ +# babel-plugin-syntax-throw-expressions + +Allow parsing of Throw Expressions: + +```js +function test(param = throw new Error('required!')) { + const test = param === true || throw new Error('Falsey!'); +} +``` + + +## Installation + +```sh +npm install --save-dev babel-plugin-syntax-throw-expressions +``` + +## Usage + +### Via `.babelrc` (Recommended) + +**.babelrc** + +```json +{ + "plugins": ["syntax-throw-expressions"] +} +``` + +### Via CLI + +```sh +babel --plugins syntax-throw-expressions script.js +``` + +### Via Node API + +```javascript +require("babel-core").transform("code", { + plugins: ["syntax-throw-expressions"] +}); +``` diff --git a/packages/babel-plugin-syntax-throw-expressions/package.json b/packages/babel-plugin-syntax-throw-expressions/package.json new file mode 100644 index 0000000000..4c2e6b766f --- /dev/null +++ b/packages/babel-plugin-syntax-throw-expressions/package.json @@ -0,0 +1,11 @@ +{ + "name": "babel-plugin-syntax-throw-expressions", + "version": "7.0.0-beta.2", + "description": "Allow parsing of Throw Expressions", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-throw-expressions", + "license": "MIT", + "main": "lib/index.js", + "keywords": [ + "babel-plugin" + ] +} diff --git a/packages/babel-plugin-syntax-throw-expressions/src/index.js b/packages/babel-plugin-syntax-throw-expressions/src/index.js new file mode 100644 index 0000000000..72df255074 --- /dev/null +++ b/packages/babel-plugin-syntax-throw-expressions/src/index.js @@ -0,0 +1,7 @@ +export default function() { + return { + manipulateOptions(opts, parserOpts) { + parserOpts.plugins.push("throwExpressions"); + }, + }; +} diff --git a/packages/babel-plugin-transform-throw-expressions/.npmignore b/packages/babel-plugin-transform-throw-expressions/.npmignore new file mode 100644 index 0000000000..f980694583 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/.npmignore @@ -0,0 +1,3 @@ +src +test +*.log diff --git a/packages/babel-plugin-transform-throw-expressions/README.md b/packages/babel-plugin-transform-throw-expressions/README.md new file mode 100644 index 0000000000..6e4bcd9603 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/README.md @@ -0,0 +1,47 @@ +# babel-plugin-transform-throw-expressions + +This plugin transforms Throw Expressions into an IIFE. + +## Example + +```js +function test(param = throw new Error('required!')) { + const test = param === true || throw new Error('Falsey!'); +} +``` + +## Installation + +```sh +npm install --save-dev babel-plugin-transform-throw-expressions +``` + +## Usage + +### Via `.babelrc` (Recommended) + +**.babelrc** + +```json +{ + "plugins": ["transform-throw-expressions"] +} +``` + +### Via CLI + +```sh +babel --plugins transform-throw-expressions script.js +``` + +### Via Node API + +```javascript +require("babel-core").transform("code", { + plugins: ["transform-throw-expressions"] +}); +``` + +## References + +* [Proposal: Numeric Separators](https://github.com/tc39/proposal-throw-expressions) diff --git a/packages/babel-plugin-transform-throw-expressions/package.json b/packages/babel-plugin-transform-throw-expressions/package.json new file mode 100644 index 0000000000..603c49cb70 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/package.json @@ -0,0 +1,17 @@ +{ + "name": "babel-plugin-transform-throw-expressions", + "version": "7.0.0-beta.2", + "description": "Wraps Throw Expressions in an IIFE", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-throw-expressions", + "license": "MIT", + "main": "lib/index.js", + "keywords": [ + "babel-plugin" + ], + "dependencies": { + "babel-plugin-syntax-throw-expressions": "7.0.0-beta.2" + }, + "devDependencies": { + "babel-helper-plugin-test-runner": "7.0.0-beta.2" + } +} diff --git a/packages/babel-plugin-transform-throw-expressions/src/index.js b/packages/babel-plugin-transform-throw-expressions/src/index.js new file mode 100644 index 0000000000..81aac0c73c --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/src/index.js @@ -0,0 +1,23 @@ +import syntaxThrowExpressions from "babel-plugin-syntax-throw-expressions"; + +export default function({ types: t }) { + return { + inherits: syntaxThrowExpressions, + + visitor: { + UnaryExpression(path) { + const { operator, argument } = path.node; + if (operator !== "throw") return; + + const arg = t.identifier("e"); + const arrow = t.functionExpression( + null, + [arg], + t.blockStatement([t.throwStatement(arg)]), + ); + + path.replaceWith(t.callExpression(arrow, [argument])); + }, + }, + }; +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/arguments-in-argument/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/arguments-in-argument/actual.js new file mode 100644 index 0000000000..dcbceed5e6 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/arguments-in-argument/actual.js @@ -0,0 +1,3 @@ +function* test() { + (throw new Error(...arguments)); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/arguments-in-argument/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/arguments-in-argument/expected.js new file mode 100644 index 0000000000..398bc2c893 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/arguments-in-argument/expected.js @@ -0,0 +1,5 @@ +function* test() { + (function (e) { + throw e; + })(new Error(...arguments)); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/await-in-argument/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/await-in-argument/actual.js new file mode 100644 index 0000000000..8867ea5f21 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/await-in-argument/actual.js @@ -0,0 +1,3 @@ +async function test() { + (throw new Error(await 'test')); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/await-in-argument/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/await-in-argument/expected.js new file mode 100644 index 0000000000..f0d7fa4b5e --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/await-in-argument/expected.js @@ -0,0 +1,5 @@ +async function test() { + (function (e) { + throw e; + })(new Error((await 'test'))); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-body/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-body/actual.js new file mode 100644 index 0000000000..d348a6b87a --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-body/actual.js @@ -0,0 +1,3 @@ +function test() { + (throw new Error('test')); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-body/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-body/expected.js new file mode 100644 index 0000000000..e6b809385d --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-body/expected.js @@ -0,0 +1,5 @@ +function test() { + (function (e) { + throw e; + })(new Error('test')); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-module/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-module/actual.js new file mode 100644 index 0000000000..4fcf9400d1 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-module/actual.js @@ -0,0 +1 @@ +(throw new Error('test')); diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-module/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-module/expected.js new file mode 100644 index 0000000000..33deb2ebc1 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-module/expected.js @@ -0,0 +1,3 @@ +(function (e) { + throw e; +})(new Error('test')); diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-sequence/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-sequence/actual.js new file mode 100644 index 0000000000..066d127161 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-sequence/actual.js @@ -0,0 +1 @@ +(throw new Error('test'), new Error('2')); diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-sequence/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-sequence/expected.js new file mode 100644 index 0000000000..a6e9f8b912 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-in-sequence/expected.js @@ -0,0 +1,3 @@ +(function (e) { + throw e; +})(new Error('test')), new Error('2'); diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-logical/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-logical/actual.js new file mode 100644 index 0000000000..3702b8f92c --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-logical/actual.js @@ -0,0 +1 @@ +true && throw new Error('test'); diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-logical/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-logical/expected.js new file mode 100644 index 0000000000..9b883f1b26 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-logical/expected.js @@ -0,0 +1,3 @@ +true && function (e) { + throw e; +}(new Error('test')); diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-params/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-params/actual.js new file mode 100644 index 0000000000..c23de67950 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-params/actual.js @@ -0,0 +1,2 @@ +function test(a = throw new Error('test')) { +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-params/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-params/expected.js new file mode 100644 index 0000000000..cb9a1eca14 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-params/expected.js @@ -0,0 +1,3 @@ +function test(a = function (e) { + throw e; +}(new Error('test'))) {} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-with-comma/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-with-comma/actual.js new file mode 100644 index 0000000000..b09debc0b0 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-with-comma/actual.js @@ -0,0 +1 @@ +test((throw new Error('test'), 1)); diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-with-comma/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-with-comma/expected.js new file mode 100644 index 0000000000..22f69c4880 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/expression-with-comma/expected.js @@ -0,0 +1,3 @@ +test((function (e) { + throw e; +}(new Error('test')), 1)); diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/actual.js new file mode 100644 index 0000000000..2ff881f44d --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/actual.js @@ -0,0 +1,3 @@ +function* test() { + (throw new Error(function.sent)); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/expected.js new file mode 100644 index 0000000000..564fc2990f --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/expected.js @@ -0,0 +1,5 @@ +function* test() { + (function (e) { + throw e; + })(new Error(function.sent)); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/options.json b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/options.json new file mode 100644 index 0000000000..bf5c71feae --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/function-sent-in-argument/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-throw-expressions", "syntax-function-sent"] +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/options.json b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/options.json new file mode 100644 index 0000000000..8e17304d42 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-throw-expressions"] +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/this-in-argument/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/this-in-argument/actual.js new file mode 100644 index 0000000000..bd4be4167b --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/this-in-argument/actual.js @@ -0,0 +1,3 @@ +function* test() { + (throw new Error(this)); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/this-in-argument/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/this-in-argument/expected.js new file mode 100644 index 0000000000..e72100f280 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/this-in-argument/expected.js @@ -0,0 +1,5 @@ +function* test() { + (function (e) { + throw e; + })(new Error(this)); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/throw-statement/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/throw-statement/actual.js new file mode 100644 index 0000000000..3b578c034a --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/throw-statement/actual.js @@ -0,0 +1,3 @@ +function test() { + throw new Error('test'); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/throw-statement/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/throw-statement/expected.js new file mode 100644 index 0000000000..3b578c034a --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/throw-statement/expected.js @@ -0,0 +1,3 @@ +function test() { + throw new Error('test'); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/yield-in-argument/actual.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/yield-in-argument/actual.js new file mode 100644 index 0000000000..7cd799f5ae --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/yield-in-argument/actual.js @@ -0,0 +1,3 @@ +function* test() { + (throw new Error(yield 'test')); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/yield-in-argument/expected.js b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/yield-in-argument/expected.js new file mode 100644 index 0000000000..f8739d12fb --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/fixtures/stupid-fixture-nesting-folder/yield-in-argument/expected.js @@ -0,0 +1,5 @@ +function* test() { + (function (e) { + throw e; + })(new Error((yield 'test'))); +} diff --git a/packages/babel-plugin-transform-throw-expressions/test/index.js b/packages/babel-plugin-transform-throw-expressions/test/index.js new file mode 100644 index 0000000000..09cfbc31f5 --- /dev/null +++ b/packages/babel-plugin-transform-throw-expressions/test/index.js @@ -0,0 +1,3 @@ +import runner from "babel-helper-plugin-test-runner"; + +runner(__dirname); diff --git a/packages/babel-preset-stage-2/package.json b/packages/babel-preset-stage-2/package.json index 229574180e..62180ef8b5 100644 --- a/packages/babel-preset-stage-2/package.json +++ b/packages/babel-preset-stage-2/package.json @@ -11,6 +11,7 @@ "babel-plugin-transform-export-namespace": "7.0.0-beta.2", "babel-plugin-transform-function-sent": "7.0.0-beta.2", "babel-plugin-transform-numeric-separator": "7.0.0-beta.2", + "babel-plugin-transform-throw-expressions": "7.0.0-beta.2", "babel-preset-stage-3": "7.0.0-beta.2" } } diff --git a/packages/babel-preset-stage-2/src/index.js b/packages/babel-preset-stage-2/src/index.js index 165bad24cc..fa0f566efb 100644 --- a/packages/babel-preset-stage-2/src/index.js +++ b/packages/babel-preset-stage-2/src/index.js @@ -3,6 +3,7 @@ import presetStage3 from "babel-preset-stage-3"; import transformFunctionSent from "babel-plugin-transform-function-sent"; import transformExportNamespace from "babel-plugin-transform-export-namespace"; import transformNumericSeparator from "babel-plugin-transform-numeric-separator"; +import transformThrowExpressions from "babel-plugin-transform-throw-expressions"; export default function() { return { @@ -11,6 +12,7 @@ export default function() { transformFunctionSent, transformExportNamespace, transformNumericSeparator, + transformThrowExpressions, ], }; } diff --git a/packages/babel-template/package.json b/packages/babel-template/package.json index 1fdfbc225e..4d37590bcd 100644 --- a/packages/babel-template/package.json +++ b/packages/babel-template/package.json @@ -10,7 +10,7 @@ "dependencies": { "babel-traverse": "7.0.0-beta.2", "babel-types": "7.0.0-beta.2", - "babylon": "7.0.0-beta.25", + "babylon": "7.0.0-beta.26", "lodash": "^4.2.0" } } diff --git a/packages/babel-traverse/package.json b/packages/babel-traverse/package.json index f467e84a06..f8e05eb0d8 100644 --- a/packages/babel-traverse/package.json +++ b/packages/babel-traverse/package.json @@ -12,7 +12,7 @@ "babel-helper-function-name": "7.0.0-beta.2", "babel-messages": "7.0.0-beta.2", "babel-types": "7.0.0-beta.2", - "babylon": "7.0.0-beta.25", + "babylon": "7.0.0-beta.26", "debug": "^3.0.1", "globals": "^10.0.0", "invariant": "^2.2.0", diff --git a/packages/babel-types/package.json b/packages/babel-types/package.json index 921609d98e..8b586086a5 100644 --- a/packages/babel-types/package.json +++ b/packages/babel-types/package.json @@ -14,6 +14,6 @@ }, "devDependencies": { "babel-generator": "7.0.0-beta.2", - "babylon": "^7.0.0-beta.25" + "babylon": "^7.0.0-beta.26" } } diff --git a/packages/babel-types/src/constants.js b/packages/babel-types/src/constants.js index aeeaf2d849..acacab0d59 100644 --- a/packages/babel-types/src/constants.js +++ b/packages/babel-types/src/constants.js @@ -47,6 +47,7 @@ export const NUMBER_UNARY_OPERATORS = ["+", "-", "~"]; export const STRING_UNARY_OPERATORS = ["typeof"]; export const UNARY_OPERATORS = [ "void", + "throw", ...BOOLEAN_UNARY_OPERATORS, ...NUMBER_UNARY_OPERATORS, ...STRING_UNARY_OPERATORS,