πPutout plugin adds ability to remove useless and add missing operator 'new'
npm install @putout/plugin-new[NPMIMGURL]: https://img.shields.io/npm/v/@putout/plugin-new.svg?style=flat&longCache=true
[NPMURL]: https://npmjs.org/package/@putout/plugin-new "npm"
> The new operator lets developers create an instance of a user-defined object type or of one of the built-in object types that has a constructor function.
>
> (c) MDN
πPutout plugin adds ability to add missing and remove useless operator new.
```
npm i @putout/plugin-new
`json`
{
"rules": {
"new/remove-useless": "on",
"new/add-missing": "on"
}
}
Operator new has no sense for Boolean, String, Number, Object, RegExp, Math, Reflect, Error, TypeError:
> Thus the function call Error(β¦) is equivalent to the object creation expression new Error(β¦) with the same arguments.
>
> (c) https://262.ecma-international.org/12.0/#sec-error-constructor
And Symbol, BigInt cannot be used with new, as it is primitive.
`js`
new Error('Something went wrong');
new new Boolean()();
`js`
Error('Something went wrong');
Boolean();
> The Set constructor lets you create Set objects that store unique values of any type, whether primitive values or object references.
>
> (c) MDN
Missing operator new should be added since built-in objects:
- Set;WeakSet
- ;Map
- ;WeakMap
- ;Int8Array
- ;Uint8Array
- ;Uint8ClampedArray
- ;Int16Array
- ;Uint16Array
- ;Int32Array
- ;Uint32Array
- ;Float32Array
- ;Float64Array
- ;BigInt64Array
- ;BigUint64Array
- ;
Produces TypeError when called without new:
``
Uncaught TypeError: Constructor Set requires 'new'
`js`
const map = Map();
`js`
const map = new Map();
Linter | Rule | Fix
--------|-------|------------|
π Putout | remove-useless-new| β
β£ ESLint | no-new-wrappers | β
β | no-new-object | β
β | no-array-constructor | β
β | no-new-symbol | β
β | no-new-native-constructor` | β
MIT