From 7a3683de2b406762dfb42e0f3d5036a033f02a4b Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Sat, 22 Nov 2014 11:51:28 +0200 Subject: [PATCH] Fix space not being skipped after object literal inside expression container. Fixes #7. --- acorn.js | 9 ++++--- package.json | 2 +- test/tests-jsx.js | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 4 deletions(-) diff --git a/acorn.js b/acorn.js index 1d357e5133..f777a4e39c 100644 --- a/acorn.js +++ b/acorn.js @@ -2549,6 +2549,8 @@ function parseObj() { var node = startNode(), first = true, propHash = {}; node.properties = []; + var origInXJSChildExpression = inXJSChildExpression; + inXJSChildExpression = false; next(); while (!eat(_braceR)) { if (!first) { @@ -2584,9 +2586,10 @@ checkPropClash(prop, propHash); node.properties.push(finishNode(prop, "Property")); - } + } + inXJSChildExpression = origInXJSChildExpression; return finishNode(node, "ObjectExpression"); - } + } function parsePropertyName(prop) { if (options.ecmaVersion >= 6) { @@ -3158,7 +3161,7 @@ inXJSTag = origInXJSTag; inXJSChild = origInXJSChild; inXJSChildExpression = false; - + expect(_braceR); return finishNode(node, "XJSExpressionContainer"); } diff --git a/package.json b/package.json index 15f0240dff..1ae847636b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "acorn-jsx", "description": "Alternative React JSX parser", "main": "acorn.js", - "version": "0.9.1-4", + "version": "0.9.1-5", "maintainers": [ { "name": "Marijn Haverbeke", diff --git a/test/tests-jsx.js b/test/tests-jsx.js index 39b1b0a112..a07f0aea2e 100644 --- a/test/tests-jsx.js +++ b/test/tests-jsx.js @@ -3375,6 +3375,72 @@ var fbTestFixture = { } }] } + }, + + '
{ {a} }
': { + type: "ExpressionStatement", + start: 0, + end: 18, + expression: { + type: "XJSElement", + start: 0, + end: 18, + openingElement: { + type: "XJSOpeningElement", + start: 0, + end: 5, + attributes: [], + name: { + type: "XJSIdentifier", + start: 1, + end: 4, + name: "div" + }, + selfClosing: false + }, + closingElement: { + type: "XJSClosingElement", + start: 12, + end: 18, + name: { + type: "XJSIdentifier", + start: 14, + end: 17, + name: "div" + } + }, + children: [{ + type: "XJSExpressionContainer", + start: 5, + end: 12, + expression: { + type: "ObjectExpression", + start: 7, + end: 10, + properties: [{ + type: "Property", + start: 8, + end: 9, + method: false, + shorthand: true, + computed: false, + key: { + type: "Identifier", + start: 8, + end: 9, + name: "a" + }, + kind: "init", + value: { + type: "Identifier", + start: 8, + end: 9, + name: "a" + } + }] + } + }] + } } } };