@babel/eslint-parser: fix ImportExpression node to match ESTree spec (#10828)
* @babel/eslint-parser: fix ImportExpression node to match ESTree spec * Update caller name for @babel/core.parseSync * Move logic into estree plugin * Add estree plugin tests * Fix Flow error * Fix flow * Remove extra properties on ImportExpression node * Incorporate review feedback
This commit is contained in:
parent
5156d3ea06
commit
7b54a94389
@ -34,7 +34,7 @@ export default function(code, options) {
|
||||
plugins: ["estree"],
|
||||
},
|
||||
caller: {
|
||||
name: "babel-eslint",
|
||||
name: "@babel/eslint-parser",
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@ -524,5 +524,11 @@ describe("babylon-to-espree", () => {
|
||||
const a = 1n;
|
||||
`);
|
||||
});
|
||||
|
||||
it("Dynamic Import", () => {
|
||||
parseAndAssertSame(`
|
||||
const a = import('a');
|
||||
`);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -758,7 +758,7 @@ export default class ExpressionParser extends LValParser {
|
||||
finishCallExpression<T: N.CallExpression | N.OptionalCallExpression>(
|
||||
node: T,
|
||||
optional: boolean,
|
||||
): T {
|
||||
): N.Expression {
|
||||
if (node.callee.type === "Import") {
|
||||
if (node.arguments.length !== 1) {
|
||||
this.raise(node.start, "import() requires exactly one argument");
|
||||
|
||||
@ -228,7 +228,7 @@ export default class LValParser extends NodeUtils {
|
||||
toReferencedListDeep(
|
||||
exprList: $ReadOnlyArray<?Expression>,
|
||||
isParenthesizedExpr?: boolean,
|
||||
): $ReadOnlyArray<?Expression> {
|
||||
): void {
|
||||
this.toReferencedList(exprList, isParenthesizedExpr);
|
||||
|
||||
for (const expr of exprList) {
|
||||
@ -236,8 +236,6 @@ export default class LValParser extends NodeUtils {
|
||||
this.toReferencedListDeep(expr.elements);
|
||||
}
|
||||
}
|
||||
|
||||
return exprList;
|
||||
}
|
||||
|
||||
// Parses spread element.
|
||||
|
||||
@ -411,4 +411,32 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
super.toAssignableObjectExpressionProp(prop, isBinding, isLast);
|
||||
}
|
||||
}
|
||||
|
||||
finishCallExpression<T: N.CallExpression | N.OptionalCallExpression>(
|
||||
node: T,
|
||||
optional: boolean,
|
||||
): N.Expression {
|
||||
super.finishCallExpression(node, optional);
|
||||
|
||||
if (node.callee.type === "Import") {
|
||||
((node: N.Node): N.EstreeImportExpression).type = "ImportExpression";
|
||||
((node: N.Node): N.EstreeImportExpression).source = node.arguments[0];
|
||||
delete node.arguments;
|
||||
delete node.callee;
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
toReferencedListDeep(
|
||||
exprList: $ReadOnlyArray<?N.Expression>,
|
||||
isParenthesizedExpr?: boolean,
|
||||
): void {
|
||||
// ImportExpressions do not have an arguments array.
|
||||
if (!exprList) {
|
||||
return;
|
||||
}
|
||||
|
||||
super.toReferencedListDeep(exprList, isParenthesizedExpr);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1013,7 +1013,7 @@ export type FlowInterfaceType = NodeBase & {
|
||||
body: FlowObjectTypeAnnotation,
|
||||
};
|
||||
|
||||
// estree
|
||||
// ESTree
|
||||
|
||||
export type EstreeProperty = NodeBase & {
|
||||
type: "Property",
|
||||
@ -1039,6 +1039,11 @@ export type EstreeMethodDefinition = NodeBase & {
|
||||
variance?: ?FlowVariance,
|
||||
};
|
||||
|
||||
export type EstreeImportExpression = NodeBase & {
|
||||
type: "ImportExpression",
|
||||
source: Expression,
|
||||
};
|
||||
|
||||
// === === === ===
|
||||
// TypeScript
|
||||
// === === === ===
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
{
|
||||
"plugins": [
|
||||
"estree"
|
||||
]
|
||||
}
|
||||
"plugins": ["estree"]
|
||||
}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
{
|
||||
"plugins": [
|
||||
"estree"
|
||||
]
|
||||
}
|
||||
"plugins": ["estree"]
|
||||
}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
{
|
||||
"plugins": [
|
||||
"estree"
|
||||
]
|
||||
}
|
||||
"plugins": ["estree"]
|
||||
}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
{
|
||||
"plugins": [
|
||||
"estree"
|
||||
]
|
||||
}
|
||||
"plugins": ["estree"]
|
||||
}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
{
|
||||
"plugins": [
|
||||
"estree"
|
||||
]
|
||||
}
|
||||
"plugins": ["estree"]
|
||||
}
|
||||
|
||||
@ -1,6 +1,3 @@
|
||||
{
|
||||
"plugins": [
|
||||
"estree",
|
||||
"bigInt"
|
||||
]
|
||||
"plugins": ["estree", "bigInt"]
|
||||
}
|
||||
|
||||
1
packages/babel-parser/test/fixtures/estree/dynamic-import/basic/input.js
vendored
Normal file
1
packages/babel-parser/test/fixtures/estree/dynamic-import/basic/input.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
const a = import("a");
|
||||
116
packages/babel-parser/test/fixtures/estree/dynamic-import/basic/output.json
vendored
Normal file
116
packages/babel-parser/test/fixtures/estree/dynamic-import/basic/output.json
vendored
Normal file
@ -0,0 +1,116 @@
|
||||
{
|
||||
"type": "File",
|
||||
"start": 0,
|
||||
"end": 22,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 22
|
||||
}
|
||||
},
|
||||
"program": {
|
||||
"type": "Program",
|
||||
"start": 0,
|
||||
"end": 22,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 22
|
||||
}
|
||||
},
|
||||
"sourceType": "script",
|
||||
"interpreter": null,
|
||||
"body": [
|
||||
{
|
||||
"type": "VariableDeclaration",
|
||||
"start": 0,
|
||||
"end": 22,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 0
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 22
|
||||
}
|
||||
},
|
||||
"declarations": [
|
||||
{
|
||||
"type": "VariableDeclarator",
|
||||
"start": 6,
|
||||
"end": 21,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 6
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 21
|
||||
}
|
||||
},
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"start": 6,
|
||||
"end": 7,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 6
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 7
|
||||
},
|
||||
"identifierName": "a"
|
||||
},
|
||||
"name": "a"
|
||||
},
|
||||
"init": {
|
||||
"type": "ImportExpression",
|
||||
"start": 10,
|
||||
"end": 21,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 10
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 21
|
||||
}
|
||||
},
|
||||
"source": {
|
||||
"type": "Literal",
|
||||
"start": 17,
|
||||
"end": 20,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 17
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 20
|
||||
}
|
||||
},
|
||||
"value": "a",
|
||||
"raw": "\"a\""
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"kind": "const"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
3
packages/babel-parser/test/fixtures/estree/dynamic-import/options.json
vendored
Normal file
3
packages/babel-parser/test/fixtures/estree/dynamic-import/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"plugins": ["estree", "dynamicImport"]
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user