コンテンツにスキップ

@stylistic/js/

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);
}
正しい

MIT License の下でリリースされています。