ESLint v3.3.0

前 [v3.2.0] | 次 [v3.4.0]

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">ESLint v3.3.0 released: <a href="https://t.co/F87gDj31Cu">https://t.co/F87gDj31Cu</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/764175829974650880">2016年8月12日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ESLint 3.3.0 がリリースされました。
小さな機能追加といくつかのバグ修正が行われています。また、いくつかのルールが非推奨に指定されました。これらの非推奨ルールは将来的 (1年後くらい) に削除されることになります。

質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。

- :globe_with_meridians: [日本語 Issue 管理リポジトリ](https://github.com/eslint/eslint-jp)
- :speech_balloon: [日本語サポート チャット](https://gitter.im/eslint/eslint-jp)
- :globe_with_meridians: [本家リポジトリ](https://github.com/eslint/eslint)
- :speech_balloon: [本家サポート チャット](https://gitter.im/eslint/eslint)

----

# :warning: 非推奨になったルール

## [#2716]: [no-negated-in-lhs]

`in`演算子の左辺に NOT 演算子を書く (例: `!"a" in b`) と警告するルールでした。
今回`instanceof`演算子に関しても警告するようになったので、[no-unsafe-negation] に改名されました。

## [#6080]: [no-spaced-func]

関数呼び出しの`(`の前の空白文字を警告するルールでした。
今回`(`の前に空白文字を強制するオプションが追加されたので、[func-call-spacing] に改名されました。

## [#6586]: [no-native-reassign]

最初は`Object`等のビルトイン変数への代入を警告するルールでした。
`v1.0.0`から設定ファイルで指定した読み取り専用のグローバル変数への代入を警告するルールに変更されていて、ルール名とルールの実態が離れていたので、[no-global-assign] に改名されました。

# :bulb: 新しいルール

## [#2716]: [no-unsafe-negation]

:memo: `eslint --fix`をサポートしています。

意図しない NOT 演算子を警告するルールです。
[no-negated-in-lhs] ルールを置き換えました。

```js:例
/*eslint no-unsafe-negation: error*/

// ✔ GOOD
!("a" in b);
!(obj instanceof Ctor);
(!"a") in b;
(!obj) instanceof Ctor;

// ✘ BAD
!"a" in b;
!obj instanceof Ctor;
```

## [#6076]: [sort-keys]

![JSCS](http://jscs.info/favicon.ico) JSCS 互換ルールです。

オブジェクトのプロパティを、プロパティ名のアルファベット順に並べることを強制するルールです。
大文字・小文字の違いを無視するオプション、自然順序(`1`→`2`→`11`)に並べるオプションがあります。

```js:例(asc)
/*eslint sort-keys: [error, asc]*/

// ✔ GOOD
var obj = {
    a: 1,
    b: 2,
    c: 3,
}

// ✘ BAD
var obj = {
    a: 1,
    c: 3,
    b: 2,
}
```

> `3.3.0`では Destructuring があるとクラッシュするバグがあります。`3.3.1`にて修正されました。

## [#6080]: [func-call-spacing]

![JSCS](http://jscs.info/favicon.ico) JSCS 互換ルールです。:memo: `eslint --fix`をサポートしています。

関数呼び出しの`(`の前の空白文字を矯正するルールです。
空白を禁止するオプションと、空白を強制するオプションがあります。
デフォルトでは空白を禁止します。
[no-spaced-func] ルールを置き換えました。

```js:例(never)
/*eslint func-call-spacing: error*/

// ✔ GOOD
foo()

// ✘ BAD
foo ()
foo
()
```
```js:例(always)
/*eslint func-call-spacing: [error, always]*/

// ✔ GOOD
foo ()

// ✘ BAD
foo()
foo
()
```

## [#6186]: [no-template-curly-in-string]

通常の文字列の中に、テンプレート リテラルの埋め込み式を核と警告するルールです。

```js:例
/*eslint no-template-curly-in-string: error*/

// ✔ GOOD
`hello, ${world}!`

// ✘ BAD
'hello, ${world}!'
```

## [#6586]: [no-global-assign]

読み取り専用のグローバル変数への代入を警告するルールです。

```js:.eslintrc.json
{
    "globals": {
        "foo": false, // 読み取り専用
        "bar": true   // 書き変え可能
    }
}
```

```js:例
/*eslint no-global-assign: error*/

// ✔ GOOD
bar = 1

// ✘ BAD
Object = 1
undefined = 1
NaN = 1
foo = 1
```

# :wrench: オプションが追加されたルール

## [#5187]: [new-cap]

大文字で始まる変数・プロパティへの関数呼び出し、および小文字で始まる変数・プロパティへの`new`呼び出しを警告するルールです。今回、例外的に許可するパターンを正規表現で指定できるようになりました。

```js:例
/*eslint new-cap: [error, {capIsNewExceptionPattern: "^components\.[A-Z]"}]*/

// ✔ GOOD
components.Foo()
new Foo()

// ✘ BAD
Foo()
```

## [#5438]: [object-shorthand]

オブジェクト リテラルの省略記法について、リテラル全体で統一するためのオプションが追加されました。

- `consistent` ... 通常記法と省略記法がまざっていたら警告する
- `consistent-as-needed` ... 上記に加えて、すべて省略記法にできる場合は、通常記法を警告する

```js:例(consistent)
/*eslint object-shorthand: [error, consistent]*/

// ✔ GOOD
var obj = {a, b}
var obj = {a: a, b: b}

// ✘ BAD
var obj = {a: 1, b}
var obj = {a, b: 2}
```
```js:例(consistent-as-needed)
/*eslint object-shorthand: [error, consistent-as-needed]*/

// ✔ GOOD
var obj = {a, b}

// ✘ BAD
var obj = {a: a, b: b}
var obj = {a: 1, b}
var obj = {a, b: 2}
```

## [#6543]: [eqeqeq]

`null`との比較について、`==`を強制するオプションが追加されました。

```js:例
/*eslint eqeqeq: [error, always, {null: never}]*/

// ✔ GOOD
a === 1
a == null

// ✘ BAD
a == 1
a === null
```

## [#6557]: [arrow-parens]

アロー関数式の Body 部がブロックである時、常に引数部にカッコを必要とするオプションが追加されました。
AirBnB スタイルガイドがそのようになっているらしいです。

```js:例
/*eslint arrow-parens: [error, as-needed, {requireForBlockBody: true}]*/

// ✔ GOOD
a => a;
(a) => { return a };

// ✘ BAD
a => { return a };
(a) => a;
```

## [#6718]: [no-self-assign]

プロパティに関する自己代入を警告するオプションが追加されました。

```js:例
/*eslint no-self-assign: [error, {props: true}]*/

// ✔ GOOD
obj.a = obj.b

// ✘ BAD
obj.a = obj.a
```

[v3.2.0]: http://qiita.com/mysticatea/items/706f4bb024d7ceb78f1d
[v3.4.0]: http://qiita.com/mysticatea/items/4fe399cf0a1d675b6172
[#2716]: https://github.com/eslint/eslint/issues/2716
[#5187]: https://github.com/eslint/eslint/issues/5187
[#5438]: https://github.com/eslint/eslint/issues/5438
[#6076]: https://github.com/eslint/eslint/issues/6076
[#6080]: https://github.com/eslint/eslint/issues/6080
[#6186]: https://github.com/eslint/eslint/issues/6186
[#6543]: https://github.com/eslint/eslint/issues/6543
[#6557]: https://github.com/eslint/eslint/issues/6557
[#6586]: https://github.com/eslint/eslint/issues/6586
[#6718]: https://github.com/eslint/eslint/issues/6718
[arrow-parens]: http://eslint.org/docs/rules/arrow-parens
[eqeqeq]: http://eslint.org/docs/rules/eqeqeq
[func-call-spacing]: http://eslint.org/docs/rules/func-call-spacing
[new-cap]: http://eslint.org/docs/rules/new-cap
[no-global-assign]: http://eslint.org/docs/rules/no-global-assign
[no-native-reassign]: http://eslint.org/docs/rules/no-native-reassign
[no-negated-in-lhs]: http://eslint.org/docs/rules/no-negated-in-lhs
[no-self-assign]: http://eslint.org/docs/rules/no-self-assign
[no-spaced-func]: http://eslint.org/docs/rules/no-spaced-func
[no-template-curly-in-string]: http://eslint.org/docs/rules/no-template-curly-in-string
[no-unsafe-negation]: http://eslint.org/docs/rules/no-unsafe-negation
[object-shorthand]: http://eslint.org/docs/rules/object-shorthand
[sort-keys]: http://eslint.org/docs/rules/sort-keys