ESLint v3.16.0

前 [v3.15.0] | 次 [v3.17.0]

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

ESLint 3.16.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)

----

# ✨ 本体の変更

## [#7810]: トークン・コメントを取得する API を改善

プラグイン・カスタム ルール開発者向けです。
AST ノードを構成するトークン・コメントを取得するための公開 API が改善されました。

### `includeComments` オプション

従来は、トークンを取得するときと、トークンかコメントを取得するときとで異なるメソッドを利用していました。

```js:例
sourceCode.getTokenAfter(node);
sourceCode.getTokenOrCommentAfter(node);
```

トークンを取得するメソッドが 10 種類 (Before, After, Between, First, Last, それぞれ単数・複数) あるのに対して、トークンかコメントを取得するメソッドは 2 種類だけでした。今回、各メソッドに取得対象にコメントを含めるオプションが追加され、`getTokenOrCommentAfter`と`getTokenOrCommentBefore`は非推奨になりました。

```js:例
sourceCode.getTokenAfter(node);
sourceCode.getTokenAfter(node, {includeComments: true});
```

### `filter` オプション

ルールを書いていると「ノードの次のトークンを取得したいが、閉じカッコは無視したい」というような場合がよくあります。従来はループ文を用いて探索する必要がありました。

```js:例
let operatorToken = sourceCode.getTokenAfter(node.left);   
while (operatorToken.value === ")") {    
    operatorToken = sourceCode.getTokenAfter(operatorToken);    
} 
```

今回、指定した条件にマッチしないトークンを無視するための `filter` オプションが追加されました。

```js:例
const operatorToken = sourceCode.getTokenAfter(node.left, {filter: t => t.value !== ")"});
```

## [#8035], [#8054]: 大きなファイル向けの性能改善

`eslint --fix` 等のアルゴリズムを見直して、計算量 (`O(n)`的なやつ) を改善しました。
大きなファイルをチェックする時の性能が改善していると思います。

# 💡 新しいルール

今回はありません。

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

今回はありません。

# ✒️ `eslint --fix` をサポートしたルール

## [#7841]: [no-unused-labels]

```js:例
foo: while (a) { foo(a) }

// gets fixed to:

while (a) { foo(a) }
```

----

[v3.15.0]: http://qiita.com/mysticatea/items/98e996a608d2271cf1c9
[v3.17.0]: http://qiita.com/mysticatea/items/a2d72c76671c2197c712
[#7810]: https://github.com/eslint/eslint/issues/7810
[#8035]: https://github.com/eslint/eslint/issues/8035
[#8054]: https://github.com/eslint/eslint/issues/8054
[#7841]: https://github.com/eslint/eslint/issues/7841
[#9999]: https://github.com/eslint/eslint/issues/9999
[no-unused-labels]: http://eslint.org/docs/rules/no-unused-labels
[xxxx]: http://eslint.org/docs/rules/xxxx

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

おまけ

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Excited about the new token iterator options for rule authors included in this release! Great work by <a href="https://twitter.com/mysticatea">@mysticatea</a> <a href="https://t.co/HmPjvykByd">https://t.co/HmPjvykByd</a></p>&mdash; Kai Cataldo (@kai_cataldo) <a href="https://twitter.com/kai_cataldo/status/833733546317606913">2017年2月20日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>