@putout/plugin-spread
v3.0.0
Published
🐊Putout plugin adds ability to remove useless spread
Maintainers
Readme
@putout/plugin-spread 
Spread syntax can be used when all elements from an object or array need to be included in a list of some kind.
(c) MDN
🐊Putout plugin adds ability to transform spread syntax.
Install
npm i @putout/plugin-spreadRules
- ✅ convert-apply-to-spread;
- ✅ convert-convert-object-assign-to-merge-spread;
- ✅ simplify-nested;
- ✅ remove-useless-array;
- ✅ remove-useless-object;
Rule
{
"rules": {
"spread/convert-apply-to-spread": "on",
"spread/convert-object-assign-to-merge-spread": "on",
"spread/remove-useless-array": "on",
"spread/remove-useless-object": "on",
"spread/simplify-nested": "on"
}
}convert-object-assign-to-merge-spread
The
Object.assign()method copies all enumerable own properties from one or more source objects to a target object and returns the modified target object.Spread syntax (
...) allows an object expression to be expanded in places where zero or more key-value pairs are expected.(c) MDN
Convert Object.assign() to merge spread since it shorter but does (mostly) the same.
❌ Example of incorrect code
function merge(a) {
return Object.assign({}, a, {
hello: 'world',
});
}✅ Example of correct code
function merge(a) {
return {
...a,
hello: 'world',
};
}Comparison
Linter | Rule | Fix
--------|-------|------------|
🐊 Putout | spread/convert-object-assign-to-merge-spread | ✅
⏣ ESLint | prefer-object-spread | ✅
remove-useless-array
The thing is [...b] can be used for:
- copying an array;
- converting different value type like
stringto anarray.
So better to be more concrete and use slice for copying and Array()/Array.from() for converting to decrease cognitive load.
Also sometimes there is no need on any of this operations, and we can drop spread.
❌ Example of incorrect code
for (const a of [...b]) {}
const places = [...getPlaces()];✅ Example of correct code
for (const a of b) {}
const places = getPlaces();
// Array constructor creates sparse array
[...Array(5)].map(Number);remove-useless-object
❌ Example of incorrect code
const a = {
...fn(),
};✅ Example of correct code
const a = fn();nested
Checkout in 🐊Putout Editor.
❌ Example of incorrect code
[
...[
...a,
...b,
],
...x,
];✅ Example of correct code
[
...a,
...b,
...x,
];convert-apply-to-spread
Spread syntax (
...) allows an array expression to be expanded in places where zero or more arguments are expected.(c) MDN
❌ Example of incorrect code
console.apply(null, arguments);✅ Example of correct code
console.log(...arguments);License
MIT
