useConsistentBuiltinInstantiation (since v1.7.2)
Diagnostic Category: lint/nursery/useConsistentBuiltinInstantiation
Sources:
- Same as:
unicorn/new-for-builtins
- Same as:
no-new-wrappers
Enforce the use of new
for all builtins, except String
, Number
, Boolean
, Symbol
and BigInt
.
new Builtin()
and Builtin()
work the same, but new should be preferred for consistency with other constructors.
Enforces the use of new for following builtins:
- AggregateError
- Array
- ArrayBuffer
- BigInt64Array
- BigUint64Array
- DataView
- Date
- Error
- EvalError
- FinalizationRegistry
- Float32Array
- Float64Array
- Function
- Int16Array
- Int32Array
- Int8Array
- Map
- Object
- Promise
- Proxy
- RangeError
- ReferenceError
- RegExp
- Set
- SharedArrayBuffer
- SyntaxError
- TypeError
- URIError
- Uint16Array
- Uint32Array
- Uint8Array
- Uint8ClampedArray
- WeakMap
- WeakRef
- WeakSet
Disallows the use of new for following builtins:
- BigInt
- Boolean
- Number
- String
- Symbol
These should not use
new
as that would create object wrappers for the primitive values, which is not what you want. However, withoutnew
they can be useful for coercing a value to that type.
Examples
Section titled ExamplesInvalid
Section titled Invalidcode-block.js:1:14 lint/nursery/useConsistentBuiltinInstantiation FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━
⚠ Use String() instead of new String().
> 1 │ const text = new String(10);
│ ^^^^^^^^^^^^^^
2 │
ℹ Unsafe fix: Remove new keyword.
1 │ const·text·=·new·String(10);
│ ----
code-block.js:1:13 lint/nursery/useConsistentBuiltinInstantiation FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━
⚠ Use new Date() instead of Date().
> 1 │ const now = Date();
│ ^^^^^^
2 │
ℹ Unsafe fix: Add new keyword.
1 │ const·now·=·new·Date();
│ ++++
code-block.js:1:13 lint/nursery/useConsistentBuiltinInstantiation FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━
⚠ Use new Map() instead of Map().
> 1 │ const map = Map([
│ ^^^^^
> 2 │ ['foo', 'bar']
> 3 │ ]);
│ ^^
4 │
ℹ Unsafe fix: Add new keyword.
1 │ const·map·=·new·Map([
│ ++++