From 388e73f49f9857f2ae2783af0d0812ed83952ad1 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Fri, 19 Jun 2015 11:30:34 -0700 Subject: [PATCH] Fix React emit for spread attributes when they are the first attribute --- src/compiler/emitter.ts | 5 +++++ tests/baselines/reference/tsxReactEmit2.js | 6 +++--- tests/baselines/reference/tsxReactEmit4.errors.txt | 4 +++- tests/baselines/reference/tsxReactEmit4.js | 6 +++++- tests/cases/conformance/jsx/tsxReactEmit4.tsx | 3 +++ 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 588375febc5..2b8faa8d79e 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1178,6 +1178,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) { let haveOpenedObjectLiteral = false; for (var i = 0; i < attrs.length; i++) { if (attrs[i].kind === SyntaxKind.JsxSpreadAttribute) { + // If this is the first argument, we need to emit a {} as the first argument + if(i === 0) { + write('{}, '); + } + if (haveOpenedObjectLiteral) { write('}'); haveOpenedObjectLiteral = false; diff --git a/tests/baselines/reference/tsxReactEmit2.js b/tests/baselines/reference/tsxReactEmit2.js index c19d9958ad4..f4a12946ed9 100644 --- a/tests/baselines/reference/tsxReactEmit2.js +++ b/tests/baselines/reference/tsxReactEmit2.js @@ -16,8 +16,8 @@ var spreads5 =
{p2}
; //// [tsxReactEmit2.js] var p1, p2, p3; -var spreads1 = React.createElement("div", React.__spread(p1), p2); -var spreads2 = React.createElement("div", React.__spread(p1), p2); +var spreads1 = React.createElement("div", React.__spread({}, p1), p2); +var spreads2 = React.createElement("div", React.__spread({}, p1), p2); var spreads3 = React.createElement("div", React.__spread({x: p3}, p1), p2); -var spreads4 = React.createElement("div", React.__spread(p1, {x: p3}), p2); +var spreads4 = React.createElement("div", React.__spread({}, p1, {x: p3}), p2); var spreads5 = React.createElement("div", React.__spread({x: p2}, p1, {y: p3}), p2); diff --git a/tests/baselines/reference/tsxReactEmit4.errors.txt b/tests/baselines/reference/tsxReactEmit4.errors.txt index 82cacd39e28..00b7cb8d019 100644 --- a/tests/baselines/reference/tsxReactEmit4.errors.txt +++ b/tests/baselines/reference/tsxReactEmit4.errors.txt @@ -17,4 +17,6 @@ tests/cases/conformance/jsx/tsxReactEmit4.tsx(11,5): error TS2304: Cannot find n !!! error TS2304: Cannot find name 'blah'. ; - \ No newline at end of file + + // Should emit React.__spread({}, p, {x: 0}) + var spread1 =
; \ No newline at end of file diff --git a/tests/baselines/reference/tsxReactEmit4.js b/tests/baselines/reference/tsxReactEmit4.js index b162b17ad7f..2254c4dd651 100644 --- a/tests/baselines/reference/tsxReactEmit4.js +++ b/tests/baselines/reference/tsxReactEmit4.js @@ -12,8 +12,12 @@ var openClosed1 =
{blah}
; - + +// Should emit React.__spread({}, p, {x: 0}) +var spread1 =
; //// [tsxReactEmit4.js] var p; var openClosed1 = React.createElement("div", null, blah); +// Should emit React.__spread({}, p, {x: 0}) +var spread1 = React.createElement("div", React.__spread({}, p, {x: 0})); diff --git a/tests/cases/conformance/jsx/tsxReactEmit4.tsx b/tests/cases/conformance/jsx/tsxReactEmit4.tsx index 0987b89c978..f007c35c24a 100644 --- a/tests/cases/conformance/jsx/tsxReactEmit4.tsx +++ b/tests/cases/conformance/jsx/tsxReactEmit4.tsx @@ -13,3 +13,6 @@ var openClosed1 =
{blah}
; + +// Should emit React.__spread({}, p, {x: 0}) +var spread1 =
; \ No newline at end of file