ESLint v3.9.0

前 [v3.8.0] | 次 [v3.10.0]

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

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

今回、1つのルールが非推奨になりました。

- [prefer-reflect]

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)

----

# :sparkles: 本体への機能追加

## [#6974]: 構文解析器プラグインが`parserServices`オブジェクトを公開できるようになった

Undocumented. (なんでだろう...)

構文解析器プラグインは、検証ルールが構文解析器の高度な機能を利用するためのブリッジを定義できるようになりました。
例えば、[TypeScript 構文解析器プラグイン](https://github.com/eslint/typescript-eslint-parser)はこれを利用して型に関する検証器を提供します。


# :bulb: 新しいルール

## [#7309]: [no-useless-return]

:memo: 自動修正をサポートしています。

安全に削除できる (冗長な) `return` 文を禁止するルールです。

```js:例
/*eslint no-useless-return: error */

//✔ GOOD
function foo1() {
    if (a) {
        return
    }
    doSomething();
}

function foo2() {
    return "bar"
}

//✘ BAD
function foo1() {
    if (a) {
        doSomething();
        return
    }
}
function foo2() {
    if (a) {
        doSomething();
    }
    return
}
function foo3() {
    return
}
```

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

## [#3229]: [max-len]

正規表現が書かれている行を無視するオプションが追加されました。

```js:例
/*eslint max-len: [error, 10, {ignoreRegExpLiterals: true}] */

//✔ GOOD
let a = /this is a long regular expression/

//✘ BAD
let b = "this is a long string literal"
```

## [#5946]: [indent]

![JSCS](http://jscs.info/favicon.ico) JSCS 互換オプションです。

関数呼び出しの引数リストに関するインデントを、最初の引数の位置に揃えられるようになりました。

```js:例
/*eslint indent: [error, 4, {CallExpression: {parameters: "first"}}] */

//✔ GOOD
doSomething(foo,
            bar,
            baz)

//✘ BAD
doSomething(foo,
    bar,
    baz)
```

## [#7391]: [func-name-matching]

関数式の名前が代入先の変数・プロパティの名前と一致**させない**ためのオプションが追加されました。
より説明的な名前にすべし、という意図のようです。

```js:例
/*eslint func-name-matching: [error, never] */

//✔ GOOD
let foo = function details() {
}

//✘ BAD
let foo = function foo() {
}
```

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

## [#5959]: [newline-after-var]

変数宣言の後の空行を自動修正できるようになりました。

```js:例
let foo = 1
doSomething(foo)
// ↓
let foo = 1

doSomething(foo)
```

## [#7074]: [brace-style]

開き括弧や`if-else`等のキーワードの位置を自動修正できるようになりました。

```js:例
if (a) {
    doSomething()
}
else {
    doSomethingElse()
}
// ↓
if (a) {
    doSomething()
} else {
    doSomethingElse()
}
```

## [#7240]: [arrow-body-style]

アロー関数のブロックの有無を自動修正できるようになりました。

```js:例
let foo = (a, b) => {
    return a + b
}
// ↓
let foo = (a, b) => a + b
```

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

## [#7226]: [prefer-reflect]

`Refrect`クラスのメソッドで代用できる言語機能を使うと警告するルールでした。
例えば、`delete obj.foo`と書くと、`Reflect.deleteProperty`を使えと言われます。

しかしながら、言語機能と`Reflect`クラスのメソッドでは微妙に挙動が異なる場合が多く、このルールは適切ではないと判断されました。
この警告が必要な場合はカスタムルール or プラグインを作成してください。

# :art: 新しいフォーマッター

## [#5860]: [codeframe]

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

警告周辺のソースコードを表示してくれるフォーマッターです。JSCSから輸入されました。
一覧性は低下しますが、解りやすいですね。

![An Example](https://cloud.githubusercontent.com/assets/626038/19613495/34dc8e20-97ed-11e6-8783-c54584a7d1d3.png)

[v3.8.0]: http://qiita.com/mysticatea/items/6f037c15057c57982453
[v3.10.0]: http://qiita.com/mysticatea/items/b987cd002aee911044f0
[#3229]: https://github.com/eslint/eslint/issues/3229
[#5860]: https://github.com/eslint/eslint/issues/5860
[#5946]: https://github.com/eslint/eslint/issues/5946
[#5959]: https://github.com/eslint/eslint/issues/5959
[#6974]: https://github.com/eslint/eslint/issues/6974
[#7074]: https://github.com/eslint/eslint/issues/7074
[#7226]: https://github.com/eslint/eslint/issues/7226
[#7240]: https://github.com/eslint/eslint/issues/7240
[#7309]: https://github.com/eslint/eslint/issues/7309
[#7391]: https://github.com/eslint/eslint/issues/7391
[#9999]: https://github.com/eslint/eslint/issues/9999
[arrow-body-style]: http://eslint.org/docs/rules/arrow-body-style
[brace-style]: http://eslint.org/docs/rules/brace-style
[func-name-matching]: http://eslint.org/docs/rules/func-name-matching
[indent]: http://eslint.org/docs/rules/indent
[newline-after-var]: http://eslint.org/docs/rules/newline-after-var
[max-len]: http://eslint.org/docs/rules/max-len
[no-useless-return]: http://eslint.org/docs/rules/no-useless-return
[prefer-reflect]: http://eslint.org/docs/rules/prefer-reflect
[xxxx]: http://eslint.org/docs/rules/xxxx
[codeframe]: http://eslint.org/docs/user-guide/command-line-interface#output