Don't allow JSXNamespacedName to chain (#10366)
Eg, `namespace:foo.bar` used to parse but is invalid in the [spec](https://facebook.github.io/jsx/). Also, allow `JSXNamespacedName` in the `JSXOpeningElement`/`JSXClosingElement` builders.
This commit is contained in:
parent
a2bf68981f
commit
1664cce681
@ -250,10 +250,16 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
// Parses element name in any form - namespaced, member
|
||||
// or single identifier.
|
||||
|
||||
jsxParseElementName(): N.JSXNamespacedName | N.JSXMemberExpression {
|
||||
jsxParseElementName():
|
||||
| N.JSXIdentifier
|
||||
| N.JSXNamespacedName
|
||||
| N.JSXMemberExpression {
|
||||
const startPos = this.state.start;
|
||||
const startLoc = this.state.startLoc;
|
||||
let node = this.jsxParseNamespacedName();
|
||||
if (node.type === "JSXNamespacedName") {
|
||||
return node;
|
||||
}
|
||||
while (this.eat(tt.dot)) {
|
||||
const newNode = this.startNodeAt(startPos, startLoc);
|
||||
newNode.object = node;
|
||||
|
||||
1
packages/babel-parser/test/fixtures/jsx/errors/member-in-namespace-1/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/jsx/errors/member-in-namespace-1/input.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
<a.b:c />
|
||||
3
packages/babel-parser/test/fixtures/jsx/errors/member-in-namespace-1/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/jsx/errors/member-in-namespace-1/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (1:4)"
|
||||
}
|
||||
1
packages/babel-parser/test/fixtures/jsx/errors/member-in-namespace-2/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/jsx/errors/member-in-namespace-2/input.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
<a:b.c />
|
||||
3
packages/babel-parser/test/fixtures/jsx/errors/member-in-namespace-2/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/jsx/errors/member-in-namespace-2/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"throws": "Unexpected token (1:4)"
|
||||
}
|
||||
@ -30,7 +30,11 @@ defineType("JSXClosingElement", {
|
||||
aliases: ["JSX", "Immutable"],
|
||||
fields: {
|
||||
name: {
|
||||
validate: assertNodeType("JSXIdentifier", "JSXMemberExpression"),
|
||||
validate: assertNodeType(
|
||||
"JSXIdentifier",
|
||||
"JSXMemberExpression",
|
||||
"JSXNamespacedName",
|
||||
),
|
||||
},
|
||||
},
|
||||
});
|
||||
@ -130,7 +134,11 @@ defineType("JSXOpeningElement", {
|
||||
aliases: ["JSX", "Immutable"],
|
||||
fields: {
|
||||
name: {
|
||||
validate: assertNodeType("JSXIdentifier", "JSXMemberExpression"),
|
||||
validate: assertNodeType(
|
||||
"JSXIdentifier",
|
||||
"JSXMemberExpression",
|
||||
"JSXNamespacedName",
|
||||
),
|
||||
},
|
||||
selfClosing: {
|
||||
default: false,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user