@putout/plugin-remove-useless-functions
v3.0.0
Published
šPutout plugin adds ability to find and remove useless functions
Downloads
57,250
Maintainers
Readme
@putout/plugin-remove-useless-functions
š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