From ffc9244f8812de7f97efd530093fa842fac4d64b Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Wed, 4 Feb 2015 10:38:35 +1100 Subject: [PATCH] make #683 more inline with the official jsx compiler --- .../transformers/other/react.js | 35 +++++++++++++++---- .../expected.js | 2 +- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/lib/6to5/transformation/transformers/other/react.js b/lib/6to5/transformation/transformers/other/react.js index 4e8655f753..a246c682db 100644 --- a/lib/6to5/transformation/transformers/other/react.js +++ b/lib/6to5/transformation/transformers/other/react.js @@ -5,8 +5,8 @@ // jsx -var esutils = require("esutils"); var isString = require("lodash/lang/isString"); +var esutils = require("esutils"); var react = require("../../helpers/react"); var t = require("../../../types"); @@ -161,6 +161,8 @@ exports.JSXElement = { callExpr.arguments.push(child); } + callExpr.arguments = flatten(callExpr.arguments); + if (callExpr.arguments.length >= 3) { callExpr._prettyCall = true; } @@ -169,6 +171,27 @@ exports.JSXElement = { } }; +var isStringLiteral = function (node) { + return t.isLiteral(node) && isString(node.value); +}; + +var flatten = function (args) { + var flattened = []; + var last; + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + if (isStringLiteral(arg) && isStringLiteral(last)) { + last.value += arg.value; + } else { + last = arg; + flattened.push(arg); + } + } + + return flattened; +}; + var cleanJSXElementLiteralChild = function (child, args) { var lines = child.value.split(/\r\n|\n|\r/); @@ -186,6 +209,7 @@ 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,12 +225,11 @@ var cleanJSXElementLiteralChild = function (child, args) { } if (trimmedLine) { - var lastArg = args[args.length - 1]; - if (t.isLiteral(lastArg) && isString(lastArg.value)) { - lastArg.value += " " + trimmedLine; - } else { - args.push(t.literal(trimmedLine)); + if (!isLastNonEmptyLine) { + trimmedLine += " "; } + + args.push(t.literal(trimmedLine)); } } }; diff --git a/test/fixtures/transformation/react/concatenates-adjacent-string-literals/expected.js b/test/fixtures/transformation/react/concatenates-adjacent-string-literals/expected.js index 7889adaa97..b3eeeaa294 100644 --- a/test/fixtures/transformation/react/concatenates-adjacent-string-literals/expected.js +++ b/test/fixtures/transformation/react/concatenates-adjacent-string-literals/expected.js @@ -1,7 +1,7 @@ var x = React.createElement( "div", null, - "foo bar baz", + "foobarbaz", React.createElement( "div", null,