Skip to content

Commit

Permalink
Add better parser error when using jsx (#11722)
Browse files Browse the repository at this point in the history
* Add "<" parser tests

*  No {jsx,flow,typescript} plugin

* Type parameter

* Valid JS Code

* Add: better parser error when using jsx

Address #11499

* Add: babel parser test

Test parser with no plugins and when jsx is given with a js expression

* Add: no flow but with typescript test

* Add: type paramter test with no plugins (no flow)

* Add: unclosed jsx element test
  • Loading branch information
penguingovernor committed Jun 22, 2020
1 parent 601c824 commit beca7e2
Show file tree
Hide file tree
Showing 16 changed files with 154 additions and 0 deletions.
6 changes: 6 additions & 0 deletions packages/babel-parser/src/parser/expression.js
Expand Up @@ -1177,6 +1177,12 @@ export default class ExpressionParser extends LValParser {
}
}
// fall through
case tt.relational: {
if (this.state.value === "<") {
throw this.expectOnePlugin(["jsx", "flow", "typescript"]);
}
}
// fall through
default:
throw this.unexpected();
}
Expand Down
@@ -0,0 +1 @@
<div>{name}</div>
@@ -0,0 +1,4 @@
{
"plugins": [],
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'jsx, flow, typescript' (1:0)"
}
@@ -0,0 +1,2 @@
"use strict"
<div
@@ -0,0 +1,36 @@
{
"type": "File",
"start":0,"end":17,"loc":{"start":{"line":1,"column":0},"end":{"line":2,"column":4}},
"program": {
"type": "Program",
"start":0,"end":17,"loc":{"start":{"line":1,"column":0},"end":{"line":2,"column":4}},
"sourceType": "script",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":17,"loc":{"start":{"line":1,"column":0},"end":{"line":2,"column":4}},
"expression": {
"type": "BinaryExpression",
"start":0,"end":17,"loc":{"start":{"line":1,"column":0},"end":{"line":2,"column":4}},
"left": {
"type": "StringLiteral",
"start":0,"end":12,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":12}},
"extra": {
"rawValue": "use strict",
"raw": "\"use strict\""
},
"value": "use strict"
},
"operator": "<",
"right": {
"type": "Identifier",
"start":14,"end":17,"loc":{"start":{"line":2,"column":1},"end":{"line":2,"column":4},"identifierName":"div"},
"name": "div"
}
}
}
],
"directives": []
}
}
@@ -0,0 +1 @@
<div>() => {}
@@ -0,0 +1,3 @@
{
"plugins": ["typescript"]
}
@@ -0,0 +1,42 @@
{
"type": "File",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"program": {
"type": "Program",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"sourceType": "script",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"expression": {
"type": "ArrowFunctionExpression",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"id": null,
"generator": false,
"async": false,
"params": [],
"body": {
"type": "BlockStatement",
"start":11,"end":13,"loc":{"start":{"line":1,"column":11},"end":{"line":1,"column":13}},
"body": [],
"directives": []
},
"typeParameters": {
"type": "TSTypeParameterDeclaration",
"start":0,"end":5,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":5}},
"params": [
{
"type": "TSTypeParameter",
"start":1,"end":4,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":4}},
"name": "div"
}
]
}
}
}
],
"directives": []
}
}
@@ -0,0 +1 @@
<div>() => {}
@@ -0,0 +1,43 @@
{
"type": "File",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"program": {
"type": "Program",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"sourceType": "script",
"interpreter": null,
"body": [
{
"type": "ExpressionStatement",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"expression": {
"type": "ArrowFunctionExpression",
"start":0,"end":13,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":13}},
"id": null,
"generator": false,
"async": false,
"params": [],
"body": {
"type": "BlockStatement",
"start":11,"end":13,"loc":{"start":{"line":1,"column":11},"end":{"line":1,"column":13}},
"body": [],
"directives": []
},
"typeParameters": {
"type": "TypeParameterDeclaration",
"start":0,"end":5,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":5}},
"params": [
{
"type": "TypeParameter",
"start":1,"end":4,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":4}},
"name": "div",
"variance": null
}
]
}
}
}
],
"directives": []
}
}
@@ -0,0 +1 @@
<div>() => {}
@@ -0,0 +1,4 @@
{
"plugins": [],
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'jsx, flow, typescript' (1:0)"
}
@@ -0,0 +1 @@
<div></div>
@@ -0,0 +1,4 @@
{
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'jsx, flow, typescript' (1:0)",
"plugins": []
}
@@ -0,0 +1 @@
<div>() => {}
@@ -0,0 +1,4 @@
{
"plugins": ["jsx"],
"throws": "Unexpected token (1:13)"
}

0 comments on commit beca7e2

Please sign in to comment.