ESLint v3.12.0

前 [v3.11.0] | 次 [v3.13.0]

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

ESLint 3.12.0 がリリースされました。
いくつかの機能追加・バグ修正が行われています。

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

- :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)

----

# :star2: 本体への変更

## [#6525]: 新しい Node API: getRules, version

`linter.getRules`は、現在読み込まれている全ルールを取得する API です。
結果値は`Map`オブジェクトになります。

```js
const {linter} = require("eslint")
const rules = linter.getRules()

console.log(Array.from(rules.keys()))    // → ["accessor-pairs", "array-bracket-spacing", ...]
console.log(rules.get("accessor-pairs")) // → {meta: {docs: {...}, schema: {...}}, create: ...}}
```

初期状態では、結果値にはすべてのコアルールが含まれます。
プラグインを利用した Linting を行った後に呼び出すと、そのプラグインのルールも含まれます。

`linter.version`, `CLIEngine.version` はそれぞれ ESLint のバージョン番号が文字列で入っています。
(`require("eslint/package.json").version`と同じ)

## [#7699]: airbnb-base

`eslint --init`コマンドで選択できる airbnb 設定は、React を利用することが前提の設定です。
React を使用しない場合は `airbnb-base` 設定を使うことになっています。
今回、`eslint --init`コマンドで `airbnb-base` 設定も選択できるようになりました。

```diff
  $ eslint --init
  ? How would you like to configure ESLint? Use a popular style guide
  ? Which style guide do you want to follow? Airbnb
+ ? Do you use React? (y/N)
```

# :bulb: 新しいルール

## [#7563]: [no-await-in-loop]

通常のループ内に`await`式を書くと警告するルールです。
そのような`await`式は直列実行されるので並列化しましょう、という意図のようです。

```js:例
/*eslint no-await-in-loop: error */

async function wrap() {

    //✔ GOOD
    await Promise.all(list.map(doSomething))

    //✘ BAD
    for (const value of list) {
        await doSomething(value)
    }

}
```

個人的には、非同期処理をループ文で直列化できる事も async/await の利点の1つだと思ってますが...

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

## [#7681]: [indent]

オブジェクトリテラルと配列リテラルで、2番目以降のプロパティ/要素を1番目のプロパティ/要素に揃えるオプションが追加されました。

```js:例
/*eslint indent: [error, 4, {ObjectExpression: first, ArrayExpression: first}] */

//✔ GOOD
const a = { foo: 1,
            bar: 2,
            baz: 3 }
const b = [ 1,
            2,
            3 ]

//✘ BAD
const a = { foo: 1,
    bar: 2,
    baz: 3 }
const b = [ 1,
    2,
    3 ]
```

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

## [#7701]: [capitalized-comments]

```js:例
// this is a pen.

// ↓↓↓

// This is a pen.
```

[v3.11.0]: http://qiita.com/mysticatea/items/0fb717830e1b62575525
[v3.13.0]: http://qiita.com/mysticatea/items/c1a4e68266f1f3c021b8
[#6525]: https://github.com/eslint/eslint/issues/6525
[#7563]: https://github.com/eslint/eslint/issues/7563
[#7681]: https://github.com/eslint/eslint/issues/7681
[#7699]: https://github.com/eslint/eslint/issues/7699
[#7701]: https://github.com/eslint/eslint/issues/7701
[#9999]: https://github.com/eslint/eslint/issues/9999
[capitalized-comments]: http://eslint.org/docs/rules/capitalized-comments
[indent]: http://eslint.org/docs/rules/indent
[no-await-in-loop]: http://eslint.org/docs/rules/no-await-in-loop
[xxxx]: http://eslint.org/docs/rules/xxxx