Skip to content

Latest commit

 

History

History
169 lines (121 loc) · 3.91 KB

File metadata and controls

169 lines (121 loc) · 3.91 KB

@putout/plugin-spread NPM version

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-spread

Rules

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 string to an array.

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