From 29910d2b2d7f268a977bc1dbc10d9ea5fc5dcaa7 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Wed, 21 Jan 2015 03:00:12 +0000 Subject: [PATCH] XJS -> JSX as per facebook/esprima#83. --- acorn.js | 160 +++++++++--------- test/tests-jsx.js | 416 +++++++++++++++++++++++----------------------- 2 files changed, 288 insertions(+), 288 deletions(-) diff --git a/acorn.js b/acorn.js index 5082a2720b..c23eb47aef 100644 --- a/acorn.js +++ b/acorn.js @@ -361,7 +361,7 @@ var _num = {type: "num"}, _regexp = {type: "regexp"}, _string = {type: "string"}; var _name = {type: "name"}, _eof = {type: "eof"}; - var _xjsName = {type: "xjsName"}; + var _jsxName = {type: "jsxName"}; // Keyword tokens. The `keyword` property (also used in keyword-like // operators) indicates that the token originated from an @@ -425,7 +425,7 @@ var _arrow = {type: "=>", beforeExpr: true}, _template = {type: "template"}; var _ellipsis = {type: "...", prefix: true, beforeExpr: true}; var _backQuote = {type: "`"}, _dollarBraceL = {type: "${", beforeExpr: true}; - var _xjsText = {type: "xjsText"}; + var _jsxText = {type: "jsxText"}; // Operators. These carry several kinds of properties to help the // parser use them properly (the presence of these properties is @@ -461,7 +461,7 @@ var _star = {binop: 10, beforeExpr: true}; // JSX tag boundaries - var _xjsTagStart = {type: "xjsTagStart"}, _xjsTagEnd = {type: "xjsTagEnd"}; + var _jsxTagStart = {type: "jsxTagStart"}, _jsxTagEnd = {type: "jsxTagEnd"}; // Provide access to the token types for external users of the // tokenizer. @@ -661,9 +661,9 @@ return true; if (prevType == _braceL) return curTokContext() === b_stat; - if (prevType === _xjsTagEnd || prevType === _xjsText) + if (prevType === _jsxTagEnd || prevType === _jsxText) return true; - if (prevType === _xjsName) + if (prevType === _jsxName) return false; return !tokExprAllowed; } @@ -709,11 +709,11 @@ preserveSpace = true; } tokExprAllowed = false; - } else if (type === _xjsTagStart) { + } else if (type === _jsxTagStart) { tokContext.push(j_expr); // treat as beginning of JSX expression tokContext.push(j_oTag); // start opening tag context tokExprAllowed = false; - } else if (type === _xjsTagEnd) { + } else if (type === _jsxTagEnd) { var out = tokContext.pop(); if (out === j_oTag && prevType === _slash || out === j_cTag) { tokContext.pop(); @@ -721,9 +721,9 @@ } else { preserveSpace = tokExprAllowed = true; } - } else if (type === _xjsText) { + } else if (type === _jsxText) { preserveSpace = tokExprAllowed = true; - } else if (type === _slash && prevType === _xjsTagStart) { + } else if (type === _slash && prevType === _jsxTagStart) { tokContext.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore tokContext.push(j_cTag); // reconsider as closing tag context tokExprAllowed = false; @@ -889,13 +889,13 @@ } if (tokExprAllowed && code === 60) { ++tokPos; - return finishToken(_xjsTagStart); + return finishToken(_jsxTagStart); } if (code === 62) { var context = curTokContext(); if (context === j_oTag || context === j_cTag) { ++tokPos; - return finishToken(_xjsTagEnd); + return finishToken(_jsxTagEnd); } } if (next === 61) @@ -1001,7 +1001,7 @@ } if (context === j_expr) { - return readXJSToken(); + return readJSXToken(); } var code = input.charCodeAt(tokPos); @@ -1009,7 +1009,7 @@ // JSX identifier if (isIdentifierStart(code)) return readJSXWord(); } else if (context === j_expr) { - return readXJSToken(); + return readJSXToken(); } else { // Identifier or keyword. '\uXXXX' sequences are allowed in // identifiers, so '\' also dispatches to that. @@ -1186,7 +1186,7 @@ if (ch === 92 && !isJSX) { // '\' out += readEscapedChar(); } else if (ch === 38 && isJSX) { // '&' - out += readXJSEntity(); + out += readJSXEntity(); } else { ++tokPos; if (isNewLine(ch)) { @@ -1491,7 +1491,7 @@ diams: '\u2666' }; - function readXJSEntity() { + function readJSXEntity() { var str = '', count = 0, entity; var ch = input[tokPos]; if (ch !== '&') raise(tokPos, "Entity must start with an ampersand"); @@ -1527,7 +1527,7 @@ // Reads inline JSX contents token. - function readXJSToken() { + function readJSXToken() { var out = "", start = tokPos; for (;;) { if (tokPos >= inputLen) raise(tokStart, "Unterminated JSX contents"); @@ -1538,10 +1538,10 @@ if (tokPos === start) { return getTokenFromCode(ch); } - return finishToken(_xjsText, out); + return finishToken(_jsxText, out); case 38: // '&' - out += readXJSEntity(); + out += readJSXEntity(); break; default: @@ -1665,7 +1665,7 @@ do { ch = input.charCodeAt(++tokPos); } while (isIdentifierChar(ch) || ch === 45); // '-' - return finishToken(_xjsName, input.slice(start, tokPos)); + return finishToken(_jsxName, input.slice(start, tokPos)); } // ## Parser @@ -2580,7 +2580,7 @@ next(); return finishNode(node, "Literal"); - case _num: case _string: case _xjsText: + case _num: case _string: case _jsxText: var node = startNode(); node.value = tokVal; node.raw = input.slice(tokStart, tokEnd); @@ -2659,8 +2659,8 @@ case _backQuote: return parseTemplate(); - case _xjsTagStart: - return parseXJSElement(); + case _jsxTagStart: + return parseJSXElement(); default: unexpected(); @@ -3175,26 +3175,26 @@ // Transforms JSX element name to string. - function getQualifiedXJSName(object) { - if (object.type === "XJSIdentifier") { + function getQualifiedJSXName(object) { + if (object.type === "JSXIdentifier") { return object.name; } - if (object.type === "XJSNamespacedName") { + if (object.type === "JSXNamespacedName") { return object.namespace.name + ':' + object.name.name; } - if (object.type === "XJSMemberExpression") { + if (object.type === "JSXMemberExpression") { return ( - getQualifiedXJSName(object.object) + '.' + - getQualifiedXJSName(object.property) + getQualifiedJSXName(object.object) + '.' + + getQualifiedJSXName(object.property) ); } } // Parse next token as JSX identifier - function parseXJSIdentifier() { + function parseJSXIdentifier() { var node = startNode(); - if (tokType === _xjsName) { + if (tokType === _jsxName) { node.name = tokVal; } else if (tokType.keyword) { node.name = tokType.keyword; @@ -3202,68 +3202,68 @@ unexpected(); } next(); - return finishNode(node, "XJSIdentifier"); + return finishNode(node, "JSXIdentifier"); } // Parse namespaced identifier. - function parseXJSNamespacedName() { + function parseJSXNamespacedName() { var start = storeCurrentPos(); - var name = parseXJSIdentifier(); + var name = parseJSXIdentifier(); if (!eat(_colon)) return name; var node = startNodeAt(start); node.namespace = name; - node.name = parseXJSIdentifier(); - return finishNode(node, "XJSNamespacedName"); + node.name = parseJSXIdentifier(); + return finishNode(node, "JSXNamespacedName"); } // Parses element name in any form - namespaced, member // or single identifier. - function parseXJSElementName() { + function parseJSXElementName() { var start = storeCurrentPos(); - var node = parseXJSNamespacedName(); + var node = parseJSXNamespacedName(); while (eat(_dot)) { var newNode = startNodeAt(start); newNode.object = node; - newNode.property = parseXJSIdentifier(); - node = finishNode(newNode, "XJSMemberExpression"); + newNode.property = parseJSXIdentifier(); + node = finishNode(newNode, "JSXMemberExpression"); } return node; } // Parses any type of JSX attribute value. - function parseXJSAttributeValue() { + function parseJSXAttributeValue() { switch (tokType) { case _braceL: - var node = parseXJSExpressionContainer(); - if (node.expression.type === "XJSEmptyExpression") { + var node = parseJSXExpressionContainer(); + if (node.expression.type === "JSXEmptyExpression") { raise( node.start, - 'XJS attributes must only be assigned a non-empty ' + + 'JSX attributes must only be assigned a non-empty ' + 'expression' ); } return node; - case _xjsTagStart: - return parseXJSElement(); + case _jsxTagStart: + return parseJSXElement(); - case _xjsText: + case _jsxText: case _string: return parseExprAtom(); default: - raise(tokStart, "XJS value should be either an expression or a quoted XJS text"); + raise(tokStart, "JSX value should be either an expression or a quoted JSX text"); } } - // XJSEmptyExpression is unique type since it doesn't actually parse anything, + // JSXEmptyExpression is unique type since it doesn't actually parse anything, // and so it should start at the end of last read token (left brace) and finish // at the beginning of the next one (right brace). - function parseXJSEmptyExpression() { + function parseJSXEmptyExpression() { if (tokType !== _braceR) { unexpected(); } @@ -3278,95 +3278,95 @@ tokStartLoc = lastEndLoc; lastEndLoc = tmp; - return finishNode(startNode(), "XJSEmptyExpression"); + return finishNode(startNode(), "JSXEmptyExpression"); } // Parses JSX expression enclosed into curly brackets. - function parseXJSExpressionContainer() { + function parseJSXExpressionContainer() { var node = startNode(); next(); - node.expression = tokType === _braceR ? parseXJSEmptyExpression() : parseExpression(); + node.expression = tokType === _braceR ? parseJSXEmptyExpression() : parseExpression(); expect(_braceR); - return finishNode(node, "XJSExpressionContainer"); + return finishNode(node, "JSXExpressionContainer"); } // Parses following JSX attribute name-value pair. - function parseXJSAttribute() { + function parseJSXAttribute() { var node = startNode(); if (eat(_braceL)) { if (tokType !== _ellipsis) unexpected(); node.argument = parseMaybeUnary().argument; expect(_braceR); - return finishNode(node, "XJSSpreadAttribute"); + return finishNode(node, "JSXSpreadAttribute"); } - node.name = parseXJSNamespacedName(); - node.value = eat(_eq) ? parseXJSAttributeValue() : null; - return finishNode(node, "XJSAttribute"); + node.name = parseJSXNamespacedName(); + node.value = eat(_eq) ? parseJSXAttributeValue() : null; + return finishNode(node, "JSXAttribute"); } // Parses JSX opening tag starting after '<'. - function parseXJSOpeningElementAt(start) { + function parseJSXOpeningElementAt(start) { var node = startNodeAt(start); node.attributes = []; - node.name = parseXJSElementName(); - while (tokType !== _slash && tokType !== _xjsTagEnd) { - node.attributes.push(parseXJSAttribute()); + node.name = parseJSXElementName(); + while (tokType !== _slash && tokType !== _jsxTagEnd) { + node.attributes.push(parseJSXAttribute()); } node.selfClosing = eat(_slash); - expect(_xjsTagEnd); - return finishNode(node, "XJSOpeningElement"); + expect(_jsxTagEnd); + return finishNode(node, "JSXOpeningElement"); } // Parses JSX closing tag starting after '" + "Expected corresponding JSX closing tag for <" + getQualifiedJSXName(openingElement.name) + ">" ); } } @@ -3374,14 +3374,14 @@ node.openingElement = openingElement; node.closingElement = closingElement; node.children = children; - return finishNode(node, "XJSElement"); + return finishNode(node, "JSXElement"); } // Parses entire JSX element from current position. - function parseXJSElement() { + function parseJSXElement() { var start = storeCurrentPos(); next(); - return parseXJSElementAt(start); + return parseJSXElementAt(start); } }); diff --git a/test/tests-jsx.js b/test/tests-jsx.js index 186a818a9a..b952a4f680 100644 --- a/test/tests-jsx.js +++ b/test/tests-jsx.js @@ -2,15 +2,15 @@ var fbTestFixture = { // Taken and adapted from esprima-fb/fbtest.js. - 'XJS': { + 'JSX': { '': { type: "ExpressionStatement", expression: { - type: "XJSElement", + type: "JSXElement", openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "a", range: [1, 2], loc: { @@ -43,13 +43,13 @@ var fbTestFixture = { '': { type: 'ExpressionStatement', expression: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSNamespacedName', + type: 'JSXNamespacedName', namespace: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'n', range: [1, 2], loc: { @@ -58,7 +58,7 @@ var fbTestFixture = { } }, name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [3, 4], loc: { @@ -74,11 +74,11 @@ var fbTestFixture = { }, selfClosing: true, attributes: [{ - type: 'XJSAttribute', + type: 'JSXAttribute', name: { - type: 'XJSNamespacedName', + type: 'JSXNamespacedName', namespace: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'n', range: [5, 6], loc: { @@ -87,7 +87,7 @@ var fbTestFixture = { } }, name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'v', range: [7, 8], loc: { @@ -131,11 +131,11 @@ var fbTestFixture = { ' {value} ': { type: 'ExpressionStatement', expression: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { @@ -145,11 +145,11 @@ var fbTestFixture = { }, selfClosing: false, attributes: [{ - type: 'XJSAttribute', + type: 'JSXAttribute', name: { - type: 'XJSNamespacedName', + type: 'JSXNamespacedName', namespace: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'n', range: [3, 4], loc: { @@ -158,7 +158,7 @@ var fbTestFixture = { } }, name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'foo', range: [5, 8], loc: { @@ -195,9 +195,9 @@ var fbTestFixture = { } }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [38, 39], loc: { @@ -221,7 +221,7 @@ var fbTestFixture = { end: { line: 1, column: 16 } } }, { - type: 'XJSExpressionContainer', + type: 'JSXExpressionContainer', expression: { type: 'Identifier', name: 'value', @@ -246,11 +246,11 @@ var fbTestFixture = { end: { line: 1, column: 24 } } }, { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'b', range: [25, 26], loc: { @@ -267,9 +267,9 @@ var fbTestFixture = { } }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'b', range: [34, 35], loc: { @@ -284,11 +284,11 @@ var fbTestFixture = { } }, children: [{ - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'c', range: [28, 29], loc: { @@ -333,25 +333,25 @@ var fbTestFixture = { '': { type: "ExpressionStatement", expression: { - type: "XJSElement", + type: "JSXElement", openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "a", range: [1, 2] }, selfClosing: true, attributes: [ { - type: "XJSAttribute", + type: "JSXAttribute", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "b", range: [3, 4] }, value: { - type: "XJSExpressionContainer", + type: "JSXExpressionContainer", expression: { type: "Literal", value: " ", @@ -363,9 +363,9 @@ var fbTestFixture = { range: [3, 10] }, { - type: "XJSAttribute", + type: "JSXAttribute", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "c", range: [11, 12] }, @@ -378,9 +378,9 @@ var fbTestFixture = { range: [11, 16] }, { - type: "XJSAttribute", + type: "JSXAttribute", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "d", range: [17, 18] }, @@ -393,9 +393,9 @@ var fbTestFixture = { range: [17, 26] }, { - type: "XJSAttribute", + type: "JSXAttribute", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "e", range: [27, 28] }, @@ -419,11 +419,11 @@ var fbTestFixture = { '': { type: "ExpressionStatement", expression: { - type: "XJSElement", + type: "JSXElement", openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "a", range: [ 1, @@ -492,11 +492,11 @@ var fbTestFixture = { '<日本語>': { type: "ExpressionStatement", expression: { - type: "XJSElement", + type: "JSXElement", openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "日本語", range: [ 1, @@ -531,9 +531,9 @@ var fbTestFixture = { } }, closingElement: { - type: "XJSClosingElement", + type: "JSXClosingElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "日本語", range: [ 7, @@ -600,11 +600,11 @@ var fbTestFixture = { '\nbar\nbaz\n': { type: "ExpressionStatement", expression: { - type: "XJSElement", + type: "JSXElement", openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "AbC-def", range: [ 1, @@ -624,9 +624,9 @@ var fbTestFixture = { selfClosing: false, attributes: [ { - type: "XJSAttribute", + type: "JSXAttribute", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "test", range: [ 11, @@ -694,9 +694,9 @@ var fbTestFixture = { } }, closingElement: { - type: "XJSClosingElement", + type: "JSXClosingElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "AbC-def", range: [ 43, @@ -783,11 +783,11 @@ var fbTestFixture = { ' : } />': { type: "ExpressionStatement", expression: { - type: "XJSElement", + type: "JSXElement", openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "a", range: [ 1, @@ -807,9 +807,9 @@ var fbTestFixture = { selfClosing: true, attributes: [ { - type: "XJSAttribute", + type: "JSXAttribute", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "b", range: [ 3, @@ -827,7 +827,7 @@ var fbTestFixture = { } }, value: { - type: "XJSExpressionContainer", + type: "JSXExpressionContainer", expression: { type: "ConditionalExpression", test: { @@ -849,11 +849,11 @@ var fbTestFixture = { } }, consequent: { - type: "XJSElement", + type: "JSXElement", openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "c", range: [ 11, @@ -905,11 +905,11 @@ var fbTestFixture = { } }, alternate: { - type: "XJSElement", + type: "JSXElement", openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", name: { - type: "XJSIdentifier", + type: "JSXIdentifier", name: "d", range: [ 19, @@ -1057,11 +1057,11 @@ var fbTestFixture = { '{}': { type: 'ExpressionStatement', expression: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { @@ -1078,9 +1078,9 @@ var fbTestFixture = { } }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [7, 8], loc: { @@ -1095,9 +1095,9 @@ var fbTestFixture = { } }, children: [{ - type: 'XJSExpressionContainer', + type: 'JSXExpressionContainer', expression: { - type: 'XJSEmptyExpression', + type: 'JSXEmptyExpression', range: [4, 4], loc: { start: { line: 1, column: 4 }, @@ -1126,11 +1126,11 @@ var fbTestFixture = { '{/* this is a comment */}': { type: 'ExpressionStatement', expression: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { @@ -1147,9 +1147,9 @@ var fbTestFixture = { } }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [30, 31], loc: { @@ -1164,9 +1164,9 @@ var fbTestFixture = { } }, children: [{ - type: 'XJSExpressionContainer', + type: 'JSXExpressionContainer', expression: { - type: 'XJSEmptyExpression', + type: 'JSXEmptyExpression', range: [4, 27], loc: { start: { line: 1, column: 4 }, @@ -1195,11 +1195,11 @@ var fbTestFixture = { '
@test content
': { type: 'ExpressionStatement', expression: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'div', range: [1, 4], loc: { @@ -1216,9 +1216,9 @@ var fbTestFixture = { } }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'div', range: [20, 23], loc: { @@ -1258,11 +1258,11 @@ var fbTestFixture = { '

