ESLint v3.8.0

前 [v3.7.0] | 次 [v3.9.0]

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

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

> 余談ですが、今回のリリース作業は私が実施しました :muscle: 

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

- :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: 本体への機能追加

## [#7212]: Node.js API の Lint 結果にソースコード全体が含まれるようになった

詳細は[こちら](http://eslint.org/docs/developer-guide/nodejs-api#executeonfiles)(英語)。

主にカスタム フォーマッターの開発者向けです。

JSCS では Lint 結果で警告周辺のソースコードを表示するのですが、そのようなカスタム フォーマッターを作れるように Lint 結果にソースコード全体を格納するプロパティが追加されました。

# :bulb: 新しいルール

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

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

関数名が代入先の変数・プロパティの名前と一致していなかった場合に警告します。
匿名関数は常に許可されます。

```js:例
/*eslint func-name-matching: error */

//✔ GOOD
var foo = function foo() {}
obj.foo = function foo() {}

//✘ BAD
var foo = function bar() {}
obj.foo = function bar() {}
```

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

## [#7101]: [comma-dangle]

関数定義と関数呼び出しの末尾カンマを扱うオプションが追加されました。
構文の種類ごとに設定する必要があります。

```js:例
/*eslint comma-dangle: [error, {
    arrays: always-multiline,
    objects: always-multiline,
    imports: always-multiline,
    exports: always-multiline,
    functions: always-multiline
}] */

//✔ GOOD
function foo(a, b) {}
function foo(
    a,
    b,
) {}

foo(a, b)
foo(
    a,
    b,
)

//✘ BAD
function foo(a, b,) {}
function foo(
    a,
    b
) {}

foo(a, b,)
foo(
    a,
    b
)
```

## [#7101]: [space-before-function-paren]

非同期アロー関数のためのオプションが追加されました。

```js:例
/*eslint space-before-function-paren: [error, {asyncArrow: always}] */

//✔ GOOD
async (a) => await doSomething(a)

//✘ BAD
async(a) => await doSomething(a)
```

## [#7212]: [wrap-iife]

関数呼び出しに加えて `.call`/`.apply`メソッド呼び出しされる関数式も「即座に呼び出される関数式 (Immediately-Invoked Function Expression; IIFE)」として扱うオプションが追加されました。

```js:例
/*eslint wrap-iife: [error, inside, {functionPrototypeMethods: true}] */

//✔ GOOD
(function() {
    doSomething()
}).call(obj)

//✘ BAD
(function() {
    doSomething()
}.call(obj))
```

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

## [#7105]: [curly]

`if`等のステートメントの省略可能なブロックに関して自動修正を実施します。
ブロック内の空白や改行に関しては、別途 [brace-style] や [block-spacing] ルールによって修正されます。

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

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

この自動修正によってブロックを自動削除するとき、セミコロンが無いことによって文の意味が変わってしまう場合は自動修正を中止します。手動で修正してください。

## [#7202]: [no-lonely-if]

`else`ブロックの中身が`if`文1つだけだった場合に、その`else`ブロックのカッコを削除します。
修正後のインデント等は、別途 [indent] ルールによって修正されます。

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

## [#7236]: [no-extra-bind]

不要な`.bind(this)`を削除します。

```js:例
foo(function() {
    doSomething()
}.bind(this))
// ↓
foo(function() {
    doSomething()
})
```

## [#7283]: [prefer-spread]

スプレッド演算子が利用できる場合は自動修正します。

```js:例
foo.apply(null, args)
obj.foo.apply(obj, args)
// ↓
foo(...args)
obj.foo(...args)
```

## [#7295]: [one-var-declaration-per-line]

1つの変数宣言式が、1行に複数の変数を宣言していた場合は改行を挿入します。
修正後のインデント・改行文字等は、別途 [indent] や [linebreak-style] ルールによって修正されます。

```js:例
let a = 1, b = 2
// ↓
let a = 1,
b = 2
```

[v3.7.0]: http://qiita.com/mysticatea/items/dd90aff81eeb92683c5d
[v3.9.0]: http://qiita.com/mysticatea/items/abc7885b373b5b37ce97
[#6065]: https://github.com/eslint/eslint/issues/6065
[#7101]: https://github.com/eslint/eslint/issues/7101
[#7105]: https://github.com/eslint/eslint/issues/7105
[#7202]: https://github.com/eslint/eslint/issues/7202
[#7212]: https://github.com/eslint/eslint/issues/7212
[#7236]: https://github.com/eslint/eslint/issues/7236
[#7283]: https://github.com/eslint/eslint/issues/7283
[#7295]: https://github.com/eslint/eslint/issues/7295
[#9999]: https://github.com/eslint/eslint/issues/9999
[block-spacing]: http://eslint.org/docs/rules/block-spacing
[brace-style]: http://eslint.org/docs/rules/brace-style
[comma-dangle]: http://eslint.org/docs/rules/comma-dangle
[curly]: http://eslint.org/docs/rules/curly
[func-name-matching]: http://eslint.org/docs/rules/func-name-matching
[indent]: http://eslint.org/docs/rules/indent
[linebreak-style]: http://eslint.org/docs/rules/linebreak-style
[no-extra-bind]: http://eslint.org/docs/rules/no-extra-bind
[no-lonely-if]: http://eslint.org/docs/rules/no-lonely-if
[one-var-declaration-per-line]: http://eslint.org/docs/rules/one-var-declaration-per-line
[prefer-spread]: http://eslint.org/docs/rules/prefer-spread
[space-before-function-paren]: http://eslint.org/docs/rules/space-before-function-paren
[wrap-iife]: http://eslint.org/docs/rules/wrap-iife
[xxxx]: http://eslint.org/docs/rules/xxxx