diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index a30222976320..99f0d0977929 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -785,7 +785,6 @@ export default class ExpressionParser extends LValParser { node: T, optional: boolean, ): T { - let nodeType = optional ? "OptionalCallExpression" : "CallExpression"; if (node.callee.type === "Import") { if (node.arguments.length !== 1) { this.raise(node.start, "import() requires exactly one argument"); @@ -795,13 +794,11 @@ export default class ExpressionParser extends LValParser { this.raise(importArg.start, "... is not allowed in import()"); } } - - if (this.hasPlugin("estree")) { - nodeType = "ImportExpression"; - node.source = node.arguments[0]; - } } - return this.finishNode(node, nodeType); + return this.finishNode( + node, + optional ? "OptionalCallExpression" : "CallExpression", + ); } parseCallExpressionArguments( diff --git a/packages/babel-parser/src/plugins/estree.js b/packages/babel-parser/src/plugins/estree.js index 60bc1effffa7..af2a091ed1d7 100644 --- a/packages/babel-parser/src/plugins/estree.js +++ b/packages/babel-parser/src/plugins/estree.js @@ -396,4 +396,18 @@ export default (superClass: Class): Class => super.toAssignableObjectExpressionProp(prop, isBinding, isLast); } } + + finishCallExpression( + node: T, + optional: boolean, + ): T & { source?: N.Node } { + const finishedNode = super.finishCallExpression(node, optional); + + if (node.callee.type === "Import") { + finishedNode.type = "ImportExpression"; + finishedNode.source = node.arguments[0]; + } + + return finishedNode; + } };