Spread attribute support and small optimizations.
Conflicts: acorn.js docs/acorn.html package.json test/tests.js
This commit is contained in:
parent
fe6cafa141
commit
35c8f104bd
@ -1,5 +1,7 @@
|
|||||||
# Acorn (JSX edition)
|
# Acorn (JSX edition)
|
||||||
|
|
||||||
|
[](https://travis-ci.org/RReverser/acorn)
|
||||||
|
|
||||||
This is modification of [Acorn][acorn] - a tiny, fast JavaScript parser, written completely in JavaScript.
|
This is modification of [Acorn][acorn] - a tiny, fast JavaScript parser, written completely in JavaScript.
|
||||||
|
|
||||||
It was forked to create experimental, alternative, faster [React.js JSX][jsx] parser by integrating pieces
|
It was forked to create experimental, alternative, faster [React.js JSX][jsx] parser by integrating pieces
|
||||||
|
|||||||
94
acorn.js
94
acorn.js
@ -351,6 +351,7 @@
|
|||||||
var _comma = {type: ",", beforeExpr: true}, _semi = {type: ";", beforeExpr: true};
|
var _comma = {type: ",", beforeExpr: true}, _semi = {type: ";", beforeExpr: true};
|
||||||
var _colon = {type: ":", beforeExpr: true}, _dot = {type: "."}, _ellipsis = {type: "..."}, _question = {type: "?", beforeExpr: true};
|
var _colon = {type: ":", beforeExpr: true}, _dot = {type: "."}, _ellipsis = {type: "..."}, _question = {type: "?", beforeExpr: true};
|
||||||
var _arrow = {type: "=>", beforeExpr: true}, _bquote = {type: "`"}, _dollarBraceL = {type: "${", beforeExpr: true};
|
var _arrow = {type: "=>", beforeExpr: true}, _bquote = {type: "`"}, _dollarBraceL = {type: "${", beforeExpr: true};
|
||||||
|
var _ltSlash = {type: "</"};
|
||||||
|
|
||||||
// Operators. These carry several kinds of properties to help the
|
// Operators. These carry several kinds of properties to help the
|
||||||
// parser use them properly (the presence of these properties is
|
// parser use them properly (the presence of these properties is
|
||||||
@ -385,6 +386,9 @@
|
|||||||
// '*' may be multiply or have special meaning in ES6
|
// '*' may be multiply or have special meaning in ES6
|
||||||
var _star = {binop: 10, beforeExpr: true};
|
var _star = {binop: 10, beforeExpr: true};
|
||||||
|
|
||||||
|
// '<', '>' may be relational or have special meaning in JSX
|
||||||
|
var _lt = {binop: 7, beforeExpr: true}, _gt = {binop: 7, beforeExpr: true};
|
||||||
|
|
||||||
// Provide access to the token types for external users of the
|
// Provide access to the token types for external users of the
|
||||||
// tokenizer.
|
// tokenizer.
|
||||||
|
|
||||||
@ -544,7 +548,7 @@
|
|||||||
tokEnd = tokPos;
|
tokEnd = tokPos;
|
||||||
if (options.locations) tokEndLoc = new Position;
|
if (options.locations) tokEndLoc = new Position;
|
||||||
tokType = type;
|
tokType = type;
|
||||||
if (shouldSkipSpace !== false && !(inXJSTag && val === '>') && !(inXJSChild && tokType !== _braceL)) {
|
if (shouldSkipSpace !== false && !(inXJSTag && type === _gt) && !(inXJSChild && tokType !== _braceL)) {
|
||||||
skipSpace();
|
skipSpace();
|
||||||
}
|
}
|
||||||
tokVal = val;
|
tokVal = val;
|
||||||
@ -712,10 +716,17 @@
|
|||||||
skipSpace();
|
skipSpace();
|
||||||
return readToken();
|
return readToken();
|
||||||
}
|
}
|
||||||
if (next === 61)
|
if (next === 61) {
|
||||||
size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;
|
size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;
|
||||||
return finishOp(_relational, size);
|
return finishOp(_relational, size);
|
||||||
}
|
}
|
||||||
|
if (next === 47) {
|
||||||
|
// '</', beginning of JSX closing element
|
||||||
|
size = 2;
|
||||||
|
return finishOp(_ltSlash, size);
|
||||||
|
}
|
||||||
|
return finishOp(code === 60 ? _lt : _gt, size);
|
||||||
|
}
|
||||||
|
|
||||||
function readToken_eq_excl(code) { // '=!', '=>'
|
function readToken_eq_excl(code) { // '=!', '=>'
|
||||||
var next = input.charCodeAt(tokPos + 1);
|
var next = input.charCodeAt(tokPos + 1);
|
||||||
@ -2367,10 +2378,8 @@
|
|||||||
case _bquote:
|
case _bquote:
|
||||||
return parseTemplate();
|
return parseTemplate();
|
||||||
|
|
||||||
case _relational:
|
case _lt:
|
||||||
if (tokVal === '<') {
|
|
||||||
return parseXJSElement();
|
return parseXJSElement();
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
unexpected();
|
unexpected();
|
||||||
@ -2972,9 +2981,9 @@
|
|||||||
// Parses any type of JSX attribute value.
|
// Parses any type of JSX attribute value.
|
||||||
|
|
||||||
function parseXJSAttributeValue() {
|
function parseXJSAttributeValue() {
|
||||||
var node;
|
switch (tokType) {
|
||||||
if (tokType === _braceL) {
|
case _braceL:
|
||||||
node = parseXJSExpressionContainer();
|
var node = parseXJSExpressionContainer();
|
||||||
if (node.expression.type === "XJSEmptyExpression") {
|
if (node.expression.type === "XJSEmptyExpression") {
|
||||||
raise(
|
raise(
|
||||||
node.start,
|
node.start,
|
||||||
@ -2982,14 +2991,17 @@
|
|||||||
'expression'
|
'expression'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (tokVal === '<') {
|
return node;
|
||||||
node = parseXJSElement();
|
|
||||||
} else if (tokType === _xjsText) {
|
case _lt:
|
||||||
node = parseExprAtom();
|
return parseXJSElement();
|
||||||
} else {
|
|
||||||
|
case _xjsText:
|
||||||
|
return parseExprAtom();
|
||||||
|
|
||||||
|
default:
|
||||||
raise(tokStart, "XJS value should be either an expression or a quoted XJS text");
|
raise(tokStart, "XJS value should be either an expression or a quoted XJS text");
|
||||||
}
|
}
|
||||||
return node;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// XJSEmptyExpression is unique type since it doesn't actually parse anything,
|
// XJSEmptyExpression is unique type since it doesn't actually parse anything,
|
||||||
@ -3022,28 +3034,54 @@
|
|||||||
var origInXJSTag = inXJSTag;
|
var origInXJSTag = inXJSTag;
|
||||||
inXJSTag = false;
|
inXJSTag = false;
|
||||||
|
|
||||||
expect(_braceL);
|
next();
|
||||||
|
|
||||||
node.expression = tokType === _braceR ? parseXJSEmptyExpression() : parseExpression();
|
node.expression = tokType === _braceR ? parseXJSEmptyExpression() : parseExpression();
|
||||||
|
|
||||||
inXJSTag = origInXJSTag;
|
inXJSTag = origInXJSTag;
|
||||||
|
|
||||||
expect(_braceR);
|
expect(_braceR);
|
||||||
|
|
||||||
return finishNode(node, "XJSExpressionContainer");
|
return finishNode(node, "XJSExpressionContainer");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parses following JSX attribute name-value pair.
|
// Parses following JSX attribute name-value pair.
|
||||||
|
|
||||||
function parseXJSAttribute() {
|
function parseXJSAttribute() {
|
||||||
var node = startNode();
|
if (tokType === _braceL) {
|
||||||
|
var tokStart1 = tokStart, tokStartLoc1 = tokStartLoc;
|
||||||
|
|
||||||
|
var origInXJSTag = inXJSTag;
|
||||||
|
inXJSTag = false;
|
||||||
|
|
||||||
|
next();
|
||||||
|
var node = parseSpread();
|
||||||
|
|
||||||
|
inXJSTag = origInXJSTag;
|
||||||
|
|
||||||
|
expect(_braceR);
|
||||||
|
node.type = "XJSSpreadAttribute";
|
||||||
|
|
||||||
|
node.start = tokStart1;
|
||||||
|
node.end = lastEnd;
|
||||||
|
if (options.locations) {
|
||||||
|
node.loc.start = tokStartLoc1;
|
||||||
|
node.loc.end = lastEndLoc;
|
||||||
|
}
|
||||||
|
if (options.ranges) {
|
||||||
|
node.range = [tokStart1, lastEnd];
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
var node = startNode();
|
||||||
node.name = parseXJSAttributeName();
|
node.name = parseXJSAttributeName();
|
||||||
|
|
||||||
// HTML empty attribute
|
// HTML empty attribute
|
||||||
if (tokVal === "=") {
|
if (tokType === _eq) {
|
||||||
next();
|
next();
|
||||||
node.value = parseXJSAttributeValue();
|
node.value = parseXJSAttributeValue();
|
||||||
|
} else {
|
||||||
|
node.value = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return finishNode(node, "XJSAttribute");
|
return finishNode(node, "XJSAttribute");
|
||||||
@ -3074,11 +3112,11 @@
|
|||||||
inXJSChild = false;
|
inXJSChild = false;
|
||||||
inXJSTag = true;
|
inXJSTag = true;
|
||||||
|
|
||||||
expectChar('<');
|
next();
|
||||||
|
|
||||||
node.name = parseXJSElementName();
|
node.name = parseXJSElementName();
|
||||||
|
|
||||||
while (tokType !== _eof && tokType !== _slash && tokVal !== '>') {
|
while (tokType !== _eof && tokType !== _slash && tokType !== _gt) {
|
||||||
attributes.push(parseXJSAttribute());
|
attributes.push(parseXJSAttribute());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3091,7 +3129,7 @@
|
|||||||
inXJSChild = true;
|
inXJSChild = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
expectChar('>');
|
expect(_gt);
|
||||||
|
|
||||||
return finishNode(node, "XJSOpeningElement");
|
return finishNode(node, "XJSOpeningElement");
|
||||||
}
|
}
|
||||||
@ -3105,8 +3143,7 @@
|
|||||||
inXJSChild = false;
|
inXJSChild = false;
|
||||||
inXJSTag = true;
|
inXJSTag = true;
|
||||||
tokRegexpAllowed = false;
|
tokRegexpAllowed = false;
|
||||||
expectChar('<');
|
expect(_ltSlash);
|
||||||
expect(_slash);
|
|
||||||
node.name = parseXJSElementName();
|
node.name = parseXJSElementName();
|
||||||
skipSpace();
|
skipSpace();
|
||||||
// A valid token is expected after >, so parser needs to know
|
// A valid token is expected after >, so parser needs to know
|
||||||
@ -3114,7 +3151,7 @@
|
|||||||
inXJSChild = origInXJSChild;
|
inXJSChild = origInXJSChild;
|
||||||
inXJSTag = origInXJSTag;
|
inXJSTag = origInXJSTag;
|
||||||
tokRegexpAllowed = false;
|
tokRegexpAllowed = false;
|
||||||
expectChar('>');
|
expect(_gt);
|
||||||
return finishNode(node, "XJSClosingElement");
|
return finishNode(node, "XJSClosingElement");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3127,14 +3164,15 @@
|
|||||||
|
|
||||||
var origInXJSChild = inXJSChild;
|
var origInXJSChild = inXJSChild;
|
||||||
var openingElement = parseXJSOpeningElement();
|
var openingElement = parseXJSOpeningElement();
|
||||||
|
var closingElement = null;
|
||||||
|
|
||||||
if (!openingElement.selfClosing) {
|
if (!openingElement.selfClosing) {
|
||||||
while (tokType !== _eof && !(tokVal === '<' && nextChar() === '/')) {
|
while (tokType !== _eof && tokType !== _ltSlash) {
|
||||||
inXJSChild = true;
|
inXJSChild = true;
|
||||||
children.push(parseXJSChild());
|
children.push(parseXJSChild());
|
||||||
}
|
}
|
||||||
inXJSChild = origInXJSChild;
|
inXJSChild = origInXJSChild;
|
||||||
var closingElement = parseXJSClosingElement();
|
closingElement = parseXJSClosingElement();
|
||||||
if (getQualifiedXJSName(closingElement.name) !== getQualifiedXJSName(openingElement.name)) {
|
if (getQualifiedXJSName(closingElement.name) !== getQualifiedXJSName(openingElement.name)) {
|
||||||
raise(
|
raise(
|
||||||
closingElement.start,
|
closingElement.start,
|
||||||
@ -3152,7 +3190,7 @@
|
|||||||
// element, we disallow it here in the parser in order to provide a
|
// element, we disallow it here in the parser in order to provide a
|
||||||
// better error message. (In the rare case that the less-than operator
|
// better error message. (In the rare case that the less-than operator
|
||||||
// was intended, the left tag can be wrapped in parentheses.)
|
// was intended, the left tag can be wrapped in parentheses.)
|
||||||
if (!origInXJSChild && tokVal === '<') {
|
if (!origInXJSChild && tokType === _lt) {
|
||||||
raise(tokStart, "Adjacent XJS elements must be wrapped in an enclosing tag");
|
raise(tokStart, "Adjacent XJS elements must be wrapped in an enclosing tag");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2030
docs/acorn.html
2030
docs/acorn.html
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@
|
|||||||
"name": "acorn-jsx",
|
"name": "acorn-jsx",
|
||||||
"description": "Alternative React JSX parser",
|
"description": "Alternative React JSX parser",
|
||||||
"main": "acorn.js",
|
"main": "acorn.js",
|
||||||
"version": "0.7.1",
|
"version": "0.7.1-1",
|
||||||
"maintainers": [
|
"maintainers": [
|
||||||
{
|
{
|
||||||
"name": "Marijn Haverbeke",
|
"name": "Marijn Haverbeke",
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
var driver = require("./driver.js");
|
var driver = require("./driver.js");
|
||||||
require("./tests.js");
|
require("./tests.js");
|
||||||
require("./tests-harmony.js");
|
require("./tests-harmony.js");
|
||||||
|
require("./tests-jsx.js");
|
||||||
|
|
||||||
var testsRun = 0, failed = 0;
|
var testsRun = 0, failed = 0;
|
||||||
function report(state, code, message) {
|
function report(state, code, message) {
|
||||||
|
|||||||
@ -1,11 +1,8 @@
|
|||||||
// React JSX tests
|
// React JSX tests
|
||||||
|
|
||||||
if (typeof exports !== "undefined") {
|
|
||||||
var test = require("./driver.js").test;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Simply taken from esprima-fb/fbtest.js
|
|
||||||
var fbTestFixture = {
|
var fbTestFixture = {
|
||||||
|
// Taken and adapted from esprima-fb/fbtest.js.
|
||||||
|
'XJS': {
|
||||||
'<a />': {
|
'<a />': {
|
||||||
type: "ExpressionStatement",
|
type: "ExpressionStatement",
|
||||||
expression: {
|
expression: {
|
||||||
@ -29,6 +26,7 @@ var fbTestFixture = {
|
|||||||
end: { line: 1, column: 5 }
|
end: { line: 1, column: 5 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [0, 5],
|
range: [0, 5],
|
||||||
loc: {
|
loc: {
|
||||||
@ -103,6 +101,7 @@ var fbTestFixture = {
|
|||||||
end: { line: 1, column: 8 }
|
end: { line: 1, column: 8 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
value: null,
|
||||||
range: [5, 8],
|
range: [5, 8],
|
||||||
loc: {
|
loc: {
|
||||||
start: { line: 1, column: 5 },
|
start: { line: 1, column: 5 },
|
||||||
@ -115,6 +114,7 @@ var fbTestFixture = {
|
|||||||
end: { line: 1, column: 11 }
|
end: { line: 1, column: 11 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [0, 11],
|
range: [0, 11],
|
||||||
loc: {
|
loc: {
|
||||||
@ -304,6 +304,7 @@ var fbTestFixture = {
|
|||||||
end: { line: 1, column: 32 }
|
end: { line: 1, column: 32 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [27, 32],
|
range: [27, 32],
|
||||||
loc: {
|
loc: {
|
||||||
@ -442,6 +443,7 @@ var fbTestFixture = {
|
|||||||
end: { line: 1, column: 29 }
|
end: { line: 1, column: 29 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [0, 29],
|
range: [0, 29],
|
||||||
loc: {
|
loc: {
|
||||||
@ -496,6 +498,7 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [
|
range: [
|
||||||
0,
|
0,
|
||||||
@ -635,7 +638,7 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
'<AbC-def\n test="&&">\nbar\nbaz\r\n</AbC-def>': {
|
'<AbC-def\n test="&&">\nbar\nbaz\n</AbC-def>': {
|
||||||
type: "ExpressionStatement",
|
type: "ExpressionStatement",
|
||||||
expression: {
|
expression: {
|
||||||
type: "XJSElement",
|
type: "XJSElement",
|
||||||
@ -737,8 +740,8 @@ var fbTestFixture = {
|
|||||||
type: "XJSIdentifier",
|
type: "XJSIdentifier",
|
||||||
name: "AbC-def",
|
name: "AbC-def",
|
||||||
range: [
|
range: [
|
||||||
44,
|
43,
|
||||||
51
|
50
|
||||||
],
|
],
|
||||||
loc: {
|
loc: {
|
||||||
start: {
|
start: {
|
||||||
@ -752,8 +755,8 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
range: [
|
range: [
|
||||||
42,
|
41,
|
||||||
52
|
51
|
||||||
],
|
],
|
||||||
loc: {
|
loc: {
|
||||||
start: {
|
start: {
|
||||||
@ -769,11 +772,11 @@ var fbTestFixture = {
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
type: "Literal",
|
type: "Literal",
|
||||||
value: "\nbar\nbaz\r\n",
|
value: "\nbar\nbaz\n",
|
||||||
raw: "\nbar\nbaz\r\n",
|
raw: "\nbar\nbaz\n",
|
||||||
range: [
|
range: [
|
||||||
32,
|
32,
|
||||||
42
|
41
|
||||||
],
|
],
|
||||||
loc: {
|
loc: {
|
||||||
start: {
|
start: {
|
||||||
@ -789,7 +792,7 @@ var fbTestFixture = {
|
|||||||
],
|
],
|
||||||
range: [
|
range: [
|
||||||
0,
|
0,
|
||||||
52
|
51
|
||||||
],
|
],
|
||||||
loc: {
|
loc: {
|
||||||
start: {
|
start: {
|
||||||
@ -804,7 +807,7 @@ var fbTestFixture = {
|
|||||||
},
|
},
|
||||||
range: [
|
range: [
|
||||||
0,
|
0,
|
||||||
52
|
51
|
||||||
],
|
],
|
||||||
loc: {
|
loc: {
|
||||||
start: {
|
start: {
|
||||||
@ -925,6 +928,7 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [
|
range: [
|
||||||
10,
|
10,
|
||||||
@ -980,6 +984,7 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [
|
range: [
|
||||||
18,
|
18,
|
||||||
@ -1057,6 +1062,7 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [
|
range: [
|
||||||
0,
|
0,
|
||||||
@ -1405,6 +1411,7 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [
|
range: [
|
||||||
5,
|
5,
|
||||||
@ -1555,6 +1562,7 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
"children": [],
|
"children": [],
|
||||||
"range": [
|
"range": [
|
||||||
16,
|
16,
|
||||||
@ -1747,6 +1755,7 @@ var fbTestFixture = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
"children": [],
|
"children": [],
|
||||||
"range": [
|
"range": [
|
||||||
0,
|
0,
|
||||||
@ -2018,6 +2027,7 @@ var fbTestFixture = {
|
|||||||
end: { line: 1, column: 8 }
|
end: { line: 1, column: 8 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
closingElement: null,
|
||||||
children: [],
|
children: [],
|
||||||
range: [0, 9],
|
range: [0, 9],
|
||||||
loc: {
|
loc: {
|
||||||
@ -2045,12 +2055,547 @@ var fbTestFixture = {
|
|||||||
start: { line: 1, column: 0 },
|
start: { line: 1, column: 0 },
|
||||||
end: { line: 1, column: 14 }
|
end: { line: 1, column: 14 }
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'<div {...props} />': {
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"expression": {
|
||||||
|
"type": "XJSElement",
|
||||||
|
"openingElement": {
|
||||||
|
"type": "XJSOpeningElement",
|
||||||
|
"name": {
|
||||||
|
"type": "XJSIdentifier",
|
||||||
|
"name": "div",
|
||||||
|
"range": [
|
||||||
|
1,
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 1
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"selfClosing": true,
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"type": "XJSSpreadAttribute",
|
||||||
|
"argument": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"name": "props",
|
||||||
|
"range": [
|
||||||
|
9,
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 9
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
5,
|
||||||
|
15
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 5
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
closingElement: null,
|
||||||
|
"children": [],
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'<div {...props} post="attribute" />': {
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"expression": {
|
||||||
|
"type": "XJSElement",
|
||||||
|
"openingElement": {
|
||||||
|
"type": "XJSOpeningElement",
|
||||||
|
"name": {
|
||||||
|
"type": "XJSIdentifier",
|
||||||
|
"name": "div",
|
||||||
|
"range": [
|
||||||
|
1,
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 1
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"selfClosing": true,
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"type": "XJSSpreadAttribute",
|
||||||
|
"argument": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"name": "props",
|
||||||
|
"range": [
|
||||||
|
9,
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 9
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
5,
|
||||||
|
15
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 5
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "XJSAttribute",
|
||||||
|
"name": {
|
||||||
|
"type": "XJSIdentifier",
|
||||||
|
"name": "post",
|
||||||
|
"range": [
|
||||||
|
16,
|
||||||
|
20
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 16
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "Literal",
|
||||||
|
"value": "attribute",
|
||||||
|
"raw": "\"attribute\"",
|
||||||
|
"range": [
|
||||||
|
21,
|
||||||
|
32
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 21
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 32
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
16,
|
||||||
|
32
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 16
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 32
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
35
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 35
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
closingElement: null,
|
||||||
|
"children": [],
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
35
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 35
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
35
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 35
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'<div pre="leading" pre2="attribute" {...props}></div>': {
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"expression": {
|
||||||
|
"type": "XJSElement",
|
||||||
|
"openingElement": {
|
||||||
|
"type": "XJSOpeningElement",
|
||||||
|
"name": {
|
||||||
|
"type": "XJSIdentifier",
|
||||||
|
"name": "div",
|
||||||
|
"range": [
|
||||||
|
1,
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 1
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"selfClosing": false,
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"type": "XJSAttribute",
|
||||||
|
"name": {
|
||||||
|
"type": "XJSIdentifier",
|
||||||
|
"name": "pre",
|
||||||
|
"range": [
|
||||||
|
5,
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 5
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "Literal",
|
||||||
|
"value": "leading",
|
||||||
|
"raw": "\"leading\"",
|
||||||
|
"range": [
|
||||||
|
9,
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 9
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
5,
|
||||||
|
18
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 5
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 18
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "XJSAttribute",
|
||||||
|
"name": {
|
||||||
|
"type": "XJSIdentifier",
|
||||||
|
"name": "pre2",
|
||||||
|
"range": [
|
||||||
|
19,
|
||||||
|
23
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 19
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 23
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "Literal",
|
||||||
|
"value": "attribute",
|
||||||
|
"raw": "\"attribute\"",
|
||||||
|
"range": [
|
||||||
|
24,
|
||||||
|
35
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 24
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 35
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
19,
|
||||||
|
35
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 19
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 35
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "XJSSpreadAttribute",
|
||||||
|
"argument": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"name": "props",
|
||||||
|
"range": [
|
||||||
|
40,
|
||||||
|
45
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 40
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 45
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
36,
|
||||||
|
46
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 36
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 46
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
47
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 47
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"closingElement": {
|
||||||
|
"type": "XJSClosingElement",
|
||||||
|
"name": {
|
||||||
|
"type": "XJSIdentifier",
|
||||||
|
"name": "div",
|
||||||
|
"range": [
|
||||||
|
49,
|
||||||
|
52
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 49
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 52
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
47,
|
||||||
|
53
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 47
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 53
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": [],
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
53
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 53
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
53
|
||||||
|
],
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 0
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 53
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
for (var code in fbTestFixture) {
|
if (typeof exports !== "undefined") {
|
||||||
|
var test = require("./driver.js").test;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var code in fbTestFixture.XJS) {
|
||||||
test(code, {
|
test(code, {
|
||||||
type: 'Program',
|
type: 'Program',
|
||||||
body: [fbTestFixture[code]]
|
body: [fbTestFixture.XJS[code]]
|
||||||
}, {locations: true, ranges: true});
|
}, {
|
||||||
|
ecmaVersion: 6,
|
||||||
|
locations: true,
|
||||||
|
ranges: true
|
||||||
|
});
|
||||||
}
|
}
|
||||||
@ -6,7 +6,6 @@ if (typeof exports != "undefined") {
|
|||||||
var testFail = require("./driver.js").testFail;
|
var testFail = require("./driver.js").testFail;
|
||||||
var testAssert = require("./driver.js").testAssert;
|
var testAssert = require("./driver.js").testAssert;
|
||||||
var acorn = require("..");
|
var acorn = require("..");
|
||||||
require("./tests-jsx.js");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test("this\n", {
|
test("this\n", {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user