diff options
author | 2021-08-08 14:03:44 -0700 | |
---|---|---|
committer | 2021-08-08 14:03:44 -0700 | |
commit | e490577a7d49dd35c54b0bab486766a34ad22c0c (patch) | |
tree | 3adc0339204f1bd138958ca476968b002327eea8 | |
parent | dbad798c92f9c8025bdeaba34fef0fdcab167a89 (diff) | |
download | bun-e490577a7d49dd35c54b0bab486766a34ad22c0c.tar.gz bun-e490577a7d49dd35c54b0bab486766a34ad22c0c.tar.zst bun-e490577a7d49dd35c54b0bab486766a34ad22c0c.zip |
More correctly choose the export_default default_name
Former-commit-id: 8b32f4c91e543b9cebba5b5cdd90fa705f471cd4
-rw-r--r-- | src/js_parser/js_parser.zig | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig index 215d6ba31..bee836910 100644 --- a/src/js_parser/js_parser.zig +++ b/src/js_parser/js_parser.zig @@ -4911,7 +4911,42 @@ pub fn NewParser( } try p.lexer.expectOrInsertSemicolon(); - return p.s(S.ExportDefault{ .default_name = createDefaultName(p, loc) catch unreachable, .value = js_ast.StmtOrExpr{ .expr = expr } }, loc); + + // Use the expression name if present, since it's a better name + const default_name: js_ast.LocRef = default_name_getter: { + switch (expr.data) { + .e_function => |func_container| { + if (func_container.func.name) |_name| { + if (_name.ref) |ref| { + break :default_name_getter LocRef{ .loc = defaultLoc, .ref = ref }; + } + } else {} + }, + .e_identifier => |ident| { + break :default_name_getter LocRef{ .loc = defaultLoc, .ref = ident.ref }; + }, + .e_class => |class| { + if (class.class_name) |_name| { + if (_name.ref) |ref| { + break :default_name_getter LocRef{ .loc = defaultLoc, .ref = ref }; + } + } else {} + }, + else => {}, + } + + break :default_name_getter createDefaultName(p, defaultLoc) catch unreachable; + }; + + return p.s( + S.ExportDefault{ + .default_name = default_name, + .value = js_ast.StmtOrExpr{ + .expr = expr, + }, + }, + loc, + ); }, T.t_asterisk => { if (!opts.is_module_scope and !(opts.is_namespace_scope or !opts.is_typescript_declare)) { |