Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When adding a default value to a function, compress / minify can't optimize the function. #9610

Open
NullVoxPopuli opened this issue Oct 2, 2024 · 1 comment
Labels
Milestone

Comments

@NullVoxPopuli
Copy link

Describe the bug

When a function parameter has a default value, and that parameter is not used, the parameter (and consequently the whole function) are not optimized away.

Input code

const defaultMessage = "hello"

// write or paste code here
function x(x) { return x; }
function y(x, y, z) { return x; };

function abc(a) { return x(a); }
function abc2(a, x, z = defaultMessage) { return y(a); }

export function example() {
  // output should be
  // return `2 2 3 3`;
  return `${x(2)} ${y("2")} ${abc(3)} ${abc2("3")}`;
}

Config

{
  "jsc": {
    "parser": {
      "syntax": "typescript",
      "tsx": false
    },
    "target": "es2022",
    "loose": false,
    "minify": {
      "compress": {
        "arguments": false,
        "arrows": true,
        "booleans": true,
        "booleans_as_integers": false,
        "collapse_vars": true,
        "comparisons": true,
        "computed_props": true,
        "conditionals": true,
        "dead_code": true,
        "directives": true,
        "drop_console": false,
        "drop_debugger": true,
        "evaluate": true,
        "expression": false,
        "hoist_funs": false,
        "hoist_props": true,
        "hoist_vars": false,
        "if_return": true,
        "join_vars": true,
        "keep_classnames": false,
        "keep_fargs": true,
        "keep_fnames": false,
        "keep_infinity": false,
        "loops": true,
        "negate_iife": true,
        "properties": true,
        "reduce_funcs": false,
        "reduce_vars": false,
        "side_effects": true,
        "switches": true,
        "typeofs": true,
        "unsafe": false,
        "unsafe_arrows": false,
        "unsafe_comps": false,
        "unsafe_Function": false,
        "unsafe_math": false,
        "unsafe_symbols": false,
        "unsafe_methods": false,
        "unsafe_proto": false,
        "unsafe_regexp": false,
        "unsafe_undefined": false,
        "unused": true,
        "const_to_let": true,
        "pristine_globals": true,
        "passes": 7
      },
      "mangle": false,
    },
    "transform": {
      "constModules": {"globals": {"debug": {"IS_DEV_MODE": "false"}}}
    }
  },
  "module": {
    "type": "es6"
  },
  "minify": false,
  "isModule": true
}

Playground link (or link to the minimal reproduction)

https://play.swc.rs/?version=1.7.24&code=H4sIAAAAAAAAA11PSwrCMBTc5xRDcBGhIKTL4hG8g7F9tUJsSj6YWnp3n1q%2Fu3nzY17t%2BhDRUGuSjTsKwRwJW8iOrHVSiM0GF3%2BKBOcxmMCgdg2hI0%2BiTX0dT65HVnmNCZ5i8nxVmD%2FaqHKBscD1z1GJj8ccamW%2Bdb5%2BStiglSnAVVde9zv3KzguQUF5cD7iXUDZnAdLir0C4KdcikOKCJ1LtsGBnuxSs9fQKFHuK6Zf3GrKSq9nrKZRSS0f6D68fCGtZMk0h%2BYbmjyxQlYBAAA%3D&config=H4sIAAAAAAAAA32VPY%2FbMAyG9%2FyKQHOHIkMLdL4r0OHQoUBXQbEoR1dbMkQqlyDwfy8lOx%2BX0NlsPiIpkdSr02q9Vu%2FYqB%2FrE3%2Fyz2ASQrr8swWPgcyBLYqOA2CT%2FEDqy5kSFuRMh1BN40QUmdQCFS%2FAzdfNZvZQXYwIZ4%2FZ1vvg3fE2ZxP7IQHijY2tHDL3EAg%2F%2B88sxY8CKOVb%2BzbGDkx4QrRB7QNBC0kK3MSuMwOC3pskRCk7NcljlFIUmAmsHlIcRB6sJx8D53ykFozVTbQgIJ%2BgIb8HyY1zsVtAPp5wnootbHPb1j7fecPedNmQkBMOtSW8WyHqLnok7XKQSjjBhRpMcC7uvad3OgHlFB793qMPCz35B8AV6AxiMD1IcesKx%2FO05O2eevrgeGTpKHCeb%2BmUAVouqvbeCZUtlYFEXupmApsbKJVtpO3MeKF86C1ocI5nRQiNH56anZS0XPToBMD9NU6aqgnoyy1c4OVCPME%2F%2BZQkD9i8oje0W6Z47Lexe5KgB9pF%2B2QBt4LiMk6sEodhmedggUcDrLgkYwWPIsAXgKLuql4%2BzAZfD46o2y5uRZkYeM5rE7%2FPtvEizr0J7b0IXAQ6sfa5mPrPust7eYs2dzXiSV2znlQVjfr1649%2Bef2r336%2FvBaFr9HVOI5TgtWcRPU10PVtKWM1vQjf1HXRWfwve1Qe386e5ayr8T%2FpkujBpwYAAA%3D%3D

SWC Info output

I'm only using the playground

Expected behavior

Behavior without the default value in the function parameter

When a parameter is unused, it shouldn't matter if it has a default value or not.

Actual behavior

function is not optimized away

Version

1.7.24 and newer (didn't test older)

Additional context

No response

@CPunisher
Copy link
Contributor

CPunisher commented Oct 13, 2024

I think #9636 may also solve this problem

@kdy1 kdy1 added this to the Planned milestone Oct 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

No branches or pull requests

6 participants
@NullVoxPopuli @CPunisher @kdy1 and others