From b638c8b3eb746fe1ad28e757e5aca7a3ee42d15e Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Wed, 22 Mar 2017 16:07:36 -0400 Subject: [PATCH] Transform the template literals revision proposal (#5523) * Account for template literals revision * extra tests * update to babylon beta 7 * pr feedback (keep arr length the same) --- packages/babel-core/package.json | 2 +- packages/babel-generator/package.json | 2 +- .../actual.js | 8 +++++++ .../expected.js | 8 +++++++ .../src/index.js | 5 +++- .../normal/template-revision-loose/actual.js | 13 +++++++++++ .../template-revision-loose/expected.js | 23 +++++++++++++++++++ .../template-revision-loose/options.json | 3 +++ .../normal/template-revision/actual.js | 13 +++++++++++ .../normal/template-revision/expected.js | 23 +++++++++++++++++++ .../fixtures/spec/template-revision/actual.js | 13 +++++++++++ .../spec/template-revision/expected.js | 23 +++++++++++++++++++ packages/babel-template/package.json | 2 +- packages/babel-traverse/package.json | 2 +- packages/babel-types/package.json | 2 +- 15 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/actual.js create mode 100644 packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/expected.js create mode 100644 packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/options.json create mode 100644 packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision/actual.js create mode 100644 packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision/expected.js create mode 100644 packages/babel-plugin-transform-es2015-template-literals/test/fixtures/spec/template-revision/actual.js create mode 100644 packages/babel-plugin-transform-es2015-template-literals/test/fixtures/spec/template-revision/expected.js diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index 6099a368aa..e398f8484e 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -34,7 +34,7 @@ "babel-register": "7.0.0-alpha.2", "babel-traverse": "7.0.0-alpha.1", "babel-types": "7.0.0-alpha.1", - "babylon": "7.0.0-beta.6", + "babylon": "7.0.0-beta.7", "convert-source-map": "^1.1.0", "debug": "^2.1.1", "json5": "^0.5.0", diff --git a/packages/babel-generator/package.json b/packages/babel-generator/package.json index eb9900f150..940a24ceb1 100644 --- a/packages/babel-generator/package.json +++ b/packages/babel-generator/package.json @@ -21,6 +21,6 @@ }, "devDependencies": { "babel-helper-fixtures": "7.0.0-alpha.1", - "babylon": "7.0.0-beta.4" + "babylon": "7.0.0-beta.7" } } diff --git a/packages/babel-generator/test/fixtures/types/TemplateLiteral-TaggedTemplateExpression-TemplateElement/actual.js b/packages/babel-generator/test/fixtures/types/TemplateLiteral-TaggedTemplateExpression-TemplateElement/actual.js index 455ed642b5..205a96f269 100644 --- a/packages/babel-generator/test/fixtures/types/TemplateLiteral-TaggedTemplateExpression-TemplateElement/actual.js +++ b/packages/babel-generator/test/fixtures/types/TemplateLiteral-TaggedTemplateExpression-TemplateElement/actual.js @@ -10,3 +10,11 @@ html``; asdf awer erqer`; + +tag`\unicode and \u{55}`; +tag`\01`; +tag`\xg${0}right`; +tag`left${0}\xg`; +tag`left${0}\xg${1}right`; +tag`left${0}\u000g${1}right`; +tag`left${0}\u{-0}${1}right`; diff --git a/packages/babel-generator/test/fixtures/types/TemplateLiteral-TaggedTemplateExpression-TemplateElement/expected.js b/packages/babel-generator/test/fixtures/types/TemplateLiteral-TaggedTemplateExpression-TemplateElement/expected.js index b1cd86e7e2..488b934be7 100644 --- a/packages/babel-generator/test/fixtures/types/TemplateLiteral-TaggedTemplateExpression-TemplateElement/expected.js +++ b/packages/babel-generator/test/fixtures/types/TemplateLiteral-TaggedTemplateExpression-TemplateElement/expected.js @@ -10,3 +10,11 @@ html``; asdf awer erqer`; + +tag`\unicode and \u{55}`; +tag`\01`; +tag`\xg${0}right`; +tag`left${0}\xg`; +tag`left${0}\xg${1}right`; +tag`left${0}\u000g${1}right`; +tag`left${0}\u{-0}${1}right`; diff --git a/packages/babel-plugin-transform-es2015-template-literals/src/index.js b/packages/babel-plugin-transform-es2015-template-literals/src/index.js index 8743c990da..128172fdb2 100644 --- a/packages/babel-plugin-transform-es2015-template-literals/src/index.js +++ b/packages/babel-plugin-transform-es2015-template-literals/src/index.js @@ -18,7 +18,10 @@ export default function ({ types: t }) { let raw = []; for (const elem of (quasi.quasis: Array)) { - strings.push(t.stringLiteral(elem.value.cooked)); + const value = elem.value.cooked == null + ? path.scope.buildUndefinedNode() + : t.stringLiteral(elem.value.cooked); + strings.push(value); raw.push(t.stringLiteral(elem.value.raw)); } diff --git a/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/actual.js b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/actual.js new file mode 100644 index 0000000000..66ea5a01ea --- /dev/null +++ b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/actual.js @@ -0,0 +1,13 @@ +tag`\unicode and \u{55}`; + +tag`\01`; +tag`\xg${0}right`; +tag`left${0}\xg`; +tag`left${0}\xg${1}right`; +tag`left${0}\u000g${1}right`; +tag`left${0}\u{-0}${1}right`; + +function a() { + var undefined = 4; + tag`\01`; +} diff --git a/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/expected.js b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/expected.js new file mode 100644 index 0000000000..f839bd5ee3 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/expected.js @@ -0,0 +1,23 @@ +var _templateObject = _taggedTemplateLiteralLoose([void 0], ["\\unicode and \\u{55}"]), + _templateObject2 = _taggedTemplateLiteralLoose([void 0], ["\\01"]), + _templateObject3 = _taggedTemplateLiteralLoose([void 0, "right"], ["\\xg", "right"]), + _templateObject4 = _taggedTemplateLiteralLoose(["left", void 0], ["left", "\\xg"]), + _templateObject5 = _taggedTemplateLiteralLoose(["left", void 0, "right"], ["left", "\\xg", "right"]), + _templateObject6 = _taggedTemplateLiteralLoose(["left", void 0, "right"], ["left", "\\u000g", "right"]), + _templateObject7 = _taggedTemplateLiteralLoose(["left", void 0, "right"], ["left", "\\u{-0}", "right"]); + +function _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; } + +tag(_templateObject); + +tag(_templateObject2); +tag(_templateObject3, 0); +tag(_templateObject4, 0); +tag(_templateObject5, 0, 1); +tag(_templateObject6, 0, 1); +tag(_templateObject7, 0, 1); + +function a() { + var undefined = 4; + tag(_templateObject2); +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/options.json b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/options.json new file mode 100644 index 0000000000..434ba0caa6 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision-loose/options.json @@ -0,0 +1,3 @@ +{ + "plugins": [["transform-es2015-template-literals", { "loose": true }]] +} diff --git a/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision/actual.js b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision/actual.js new file mode 100644 index 0000000000..66ea5a01ea --- /dev/null +++ b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision/actual.js @@ -0,0 +1,13 @@ +tag`\unicode and \u{55}`; + +tag`\01`; +tag`\xg${0}right`; +tag`left${0}\xg`; +tag`left${0}\xg${1}right`; +tag`left${0}\u000g${1}right`; +tag`left${0}\u{-0}${1}right`; + +function a() { + var undefined = 4; + tag`\01`; +} diff --git a/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision/expected.js b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision/expected.js new file mode 100644 index 0000000000..58a8865697 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/normal/template-revision/expected.js @@ -0,0 +1,23 @@ +var _templateObject = _taggedTemplateLiteral([void 0], ["\\unicode and \\u{55}"]), + _templateObject2 = _taggedTemplateLiteral([void 0], ["\\01"]), + _templateObject3 = _taggedTemplateLiteral([void 0, "right"], ["\\xg", "right"]), + _templateObject4 = _taggedTemplateLiteral(["left", void 0], ["left", "\\xg"]), + _templateObject5 = _taggedTemplateLiteral(["left", void 0, "right"], ["left", "\\xg", "right"]), + _templateObject6 = _taggedTemplateLiteral(["left", void 0, "right"], ["left", "\\u000g", "right"]), + _templateObject7 = _taggedTemplateLiteral(["left", void 0, "right"], ["left", "\\u{-0}", "right"]); + +function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + +tag(_templateObject); + +tag(_templateObject2); +tag(_templateObject3, 0); +tag(_templateObject4, 0); +tag(_templateObject5, 0, 1); +tag(_templateObject6, 0, 1); +tag(_templateObject7, 0, 1); + +function a() { + var undefined = 4; + tag(_templateObject2); +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/spec/template-revision/actual.js b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/spec/template-revision/actual.js new file mode 100644 index 0000000000..66ea5a01ea --- /dev/null +++ b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/spec/template-revision/actual.js @@ -0,0 +1,13 @@ +tag`\unicode and \u{55}`; + +tag`\01`; +tag`\xg${0}right`; +tag`left${0}\xg`; +tag`left${0}\xg${1}right`; +tag`left${0}\u000g${1}right`; +tag`left${0}\u{-0}${1}right`; + +function a() { + var undefined = 4; + tag`\01`; +} diff --git a/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/spec/template-revision/expected.js b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/spec/template-revision/expected.js new file mode 100644 index 0000000000..58a8865697 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-template-literals/test/fixtures/spec/template-revision/expected.js @@ -0,0 +1,23 @@ +var _templateObject = _taggedTemplateLiteral([void 0], ["\\unicode and \\u{55}"]), + _templateObject2 = _taggedTemplateLiteral([void 0], ["\\01"]), + _templateObject3 = _taggedTemplateLiteral([void 0, "right"], ["\\xg", "right"]), + _templateObject4 = _taggedTemplateLiteral(["left", void 0], ["left", "\\xg"]), + _templateObject5 = _taggedTemplateLiteral(["left", void 0, "right"], ["left", "\\xg", "right"]), + _templateObject6 = _taggedTemplateLiteral(["left", void 0, "right"], ["left", "\\u000g", "right"]), + _templateObject7 = _taggedTemplateLiteral(["left", void 0, "right"], ["left", "\\u{-0}", "right"]); + +function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + +tag(_templateObject); + +tag(_templateObject2); +tag(_templateObject3, 0); +tag(_templateObject4, 0); +tag(_templateObject5, 0, 1); +tag(_templateObject6, 0, 1); +tag(_templateObject7, 0, 1); + +function a() { + var undefined = 4; + tag(_templateObject2); +} \ No newline at end of file diff --git a/packages/babel-template/package.json b/packages/babel-template/package.json index 160c56cfba..80f1ac91c4 100644 --- a/packages/babel-template/package.json +++ b/packages/babel-template/package.json @@ -8,7 +8,7 @@ "repository": "https://github.com/babel/babel/tree/master/packages/babel-template", "main": "lib/index.js", "dependencies": { - "babylon": "7.0.0-beta.6", + "babylon": "7.0.0-beta.7", "babel-traverse": "7.0.0-alpha.1", "babel-types": "7.0.0-alpha.1", "lodash": "^4.2.0" diff --git a/packages/babel-traverse/package.json b/packages/babel-traverse/package.json index 9c9b84bd14..3285eccff3 100644 --- a/packages/babel-traverse/package.json +++ b/packages/babel-traverse/package.json @@ -11,7 +11,7 @@ "babel-code-frame": "7.0.0-alpha.1", "babel-messages": "7.0.0-alpha.1", "babel-types": "7.0.0-alpha.1", - "babylon": "7.0.0-beta.6", + "babylon": "7.0.0-beta.7", "debug": "^2.2.0", "globals": "^9.0.0", "invariant": "^2.2.0", diff --git a/packages/babel-types/package.json b/packages/babel-types/package.json index 7c7c6580b5..0f6fa110e9 100644 --- a/packages/babel-types/package.json +++ b/packages/babel-types/package.json @@ -13,6 +13,6 @@ "to-fast-properties": "^1.0.1" }, "devDependencies": { - "babylon": "7.0.0-beta.4" + "babylon": "7.0.0-beta.7" } }