fix(es/fixer): Don't change default decls to default expr exports (#7585)

**Related issue:**

 - Closes #7584.
This commit is contained in:
underfin 2023-06-29 15:50:25 +08:00 committed by GitHub
parent ae0d81b48d
commit e2725451aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 0 deletions

View File

@ -438,6 +438,15 @@ impl VisitMut for Fixer<'_> {
}
fn visit_mut_export_default_expr(&mut self, node: &mut ExportDefaultExpr) {
if let Expr::Paren(p) = &mut *node.expr {
match &mut *p.expr {
Expr::Fn(..) | Expr::Class(..) => {
p.expr.visit_mut_children_with(self);
return;
}
_ => {}
}
}
let old = self.ctx;
self.ctx = Context::Default;
node.visit_mut_children_with(self);

View File

@ -1448,6 +1448,23 @@ impl VisitMut for SimplifyExpr {
};
}
fn visit_mut_export_default_expr(&mut self, expr: &mut ExportDefaultExpr) {
fn is_paren_wrap_fn_or_class(expr: &mut Expr, visitor: &mut SimplifyExpr) -> bool {
match &mut *expr {
Expr::Fn(..) | Expr::Class(..) => {
expr.visit_mut_children_with(visitor);
true
}
Expr::Paren(p) => is_paren_wrap_fn_or_class(&mut p.expr, visitor),
_ => false,
}
}
if !is_paren_wrap_fn_or_class(&mut expr.expr, self) {
expr.visit_mut_children_with(self);
}
}
fn visit_mut_module_items(&mut self, n: &mut Vec<ModuleItem>) {
let mut child = SimplifyExpr {
expr_ctx: self.expr_ctx.clone(),

View File

@ -1544,3 +1544,10 @@ fn test_es6_features() {
"function foo() {return `${false}`}",
);
}
#[test]
fn test_export_default_paren_expr() {
fold_same("import fn from './b'; export default (class fn {});");
fold_same("import fn from './b'; export default (function fn () {});");
fold("export default ((foo));", "export default foo;");
}