From e93b69d59579da69b042c875bfa6925a9840e641 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Sun, 25 Jan 2015 00:27:06 +0200 Subject: [PATCH 1/3] Add regression test for #15. --- test/tests-jsx.js | 99 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/test/tests-jsx.js b/test/tests-jsx.js index b952a4f680..6604c34bf0 100644 --- a/test/tests-jsx.js +++ b/test/tests-jsx.js @@ -40,6 +40,7 @@ var fbTestFixture = { end: { line: 1, column: 5 } } }, + '': { type: 'ExpressionStatement', expression: { @@ -128,6 +129,7 @@ var fbTestFixture = { end: { line: 1, column: 11 } } }, + ' {value} ': { type: 'ExpressionStatement', expression: { @@ -330,6 +332,7 @@ var fbTestFixture = { end: { line: 1, column: 40 } } }, + '': { type: "ExpressionStatement", expression: { @@ -416,6 +419,7 @@ var fbTestFixture = { }, range: [0, 40] }, + '': { type: "ExpressionStatement", expression: { @@ -489,6 +493,7 @@ var fbTestFixture = { } } }, + '<日本語>': { type: "ExpressionStatement", expression: { @@ -2541,6 +2546,7 @@ var fbTestFixture = { } } }, + '
{aa.b}
': { "type": "ExpressionStatement", "start": 0, @@ -3442,6 +3448,99 @@ var fbTestFixture = { raw: "/text" }] } + }, + + '
{a}{b}
': { + type: "ExpressionStatement", + start: 0, + end: 17, + expression: { + type: "JSXElement", + start: 0, + end: 17, + openingElement: { + type: "JSXOpeningElement", + start: 0, + end: 5, + attributes: [], + name: { + type: "JSXIdentifier", + start: 1, + end: 4, + name: "div" + }, + selfClosing: false + }, + closingElement: { + type: "JSXClosingElement", + start: 11, + end: 17, + name: { + type: "JSXIdentifier", + start: 13, + end: 16, + name: "div" + } + }, + children: [{ + type: 'JSXExpressionContainer', + expression: { + type: 'Identifier', + name: 'a', + range: [6, 7], + loc: { + start: { + line: 1, + column: 6 + }, + end: { + line: 1, + column: 7 + } + } + }, + range: [5, 8], + loc: { + start: { + line: 1, + column: 5 + }, + end: { + line: 1, + column: 8 + } + } + }, { + type: 'JSXExpressionContainer', + expression: { + type: 'Identifier', + name: 'b', + range: [9, 10], + loc: { + start: { + line: 1, + column: 9 + }, + end: { + line: 1, + column: 10 + } + } + }, + range: [8, 11], + loc: { + start: { + line: 1, + column: 8 + }, + end: { + line: 1, + column: 11 + } + } + } + ] + } } } }; From 719ecbd2037c2446f960ab0affac07eb694e3386 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Sun, 25 Jan 2015 00:33:03 +0200 Subject: [PATCH 2/3] Improve JSX braces context handling. --- acorn.js | 12 +++++------- test/tests-jsx.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/acorn.js b/acorn.js index 9998818ebe..3ae65e38b7 100644 --- a/acorn.js +++ b/acorn.js @@ -653,10 +653,6 @@ return true; if (prevType == _braceL) return curTokContext() === b_stat; - if (prevType === _jsxTagEnd || prevType === _jsxText) - return true; - if (prevType === _jsxName) - return false; return !tokExprAllowed; } @@ -676,8 +672,6 @@ if (type === _parenR || type === _braceR) { var out = tokContext.pop(); if (out === b_tmpl) { - preserveSpace = true; - } else if (curTokContext() === j_expr) { preserveSpace = tokExprAllowed = true; } else if (out === b_stat && curTokContext() === f_expr) { tokContext.pop(); @@ -686,7 +680,11 @@ tokExprAllowed = !(out && out.isExpr); } } else if (type === _braceL) { - tokContext.push(braceIsBlock(prevType) ? b_stat : b_expr); + switch (curTokContext()) { + case j_oTag: tokContext.push(b_expr); break; + case j_expr: tokContext.push(b_tmpl); break; + default: tokContext.push(braceIsBlock(prevType) ? b_stat : b_expr); + } tokExprAllowed = true; } else if (type === _dollarBraceL) { tokContext.push(b_tmpl); diff --git a/test/tests-jsx.js b/test/tests-jsx.js index 6604c34bf0..e5d2999703 100644 --- a/test/tests-jsx.js +++ b/test/tests-jsx.js @@ -3541,6 +3541,52 @@ var fbTestFixture = { } ] } + }, + + '
': { + type: "ExpressionStatement", + range: [0, 32], + expression: { + type: "JSXElement", + range: [0, 32], + openingElement: { + type: "JSXOpeningElement", + range: [0, 32], + attributes: [ + { + type: "JSXAttribute", + range: [5, 18], + name: { + type: "JSXIdentifier", + range: [5, 8], + name: "pre" + }, + value: { + type: "Literal", + range: [9, 18], + value: "leading" + } + }, + { + type: "JSXSpreadAttribute", + range: [19, 29], + argument: { + type: "Identifier", + range: [23, 28], + name: "props" + } + } + ], + name: { + type: "JSXIdentifier", + range: [1, 4], + name: "div" + }, + selfClosing: true + }, + closingElement: null, + children: [] + } } } }; From 401e6c4f30d6ef5e325fffeffbb35f2afa8c719c Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Sun, 25 Jan 2015 00:33:14 +0200 Subject: [PATCH 3/3] Update version. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ffbbede7d..fcf41caaf9 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "Alternative, faster React.js JSX parser", "homepage": "https://github.com/RReverser/acorn-jsx", "main": "acorn.js", - "version": "0.11.1-1", + "version": "0.11.1-2", "engines": {"node": ">=0.4.0"}, "maintainers": [{"name": "Ingvar Stepanyan", "email": "me@rreverser.com",