mirror of
https://github.com/swc-project/swc.git
synced 2024-10-05 12:49:21 +03:00
fix(es/fixer): Don't change default decls to default expr exports (#7585)
**Related issue:** - Closes #7584.
This commit is contained in:
parent
ae0d81b48d
commit
e2725451aa
@ -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);
|
||||
|
@ -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(),
|
||||
|
@ -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;");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user