ESLint v2.11.0

前 [v2.10.0] | 次 [v2.12.0]

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

いくつかのバグ修正・ルール追加・機能改善が行われました。
[JSCS] からのルール移植を実施中です。進捗は GitHub の [JSCS Compatibility] マイルストーンを参照してください。

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

|     | URI |
|:----|:----|
| 日本語 Issue 管理リポジトリ | https://github.com/eslint/eslint-jp |
| 日本語チャット | https://gitter.im/eslint/eslint-jp |
| 本家 Issue 管理リポジトリ | https://github.com/eslint/eslint |
| 本家チャット | https://gitter.im/eslint/eslint |

----

# :bulb: 新しいルール

## [#2693]: [no-prototype-builtins]

`hasOwnProperty` 等のプロパティのメタ情報を取得するメソッドを、メソッドとして利用すると警告するルールです。

これらは `Object.create(null)` と併用する場合が多く、`Object.create(null)` で作成したオブジェクトは一切メソッドを持っていないため、`TypeError` の原因になります。

```js
/*eslint no-prototype-builtins: "error"*/

// ✔ GOOD
Object.hasOwnProperty.call(obj, "prop")

// ✘ BAD
obj.hasOwnProperty("prop")
```

## [#5502]: [unicode-bom]

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

Unicode Byte Order Mark の有無を矯正するルールです。
オプションによって、BOM があったら警告するか、無かったら警告するかを選択できます。

## [#6058]: [no-useless-rename]

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

Destructuring や Import/Export の無意味な名称変更構文を警告します。

```js
/*eslint no-useless-rename: "error"*/

// ✔ GOOD
let {foo} = obj;
import {foo} from "foo";
export {foo};
export {foo} from "foo";
let {foo: bar} = obj;
import * as foo from "foo";
import {foo as bar} from "foo";
export {foo as bar};
export {foo as bar} from "foo";

// ✘ BAD
let {foo: foo} = obj;
import {foo as foo} from "foo";
export {foo as foo};
export {foo as foo} from "foo";
```

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

## [#5477]: [no-constant-condition]

ループ文の条件式に定数を許可するオプションが追加されました。
無限ループを頻繁に書く人向けです。

```js
/*eslint no-constant-condition: ["error", {"checkLoops": false}]*/

// ✔ GOOD
while (true) {
    doSomething();
    if (condition()) {
        break;
    }
};
```

## [#6026]: [consistent-return]

一貫した `return` 文を矯正するルールです。
値を返すならすべての実行パスで値を返す、値を返さないならすべての実行パスで値を返さない、ということをチェックします。

今回追加されたのは、`return void 0` のような「必ず `undefined` を返す `return` 文」を「値を返さない `return` 文」として扱うオプションです。

```js
/*eslint consistent-return: ["error", {"treatUndefinedAsUnspecified": true}]*/

// ✔ GOOD
function foo(callback) {
    if (callback) {
        return void callback();
    }
}

function foo(callback) {
    if (callback) {
        return callback();
    }
    return 0;
}

// ✘ BAD
function foo(callback) {
    if (callback) {
        return callback();
    }
    // ERROR: 値を返さない実行パスがあります
}
```

サンプルコードのように、もともとは「コールバック関数を呼び出して即座に `return` するコードを短く書きたい」という要求から議論が始まりました。何度か提案が棄却された後、紆余曲折あって今の形に収まった感じです。

# :pencil: 新たに `eslint --fix` をサポートしたルール

## [#6167]: [key-spacing]

[v2.10.0]: http://qiita.com/mysticatea/items/5df2d679283d0a84b296
[v2.12.0]: http://qiita.com/mysticatea/items/7bf844b32f8295eeb061
[JSCS]: http://jscs.info
[JSCS Compatibility]: https://github.com/eslint/eslint/milestones/JSCS%20Compatibility
[#2693]: https://github.com/eslint/eslint/issues/2693
[#5477]: https://github.com/eslint/eslint/issues/5477
[#5502]: https://github.com/eslint/eslint/issues/5502
[#6026]: https://github.com/eslint/eslint/issues/6026
[#6058]: https://github.com/eslint/eslint/issues/6058
[#6167]: https://github.com/eslint/eslint/issues/6167
[no-prototype-builtins]: http://eslint.org/docs/rules/no-prototype-builtins
[unicode-bom]: http://eslint.org/docs/rules/unicode-bom
[no-useless-rename]: http://eslint.org/docs/rules/no-useless-rename
[no-constant-condition]: http://eslint.org/docs/rules/no-constant-condition
[consistent-return]: http://eslint.org/docs/rules/consistent-return
[key-spacing]: http://eslint.org/docs/rules/key-spacing