ESLint v4.9.0

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

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">ESLint v4.9.0 has been released: <a href="https://t.co/ldgGclfMJw">https://t.co/ldgGclfMJw</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/919279006192734208?ref_src=twsrc%5Etfw">2017年10月14日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ESLint 4.9.0 がリリースされました。
小さな機能追加とバグ修正が行われています。

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

> 🏢 [日本語 Issue 管理リポジトリ](https://github.com/eslint/eslint-jp)
> 👫 [日本語サポート チャット](https://gitter.im/eslint/eslint-jp)
> 🏢 [本家リポジトリ](https://github.com/eslint/eslint)
> 👫 [本家サポート チャット](https://gitter.im/eslint/eslint)

# 🚀 本体への機能追加

## [#9073]: `--fix-dry-run` CLI オプション

エディタ連携等の開発者向けです。

この CLI オプションは、`--fix`と同様にソースコードの自動修正を実行しますが、ソースコード ファイルを修正せず、デフォルトではどこにも表示しません。`--fix-dry-run`の結果を表示するには、JSON フォーマッター等のフォーマッターを指定する必要があります。

```console:例
$ cat test.js | eslint --stdin --fix-dry-run --format=json
```

この CLI オプションは、外部プロセス呼び出しで ESLint を利用するツールが自動修正機能を利用するために追加されました。

# 💡 新しいルール

## [#9141]: [lines-between-class-members]

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

クラス定義において、メソッド間の空白行を矯正するスタイル・ルールです。

```js:例
/*eslint lines-between-class-members: error */

//✘ BAD
class Bad {
    foo() {
    }
    bar() {
    }
}

//✓ GOOD
class Bad {
    foo() {
    }

    bar() {
    }
}
```

> [Demoを開く](https://eslint.org/demo/#eyJ0ZXh0IjoiLyplc2xpbnQgbGluZXMtYmV0d2Vlbi1jbGFzcy1tZW1iZXJzOiBlcnJvciAqL1xyXG5cclxuLy9CQURcclxuY2xhc3MgQmFkIHtcclxuICAgIGZvbygpIHtcclxuICAgIH1cclxuICAgIGJhcigpIHtcclxuICAgIH1cclxufVxyXG5cclxuLy9HT09EXHJcbmNsYXNzIEJhZCB7XHJcbiAgICBmb28oKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYmFyKCkge1xyXG4gICAgfVxyXG59XHJcbiIsIm9wdGlvbnMiOnsicGFyc2VyT3B0aW9ucyI6eyJlY21hVmVyc2lvbiI6OCwic291cmNlVHlwZSI6InNjcmlwdCIsImVjbWFGZWF0dXJlcyI6e319LCJydWxlcyI6e30sImVudiI6e319fQ==)

## [#9389]: [multiline-comment-style]

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

複数行コメントの書き方を矯正するスタイル・ルールです。

デフォルトでは、各行頭に`*`があるブロックコメントを使うよう警告します。

```js:例
/*eslint multiline-comment-style: error */

//✘ BAD

// ラインコメントで
// 複数行

/*
行頭に`*`が無い
ブロックコメント
*/

//✓ GOOD

/*
 * 行頭に`*`がある
 * ブロックコメント
 */
```

> [Demoを開く](https://eslint.org/demo/#eyJ0ZXh0IjoiLyplc2xpbnQgbXVsdGlsaW5lLWNvbW1lbnQtc3R5bGU6IGVycm9yICovXHJcblxyXG4vL0JBRFxyXG5cclxuLy8gQSBtdWx0aWxpbmUgY29tbWVudFxyXG4vLyB3aXRoIG11bHRpcGxlIGxpbmUgY29tbWVudHMuXHJcblxyXG4vKlxyXG5BIG11bHRpbGluZSBjb21tZW50XHJcbndpdGggYSBiYXJlIGJsb2NrIGNvbW1lbnQuXHJcbiovXHJcblxyXG4vL0dPT0RcclxuXHJcbi8qXHJcbiAqIEEgbXVsdGlsaW5lIGNvbW1lbnRcclxuICogd2l0aCBhIGJsb2NrIGNvbW1lbnQgd2hpY2ggaGFzIGAqYCBhdCBlYWNoIGxpbmUgYmVnaW5uaW5nLlxyXG4gKi8iLCJvcHRpb25zIjp7InBhcnNlck9wdGlvbnMiOnsiZWNtYVZlcnNpb24iOjgsInNvdXJjZVR5cGUiOiJzY3JpcHQiLCJlY21hRmVhdHVyZXMiOnt9fSwicnVsZXMiOnt9LCJlbnYiOnt9fX0=)

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

## [#8565]: [lines-around-comment] `allowClassStart` and `allowClassEnd`

コメントの前後の空白行を矯正するスタイル・ルール [lines-around-comment] について、クラス本体の先頭と末尾にあるコメントをチェックしないようにするオプションが追加されました。

```js:例
/*eslint lines-around-comment: [error, {allowClassStart: true}] */

//✓ GOOD
class A {
    /**
     * foo.
     */
    foo() {
    }
}
```

> [Demoを開く](https://eslint.org/demo/#eyJ0ZXh0IjoiLyplc2xpbnQgbGluZXMtYXJvdW5kLWNvbW1lbnQ6IFtlcnJvciwge2FsbG93Q2xhc3NTdGFydDogdHJ1ZX1dICovXHJcblxyXG4vL0dPT0RcclxuY2xhc3MgQSB7XHJcbiAgICAvKipcclxuICAgICAqIGZvby5cclxuICAgICAqL1xyXG4gICAgZm9vKCkge1xyXG4gICAgfVxyXG59Iiwib3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFWZXJzaW9uIjo4LCJzb3VyY2VUeXBlIjoic2NyaXB0IiwiZWNtYUZlYXR1cmVzIjp7fX0sInJ1bGVzIjp7fSwiZW52Ijp7fX19)

## [#9206]: [array-bracket-newline] `consistent`

配列のカッコ`[]`の内側の改行を矯正するスタイル・ルール [array-bracket-newline] について「どちらかに改行があれば他方にも改行が必要」とするオプションが追加されました。

```js:例
/*eslint array-bracket-newline: [error, consistent] */

//✘ BAD
const xs1 = [
    1, 2, 3 ]

//✓ GOOD
const xs2 = [
    1, 2, 3
]
const xs3 = [1, 2, 3]
```

> [Demoを開く](https://eslint.org/demo/#eyJ0ZXh0IjoiLyplc2xpbnQgYXJyYXktYnJhY2tldC1uZXdsaW5lOiBbZXJyb3IsIGNvbnNpc3RlbnRdICovXHJcblxyXG4vL0JBRFxyXG5jb25zdCB4czEgPSBbXHJcbiAgICAxLCAyLCAzIF1cclxuXHJcbi8vR09PRFxyXG5jb25zdCB4czIgPSBbXHJcbiAgICAxLCAyLCAzXHJcbl1cclxuY29uc3QgeHMzID0gWzEsIDIsIDNdXHJcbiIsIm9wdGlvbnMiOnsicGFyc2VyT3B0aW9ucyI6eyJlY21hVmVyc2lvbiI6OCwic291cmNlVHlwZSI6InNjcmlwdCIsImVjbWFGZWF0dXJlcyI6e319LCJydWxlcyI6e30sImVudiI6e319fQ==)

## [#9229]: [no-else-return] `allowElseIf`

`return`文で終わる`if`構文の`else`句を警告するルール [no-else-return] について、その`else`句が別の`if`文であったときも警告するオプションが追加されました。

```js:例
/*eslint no-else-return: [error, {allowElseIf: false}] */

//✘ BAD
function wrap(a) {
    if (a === 0) {
        return "zero"
    } else if (a === 1) {
        return "one"
    }
}

//✓ GOOD
function wrap(a) {
    if (a === 0) {
        return "zero"
    }
    if (a === 1) {
        return "one"
    }
}
```

> [Demoを開く](https://eslint.org/demo/#eyJ0ZXh0IjoiLyplc2xpbnQgbm8tZWxzZS1yZXR1cm46IFtlcnJvciwge2FsbG93RWxzZUlmOiBmYWxzZX1dICovXHJcblxyXG4vL0JBRFxyXG5mdW5jdGlvbiB3cmFwKGEpIHtcclxuICAgIGlmIChhID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiemVyb1wiXHJcbiAgICB9IGVsc2UgaWYgKGEgPT09IDEpIHtcclxuICAgICAgICByZXR1cm4gXCJvbmVcIlxyXG4gICAgfVxyXG59XHJcblxyXG4vL0dPT0RcclxuZnVuY3Rpb24gd3JhcChhKSB7XHJcbiAgICBpZiAoYSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBcInplcm9cIlxyXG4gICAgfVxyXG4gICAgaWYgKGEgPT09IDEpIHtcclxuICAgICAgICByZXR1cm4gXCJvbmVcIlxyXG4gICAgfVxyXG59Iiwib3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFWZXJzaW9uIjo4LCJzb3VyY2VUeXBlIjoic2NyaXB0IiwiZWNtYUZlYXR1cmVzIjp7fX0sInJ1bGVzIjp7fSwiZW52Ijp7fX19)

## [#9395]: [require-jsdoc] `FunctionExpression`

JSDoc コメントが無い関数定義やクラス定義を警告するルール [require-jsdoc] について、変数宣言の初期化式としての関数式もチェックするオプションが追加されました。

```js:例
/*eslint require-jsdoc: [error, {require: {FunctionExpression: true}}] */

//✘ BAD
const foo = function() {
    // do something...
}
```

> [Demoを開く](https://eslint.org/demo/#eyJ0ZXh0IjoiLyplc2xpbnQgcmVxdWlyZS1qc2RvYzogW2Vycm9yLCB7cmVxdWlyZToge0Z1bmN0aW9uRXhwcmVzc2lvbjogdHJ1ZX19XSAqL1xyXG5cclxuLy9CQURcclxuY29uc3QgZm9vID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBkbyBzb21ldGhpbmcuLi5cclxufVxyXG4iLCJvcHRpb25zIjp7InBhcnNlck9wdGlvbnMiOnsiZWNtYVZlcnNpb24iOjgsInNvdXJjZVR5cGUiOiJzY3JpcHQiLCJlY21hRmVhdHVyZXMiOnt9fSwicnVsZXMiOnt9LCJlbnYiOnt9fX0=)

## [#9413]: [no-restricted-imports] and [no-restricted-modules] `message`

特定のパッケージの読込を禁止するルール [no-restricted-imports] と [no-restricted-modules] について、パッケージ毎に独自のエラーメッセージを指定できるようになりました。これにより、代わりに使うべきパッケージを提示することができます。

```js:例
/*eslint no-restricted-modules: [error,
  {name: "domain", message: "There is no substitute."},
  {name: "sys", message: "Use 'util' instead."}
] */

//✘ BAD
const domain = require("domain")
const sys = require("sys")
```

> [Demoを開く](https://eslint.org/demo/#eyJ0ZXh0IjoiLyplc2xpbnQgbm8tcmVzdHJpY3RlZC1tb2R1bGVzOiBbZXJyb3IsXHJcbiAge25hbWU6IFwiZG9tYWluXCIsIG1lc3NhZ2U6IFwiVGhlcmUgaXMgbm8gc3Vic3RpdHV0ZS5cIn0sXHJcbiAge25hbWU6IFwic3lzXCIsIG1lc3NhZ2U6IFwiVXNlICd1dGlsJyBpbnN0ZWFkLlwifVxyXG5dICovXHJcblxyXG4vL0JBRFxyXG5jb25zdCBkb21haW4gPSByZXF1aXJlKFwiZG9tYWluXCIpXHJcbmNvbnN0IHN5cyA9IHJlcXVpcmUoXCJzeXNcIilcclxuIiwib3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFWZXJzaW9uIjo4LCJzb3VyY2VUeXBlIjoic2NyaXB0IiwiZWNtYUZlYXR1cmVzIjp7fX0sInJ1bGVzIjp7fSwiZW52Ijp7fX19)

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

今回はありません。

----

[v4.8.0]: http://qiita.com/mysticatea/items/5c66678f221b6c2e068d
[v4.10.0]: http://qiita.com/mysticatea/items/95d10cdf6ed713a8aada
[#8565]: https://github.com/eslint/eslint/issues/8565
[#9073]: https://github.com/eslint/eslint/issues/9073
[#9141]: https://github.com/eslint/eslint/issues/9141
[#9206]: https://github.com/eslint/eslint/issues/9206
[#9229]: https://github.com/eslint/eslint/issues/9229
[#9389]: https://github.com/eslint/eslint/issues/9389
[#9395]: https://github.com/eslint/eslint/issues/9395
[#9413]: https://github.com/eslint/eslint/issues/9413
[#9999]: https://github.com/eslint/eslint/issues/9999
[no-restricted-imports]: http://eslint.org/docs/rules/no-restricted-imports
[no-restricted-modules]: http://eslint.org/docs/rules/no-restricted-modules
[require-jsdoc]: http://eslint.org/docs/rules/require-jsdoc
[no-else-return]: http://eslint.org/docs/rules/no-else-return
[array-bracket-newline]: http://eslint.org/docs/rules/array-bracket-newline
[lines-around-comment]: http://eslint.org/docs/rules/lines-around-comment
[multiline-comment-style]: http://eslint.org/docs/rules/multiline-comment-style
[lines-between-class-members]: http://eslint.org/docs/rules/lines-between-class-members
[xxxx]: http://eslint.org/docs/rules/xxxx

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