mirror of
https://git.proxmox.com/git/pve-eslint
synced 2025-10-05 14:57:14 +00:00

includes a (minimal) working wrapper Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
125 lines
2.1 KiB
Markdown
125 lines
2.1 KiB
Markdown
# disallow unnecessary boolean casts (no-extra-boolean-cast)
|
|
|
|
In contexts such as an `if` statement's test where the result of the expression will already be coerced to a Boolean, casting to a Boolean via double negation (`!!`) or a `Boolean` call is unnecessary. For example, these `if` statements are equivalent:
|
|
|
|
```js
|
|
if (!!foo) {
|
|
// ...
|
|
}
|
|
|
|
if (Boolean(foo)) {
|
|
// ...
|
|
}
|
|
|
|
if (foo) {
|
|
// ...
|
|
}
|
|
```
|
|
|
|
## Rule Details
|
|
|
|
This rule disallows unnecessary boolean casts.
|
|
|
|
Examples of **incorrect** code for this rule:
|
|
|
|
```js
|
|
/*eslint no-extra-boolean-cast: "error"*/
|
|
|
|
var foo = !!!bar;
|
|
|
|
var foo = !!bar ? baz : bat;
|
|
|
|
var foo = Boolean(!!bar);
|
|
|
|
var foo = new Boolean(!!bar);
|
|
|
|
if (!!foo) {
|
|
// ...
|
|
}
|
|
|
|
if (Boolean(foo)) {
|
|
// ...
|
|
}
|
|
|
|
while (!!foo) {
|
|
// ...
|
|
}
|
|
|
|
do {
|
|
// ...
|
|
} while (Boolean(foo));
|
|
|
|
for (; !!foo; ) {
|
|
// ...
|
|
}
|
|
```
|
|
|
|
Examples of **correct** code for this rule:
|
|
|
|
```js
|
|
/*eslint no-extra-boolean-cast: "error"*/
|
|
|
|
var foo = !!bar;
|
|
var foo = Boolean(bar);
|
|
|
|
function foo() {
|
|
return !!bar;
|
|
}
|
|
|
|
var foo = bar ? !!baz : !!bat;
|
|
```
|
|
|
|
## Options
|
|
|
|
This rule has an object option:
|
|
|
|
* `"enforceForLogicalOperands"` when set to `true`, in addition to checking default contexts, checks whether the extra boolean cast is contained within a logical expression. Default is `false`, meaning that this rule by default does not warn about extra booleans cast inside logical expression.
|
|
|
|
### enforceForLogicalOperands
|
|
|
|
Examples of **incorrect** code for this rule with `"enforceForLogicalOperands"` option set to `true`:
|
|
|
|
```js
|
|
/*eslint no-extra-boolean-cast: ["error", {"enforceForLogicalOperands": true}]*/
|
|
|
|
if (!!foo || bar) {
|
|
//...
|
|
}
|
|
|
|
while (!!foo && bar) {
|
|
//...
|
|
}
|
|
|
|
if ((!!foo || bar) && baz) {
|
|
//...
|
|
}
|
|
|
|
foo && Boolean(bar) ? baz : bat
|
|
|
|
var foo = new Boolean(!!bar || baz)
|
|
```
|
|
|
|
Examples of **correct** code for this rule with `"enforceForLogicalOperands"` option set to `true`:
|
|
|
|
```js
|
|
/*eslint no-extra-boolean-cast: ["error", {"enforceForLogicalOperands": true}]*/
|
|
|
|
if (foo || bar) {
|
|
//...
|
|
}
|
|
|
|
while (foo && bar) {
|
|
//...
|
|
}
|
|
|
|
if ((foo || bar) && baz) {
|
|
//...
|
|
}
|
|
|
|
foo && bar ? baz : bat
|
|
|
|
var foo = new Boolean(bar || baz)
|
|
|
|
var foo = !!bar || baz;
|
|
```
|