7x invalid-js-identifier
': { type: 'ExpressionStatement', expression: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'div', range: [ 1, @@ -1297,9 +1297,9 @@ var fbTestFixture = { } }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'div', range: [ 37, @@ -1332,11 +1332,11 @@ var fbTestFixture = { } }, children: [{ - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'br', range: [ 6, @@ -1439,11 +1439,11 @@ var fbTestFixture = { ' right=monkeys /> gorillas />': { "type": "ExpressionStatement", "expression": { - "type": "XJSElement", + "type": "JSXElement", "openingElement": { - "type": "XJSOpeningElement", + "type": "JSXOpeningElement", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "LeftRight", "range": [ 1, @@ -1463,9 +1463,9 @@ var fbTestFixture = { "selfClosing": true, "attributes": [ { - "type": "XJSAttribute", + "type": "JSXAttribute", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "left", "range": [ 11, @@ -1483,11 +1483,11 @@ var fbTestFixture = { } }, "value": { - "type": "XJSElement", + "type": "JSXElement", "openingElement": { - "type": "XJSOpeningElement", + "type": "JSXOpeningElement", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "a", "range": [ 17, @@ -1554,9 +1554,9 @@ var fbTestFixture = { } }, { - "type": "XJSAttribute", + "type": "JSXAttribute", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "right", "range": [ 22, @@ -1574,11 +1574,11 @@ var fbTestFixture = { } }, "value": { - "type": "XJSElement", + "type": "JSXElement", "openingElement": { - "type": "XJSOpeningElement", + "type": "JSXOpeningElement", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "b", "range": [ 29, @@ -1613,9 +1613,9 @@ var fbTestFixture = { } }, "closingElement": { - "type": "XJSClosingElement", + "type": "JSXClosingElement", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "b", "range": [ 52, @@ -1750,13 +1750,13 @@ var fbTestFixture = { '': { type: 'ExpressionStatement', expression: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSMemberExpression', + type: 'JSXMemberExpression', object: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { @@ -1765,7 +1765,7 @@ var fbTestFixture = { } }, property: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'b', range: [3, 4], loc: { @@ -1788,11 +1788,11 @@ var fbTestFixture = { } }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', name: { - type: 'XJSMemberExpression', + type: 'JSXMemberExpression', object: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [7, 8], loc: { @@ -1801,7 +1801,7 @@ var fbTestFixture = { } }, property: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'b', range: [9, 10], loc: { @@ -1838,15 +1838,15 @@ var fbTestFixture = { '': { type: 'ExpressionStatement', expression: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSMemberExpression', + type: 'JSXMemberExpression', object: { - type: 'XJSMemberExpression', + type: 'JSXMemberExpression', object: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { @@ -1855,7 +1855,7 @@ var fbTestFixture = { } }, property: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'b', range: [3, 4], loc: { @@ -1870,7 +1870,7 @@ var fbTestFixture = { } }, property: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'c', range: [5, 6], loc: { @@ -1893,13 +1893,13 @@ var fbTestFixture = { } }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', name: { - type: 'XJSMemberExpression', + type: 'JSXMemberExpression', object: { - type: 'XJSMemberExpression', + type: 'JSXMemberExpression', object: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'a', range: [9, 10], loc: { @@ -1908,7 +1908,7 @@ var fbTestFixture = { } }, property: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'b', range: [11, 12], loc: { @@ -1923,7 +1923,7 @@ var fbTestFixture = { } }, property: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'c', range: [13, 14], loc: { @@ -1958,7 +1958,7 @@ var fbTestFixture = { }, // In order to more useful parse errors, we disallow following an - // XJSElement by a less-than symbol. In the rare case that the binary + // JSXElement by a less-than symbol. In the rare case that the binary // operator was intended, the tag can be wrapped in parentheses: '(
) < x;': { type: 'ExpressionStatement', @@ -1966,11 +1966,11 @@ var fbTestFixture = { type: 'BinaryExpression', operator: '<', left: { - type: 'XJSElement', + type: 'JSXElement', openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', name: 'div', range: [2, 5], loc: { @@ -2019,11 +2019,11 @@ var fbTestFixture = { '
': { "type": "ExpressionStatement", "expression": { - "type": "XJSElement", + "type": "JSXElement", "openingElement": { - "type": "XJSOpeningElement", + "type": "JSXOpeningElement", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "div", "range": [ 1, @@ -2043,7 +2043,7 @@ var fbTestFixture = { "selfClosing": true, "attributes": [ { - "type": "XJSSpreadAttribute", + "type": "JSXSpreadAttribute", "argument": { "type": "Identifier", "name": "props", @@ -2129,11 +2129,11 @@ var fbTestFixture = { '
': { "type": "ExpressionStatement", "expression": { - "type": "XJSElement", + "type": "JSXElement", "openingElement": { - "type": "XJSOpeningElement", + "type": "JSXOpeningElement", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "div", "range": [ 1, @@ -2153,7 +2153,7 @@ var fbTestFixture = { "selfClosing": true, "attributes": [ { - "type": "XJSSpreadAttribute", + "type": "JSXSpreadAttribute", "argument": { "type": "Identifier", "name": "props", @@ -2188,9 +2188,9 @@ var fbTestFixture = { } }, { - "type": "XJSAttribute", + "type": "JSXAttribute", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "post", "range": [ 16, @@ -2293,11 +2293,11 @@ var fbTestFixture = { '
': { "type": "ExpressionStatement", "expression": { - "type": "XJSElement", + "type": "JSXElement", "openingElement": { - "type": "XJSOpeningElement", + "type": "JSXOpeningElement", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "div", "range": [ 1, @@ -2317,9 +2317,9 @@ var fbTestFixture = { "selfClosing": false, "attributes": [ { - "type": "XJSAttribute", + "type": "JSXAttribute", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "pre", "range": [ 5, @@ -2371,9 +2371,9 @@ var fbTestFixture = { } }, { - "type": "XJSAttribute", + "type": "JSXAttribute", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "pre2", "range": [ 19, @@ -2425,7 +2425,7 @@ var fbTestFixture = { } }, { - "type": "XJSSpreadAttribute", + "type": "JSXSpreadAttribute", "argument": { "type": "Identifier", "name": "props", @@ -2476,9 +2476,9 @@ var fbTestFixture = { } }, "closingElement": { - "type": "XJSClosingElement", + "type": "JSXClosingElement", "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "name": "div", "range": [ 49, @@ -2560,7 +2560,7 @@ var fbTestFixture = { 52 ], "expression": { - "type": "XJSElement", + "type": "JSXElement", "start": 0, "end": 52, "loc": { @@ -2578,7 +2578,7 @@ var fbTestFixture = { 52 ], "openingElement": { - "type": "XJSOpeningElement", + "type": "JSXOpeningElement", "start": 0, "end": 31, "loc": { @@ -2597,7 +2597,7 @@ var fbTestFixture = { ], "attributes": [ { - "type": "XJSAttribute", + "type": "JSXAttribute", "start": 3, "end": 16, "loc": { @@ -2615,7 +2615,7 @@ var fbTestFixture = { 16 ], "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "start": 3, "end": 5, "loc": { @@ -2635,7 +2635,7 @@ var fbTestFixture = { "name": "aa" }, "value": { - "type": "XJSExpressionContainer", + "type": "JSXExpressionContainer", "start": 6, "end": 16, "loc": { @@ -2755,7 +2755,7 @@ var fbTestFixture = { } }, { - "type": "XJSAttribute", + "type": "JSXAttribute", "start": 17, "end": 30, "loc": { @@ -2773,7 +2773,7 @@ var fbTestFixture = { 30 ], "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "start": 17, "end": 19, "loc": { @@ -2793,7 +2793,7 @@ var fbTestFixture = { "name": "bb" }, "value": { - "type": "XJSExpressionContainer", + "type": "JSXExpressionContainer", "start": 20, "end": 30, "loc": { @@ -2914,7 +2914,7 @@ var fbTestFixture = { } ], "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "start": 1, "end": 2, "loc": { @@ -2936,7 +2936,7 @@ var fbTestFixture = { "selfClosing": false }, "closingElement": { - "type": "XJSClosingElement", + "type": "JSXClosingElement", "start": 48, "end": 52, "loc": { @@ -2954,7 +2954,7 @@ var fbTestFixture = { 52 ], "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "start": 50, "end": 51, "loc": { @@ -2976,7 +2976,7 @@ var fbTestFixture = { }, "children": [ { - "type": "XJSElement", + "type": "JSXElement", "start": 31, "end": 48, "loc": { @@ -2994,7 +2994,7 @@ var fbTestFixture = { 48 ], "openingElement": { - "type": "XJSOpeningElement", + "type": "JSXOpeningElement", "start": 31, "end": 36, "loc": { @@ -3013,7 +3013,7 @@ var fbTestFixture = { ], "attributes": [], "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "start": 32, "end": 35, "loc": { @@ -3035,7 +3035,7 @@ var fbTestFixture = { "selfClosing": false }, "closingElement": { - "type": "XJSClosingElement", + "type": "JSXClosingElement", "start": 42, "end": 48, "loc": { @@ -3053,7 +3053,7 @@ var fbTestFixture = { 48 ], "name": { - "type": "XJSIdentifier", + "type": "JSXIdentifier", "start": 44, "end": 47, "loc": { @@ -3075,7 +3075,7 @@ var fbTestFixture = { }, "children": [ { - "type": "XJSExpressionContainer", + "type": "JSXExpressionContainer", "start": 36, "end": 42, "loc": { @@ -3165,16 +3165,16 @@ var fbTestFixture = { start: 0, end: 40, expression: { - type: "XJSElement", + type: "JSXElement", start: 0, end: 38, openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", start: 0, end: 3, attributes: [], name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 1, end: 2, name: "p" @@ -3182,11 +3182,11 @@ var fbTestFixture = { selfClosing: false }, closingElement: { - type: "XJSClosingElement", + type: "JSXClosingElement", start: 34, end: 38, name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 36, end: 37, name: "p" @@ -3201,19 +3201,19 @@ var fbTestFixture = { raw: "foo " }, { - type: "XJSElement", + type: "JSXElement", start: 7, end: 30, openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", start: 7, end: 22, attributes: [{ - type: "XJSAttribute", + type: "JSXAttribute", start: 10, end: 21, name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 10, end: 14, name: "href" @@ -3227,7 +3227,7 @@ var fbTestFixture = { } }], name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 8, end: 9, name: "a" @@ -3235,11 +3235,11 @@ var fbTestFixture = { selfClosing: false }, closingElement: { - type: "XJSClosingElement", + type: "JSXClosingElement", start: 26, end: 30, name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 28, end: 29, name: "a" @@ -3269,16 +3269,16 @@ var fbTestFixture = { start: 0, end: 30, expression: { - type: 'XJSElement', + type: 'JSXElement', start: 0, end: 30, openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', start: 0, end: 5, attributes: [], name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', start: 1, end: 4, name: 'div' @@ -3286,31 +3286,31 @@ var fbTestFixture = { selfClosing: false }, closingElement: { - type: 'XJSClosingElement', + type: 'JSXClosingElement', start: 24, end: 30, name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', start: 26, end: 29, name: 'div' } }, children: [{ - type: 'XJSExpressionContainer', + type: 'JSXExpressionContainer', start: 5, end: 24, expression: { - type: 'XJSElement', + type: 'JSXElement', start: 6, end: 23, openingElement: { - type: 'XJSOpeningElement', + type: 'JSXOpeningElement', start: 6, end: 23, attributes: [ { - type: 'XJSSpreadAttribute', + type: 'JSXSpreadAttribute', start: 11, end: 20, argument: { @@ -3322,7 +3322,7 @@ var fbTestFixture = { } ], name: { - type: 'XJSIdentifier', + type: 'JSXIdentifier', start: 7, end: 10, name: 'div' @@ -3341,16 +3341,16 @@ var fbTestFixture = { start: 0, end: 18, expression: { - type: "XJSElement", + type: "JSXElement", start: 0, end: 18, openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", start: 0, end: 5, attributes: [], name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 1, end: 4, name: "div" @@ -3358,18 +3358,18 @@ var fbTestFixture = { selfClosing: false }, closingElement: { - type: "XJSClosingElement", + type: "JSXClosingElement", start: 12, end: 18, name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 14, end: 17, name: "div" } }, children: [{ - type: "XJSExpressionContainer", + type: "JSXExpressionContainer", start: 5, end: 12, expression: { @@ -3407,16 +3407,16 @@ var fbTestFixture = { start: 0, end: 16, expression: { - type: "XJSElement", + type: "JSXElement", start: 0, end: 16, openingElement: { - type: "XJSOpeningElement", + type: "JSXOpeningElement", start: 0, end: 5, attributes: [], name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 1, end: 4, name: "div" @@ -3424,11 +3424,11 @@ var fbTestFixture = { selfClosing: false }, closingElement: { - type: "XJSClosingElement", + type: "JSXClosingElement", start: 10, end: 16, name: { - type: "XJSIdentifier", + type: "JSXIdentifier", start: 12, end: 15, name: "div"