@putout/plugin-remove-useless-arguments
Version:
🐊Putout plugin adds ability to find and remove useless arguments
68 lines (50 loc) • 1.75 kB
JavaScript
const {operator, types} = require('putout');
const {compare} = operator;
const {
isRestElement,
isThisExpression,
isSuper,
isClass,
isClassProperty,
isClassPrivateProperty,
} = types;
module.exports.report = ({methodNode}) => {
return `Avoid useless arguments from method '${methodNode.key.name}()'`;
};
module.exports.fix = ({path, methodNode}) => {
const n = path.node.arguments.length - methodNode.params.length;
path.node.arguments = path.node.arguments.slice(n);
};
module.exports.traverse = ({push}) => ({
'__a.__b(__args)': (path) => {
const fnParent = path.scope.getFunctionParent();
if (!fnParent)
return;
const {parentPath} = fnParent.path.parentPath;
if (!isClass(parentPath))
return;
const {callee} = path.node;
const {object} = callee;
if (!isSuper(object) && !isThisExpression(object))
return;
for (const methodNode of parentPath.node.body.body) {
if (isClassProperty(methodNode))
continue;
if (isClassPrivateProperty(methodNode))
continue;
if (isRestElement(methodNode.params.at(-1)))
continue;
if (methodNode.kind === 'get')
continue;
if (!compare(methodNode.key, path.node.callee.property))
continue;
if (methodNode.params.length >= path.node.arguments.length)
continue;
push({
path,
methodNode,
});
}
},
});
;