Skip to content

Files

Latest commit

5723a49 · Oct 19, 2024

History

History
This branch is 1378 commits behind coderaiser/putout:master.

plugin-remove-useless-functions

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Jul 10, 2023
Oct 19, 2024
Jul 20, 2022
Jan 6, 2022
Jun 14, 2023
Apr 10, 2024
Apr 13, 2024
Jun 14, 2023
Jun 5, 2020
Jun 14, 2023
Sep 26, 2024

@putout/plugin-remove-useless-functions NPM version

🐊Putout plugin adds ability to find and remove useless functions.

Install

npm i @putout/plugin-remove-useless-functions -D

Rule

{
    "rules": {
        "remove-useless-functions": "on"
    }
}

❌ Example of incorrect code

const y = (...a) => {
    alert(...a);
};

[].filter((a) => a);

✅ Example of correct code

const y = alert;
[].filter(Boolean);

Open Questions

Why there is no transform for such case:

const f = (a) => alert(a);

Isn't is the same as:

const f = alert;

Actually it is the same, and this example can be converted without an issue, but there is also cases like:

const one = (f) => (a) => f(a);

[
    1,
    2,
    3,
    4,
].map(one(console.log));

// output
1;
2;
3;

And if it will be simplified:

const one = (f) => f;

[
    1,
    2,
    3,
    4,
].map(one(console.log));

// output
'1 0 [1, 2, 3]';
'2 1 [1, 2, 3]';
'3 2 [1, 2, 3]';

So behaviour is totally different. The same result for:

[
    1,
    2,
    3,
    4,
].map(console.log);

Because map calls a function with 3 arguments, and console.log receives any count of arguments, to cut redundant args there is a need to use something like:

const one = (f) => (a) => f(a);

There is a lot such cases in the wild. While we have no syntax to set the count of arguments we are going to receive, and a way to avoid returning result we don't want function to return, there is no need in such a dengerous transform.

License

MIT