From 2562b0c20120f2ebe9fc4df17f86701de8e6b220 Mon Sep 17 00:00:00 2001 From: Casey Foster Date: Tue, 3 Feb 2015 10:46:54 -0600 Subject: [PATCH] Concatenate adjacent string literals in JSX --- .../transformation/transformers/other/react.js | 17 +++++++++-------- .../actual.js | 13 +++++++++++++ .../expected.js | 13 +++++++++++++ 3 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 test/fixtures/transformation/react/concatenates-adjacent-string-literals/actual.js create mode 100644 test/fixtures/transformation/react/concatenates-adjacent-string-literals/expected.js diff --git a/lib/6to5/transformation/transformers/other/react.js b/lib/6to5/transformation/transformers/other/react.js index 34bcb61231..4e8655f753 100644 --- a/lib/6to5/transformation/transformers/other/react.js +++ b/lib/6to5/transformation/transformers/other/react.js @@ -5,9 +5,10 @@ // jsx -var esutils = require("esutils"); -var react = require("../../helpers/react"); -var t = require("../../../types"); +var esutils = require("esutils"); +var isString = require("lodash/lang/isString"); +var react = require("../../helpers/react"); +var t = require("../../../types"); exports.JSXIdentifier = function (node, parent) { if (node.name === "this" && t.isReferenced(node, parent)) { @@ -185,7 +186,6 @@ var cleanJSXElementLiteralChild = function (child, args) { var isFirstLine = i === 0; var isLastLine = i === lines.length - 1; - var isLastNonEmptyLine = i === lastNonEmptyLine; // replace rendered whitespace tabs with spaces var trimmedLine = line.replace(/\t/g, " "); @@ -201,11 +201,12 @@ var cleanJSXElementLiteralChild = function (child, args) { } if (trimmedLine) { - if (!isLastNonEmptyLine) { - trimmedLine += " "; + var lastArg = args[args.length - 1]; + if (t.isLiteral(lastArg) && isString(lastArg.value)) { + lastArg.value += " " + trimmedLine; + } else { + args.push(t.literal(trimmedLine)); } - - args.push(t.literal(trimmedLine)); } } }; diff --git a/test/fixtures/transformation/react/concatenates-adjacent-string-literals/actual.js b/test/fixtures/transformation/react/concatenates-adjacent-string-literals/actual.js new file mode 100644 index 0000000000..e998a87c31 --- /dev/null +++ b/test/fixtures/transformation/react/concatenates-adjacent-string-literals/actual.js @@ -0,0 +1,13 @@ +var x = +
+ foo + {'bar'} + baz +
+ buz + bang +
+ qux + {null} + quack +
diff --git a/test/fixtures/transformation/react/concatenates-adjacent-string-literals/expected.js b/test/fixtures/transformation/react/concatenates-adjacent-string-literals/expected.js new file mode 100644 index 0000000000..7889adaa97 --- /dev/null +++ b/test/fixtures/transformation/react/concatenates-adjacent-string-literals/expected.js @@ -0,0 +1,13 @@ +var x = React.createElement( + "div", + null, + "foo bar baz", + React.createElement( + "div", + null, + "buz bang" + ), + "qux", + null, + "quack" +);