space-unary-ops
スタイルガイドによっては、単項演算子の前後にスペースを入れるか入れないかを規定しています。これは主にスタイルの問題ですが、JavaScript の式の中にはスペースなしで記述できるものがあり、可読性や保守性が低下する可能性があります。
ルールの詳細
このルールは、`words` 単項演算子の後、および `nonwords` 単項演算子の前後におけるスペースに関して、一貫性を強制します。
`words` 演算子の場合、このルールはスペースが構文的に必須でない場合にのみ適用されます。たとえば、`delete obj.foo` はスペースが必要であり、このルールでは考慮されません。同等の `delete(obj.foo)` はスペースが省略可能 (`delete (obj.foo)`) なので、このルールが適用されます。
単項 `words` 演算子の例
js
// new
var joe = new Person();
// delete
var obj = {
foo: 'bar'
};
delete obj.foo;
// typeof
typeof {} // object
// void
void 0 // undefined
単項 `nonwords` 演算子の例
js
if ([1,2,3].indexOf(1) !== -1) {};
foo = --foo;
bar = bar++;
baz = !foo;
qux = !!baz;
オプション
このルールには3つのオプションがあります
- `words` - `new`、`delete`、`typeof`、`void`、`yield` などの単項の単語演算子に適用されます。
- `nonwords` - `-`、`+`、`--`、`++`、`!`、`!!` などの単項演算子に適用されます。
- `overrides` - 各演算子(単語または非単語)のスペースの使用を上書きするかどうかを指定します。これはデフォルトでは空ですが、演算子の前後のスペースを強制または禁止するために使用できます。例えば
js
"space-unary-ops": [
2, {
"words": true,
"nonwords": false,
"overrides": {
"new": false,
"++": true
}
}]
この場合、`new` 演算子の後のスペースは許可されず、`++` 演算子の前後にはスペースが必要です。
デフォルトの `{"words": true, "nonwords": false}` オプションでこのルールに違反するコードの例
js
/*eslint @stylistic/js/space-unary-ops: "error"*/
typeof!foo;
void{foo:0};
new[foo][0];
delete(foo.bar);
++ foo;
foo --;
- foo;
+ "3";
誤り
js
/*eslint @stylistic/js/space-unary-ops: "error"*/
/*eslint-env es6*/
function *foo() {
yield(0)
}
誤り
js
/*eslint @stylistic/js/space-unary-ops: "error"*/
async function foo() {
await(bar);
}
誤り
`{"words": true, "nonwords": false}` オプションでこのルールに準拠するコードの例
js
/*eslint @stylistic/js/space-unary-ops: "error"*/
// Word unary operator "typeof" is followed by a whitespace.
typeof !foo;
// Word unary operator "void" is followed by a whitespace.
void {foo:0};
// Word unary operator "new" is followed by a whitespace.
new [foo][0];
// Word unary operator "delete" is followed by a whitespace.
delete (foo.bar);
// Unary operator "++" is not followed by whitespace.
++foo;
// Unary operator "--" is not preceded by whitespace.
foo--;
// Unary operator "-" is not followed by whitespace.
-foo;
// Unary operator "+" is not followed by whitespace.
+"3";
正しい
js
/*eslint @stylistic/js/space-unary-ops: "error"*/
/*eslint-env es6*/
function *foo() {
yield (0)
}
正しい
js
/*eslint @stylistic/js/space-unary-ops: "error"*/
async function foo() {
await (bar);
}
正しい