ESLint v6.6.0

前 [v6.5.0](https://qiita.com/mysticatea/items/195aa1f585a31b2153f2) | 次 [v6.7.0](https://qiita.com/mysticatea/items/377b6ca6558dc253159b)

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">ESLint v6.6.0 has been released: <a href="https://t.co/oHo5t86A0k">https://t.co/oHo5t86A0k</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/1187805897818562566?ref_src=twsrc%5Etfw">October 25, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

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

これまで ESLint は隔週リリースを行ってきましたが、アクティブなメンテナが減少していることから、今後は月間リリースとなります。

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

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

# 🚀 本体への機能追加

## `context.getCwd()`

🔖 [RFC035](https://github.com/eslint/rfcs/tree/master/designs/2019-pass-cwd-from-cli-engine), [#12389](https://github.com/eslint/eslint/pull/12389)

各ルールから現在のディレクトリを取得できるようになりました。

```js:例
module.exports = {
    meta: {},
    create(context) {
        console.log(context.getCwd()) //→ /home/a-user/projects/foo
        return {}
    },
}
```

この値は基本的に `process.cwd()` と同じですが、いくつかの場合に異なる値になります。

- `CLIEngine` オブジェクトを初期化した後に `process.chdir()` 関数によって CWD を変更した場合
- `CLIEngine` のコンストラクタ オプションとして独自の CWD を指定した場合

また、ブラウザ上で実行している場合など、CWD が不明な場合は `undefined` を返します。

# 💡 新しいルール

特になし。

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

## [no-param-reassign](https://eslint.org/docs/rules/no-param-reassign) `ignorePropertyModificationsForRegex`

🔖 [#11275](https://github.com/eslint/eslint/pull/11275)

指定した正規表現にマッチする名前の引数について、プロパティの変更を許可するオプションが追加されました。

```js:例
/*eslint no-param-reassign: [error, { props: true, ignorePropertyModificationsForRegex: ["^req"] }]*/

//✘BAD
function f1(req, res) {
    res.value = 0
}

//✔GOOD
function f2(req, res) {
    req.value = 0
}
```

**[Online demo](https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IFtlcnJvciwgeyBwcm9wczogdHJ1ZSwgaWdub3JlUHJvcGVydHlNb2RpZmljYXRpb25zRm9yUmVnZXg6IFtcIl5yZXFcIl0gfV0qL1xuXG4vL+KcmEJBRFxuZnVuY3Rpb24gZjEocmVxLCByZXMpIHtcbiAgICByZXMudmFsdWUgPSAwXG59XG5cbi8v4pyUR09PRFxuZnVuY3Rpb24gZjIocmVxLCByZXMpIHtcbiAgICByZXEudmFsdWUgPSAwXG59XG4iLCJvcHRpb25zIjp7InBhcnNlck9wdGlvbnMiOnsiZWNtYVZlcnNpb24iOjExLCJzb3VyY2VUeXBlIjoibW9kdWxlIiwiZWNtYUZlYXR1cmVzIjp7fX0sInJ1bGVzIjp7fSwiZW52Ijp7fX19)**


## [use-isnan](https://eslint.org/docs/rules/use-isnan) `enforceForIndexOf`

🔖 [#12379](https://github.com/eslint/eslint/pull/12379)

浮動小数点数の仕様により、`NaN`との比較は常に`false`になります。これを報告する`use-isnan`ルールに、`Array#indexOf`メソッドも報告するオプションが追加されました。代わりに、`Array#findIndex`メソッドを利用したり、`NaN` を特別に処理する新しいメソッド`Array#includes`を利用したりしましょう。

```js:例
/*eslint use-isnan: [error, { enforceForIndexOf: true }]*/

//✘BAD
var indexOfNaN= myArray.indexOf(NaN)
var hasNaN = myArray.indexOf(NaN) >= 0

//✔GOOD
var indexOfNaN = myArray.findIndex(Number.isNaN)
var hasNaN = myArray.includes(NaN)
```

**[Online demo](https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgdXNlLWlzbmFuOiBbZXJyb3IsIHsgZW5mb3JjZUZvckluZGV4T2Y6IHRydWUgfV0qL1xuXG4vL+KcmEJBRFxudmFyIGluZGV4T2ZOYU49IG15QXJyYXkuaW5kZXhPZihOYU4pXG52YXIgaGFzTmFOID0gbXlBcnJheS5pbmRleE9mKE5hTikgPj0gMFxuXG4vL+KclEdPT0RcbnZhciBpbmRleE9mTmFOID0gbXlBcnJheS5maW5kSW5kZXgoTnVtYmVyLmlzTmFOKVxudmFyIGhhc05hTiA9IG15QXJyYXkuaW5jbHVkZXMoTmFOKVxuIiwib3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFWZXJzaW9uIjoxMSwic291cmNlVHlwZSI6Im1vZHVsZSIsImVjbWFGZWF0dXJlcyI6e319LCJydWxlcyI6e30sImVudiI6e319fQ==)**


## [no-unsafe-negation](https://eslint.org/docs/rules/no-unsafe-negation) `enforceForOrderingRelations`

🔖 [#12414](https://github.com/eslint/eslint/pull/12414)

比較演算子の左辺をオペランドとする否定演算子を警告するオプションが追加されました。

```js:例
/*eslint no-unsafe-negation: [error, { enforceForOrderingRelations: true }] */

//✘BAD
if (! a < b) {}

//✔GOOD
if (!(a < b)) {}
```

**[Online demo](https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgbm8tdW5zYWZlLW5lZ2F0aW9uOiBbZXJyb3IsIHsgZW5mb3JjZUZvck9yZGVyaW5nUmVsYXRpb25zOiB0cnVlIH1dICovXG5cbi8v4pyYQkFEXG5pZiAoISBhIDwgYikge31cblxuLy/inJRHT09EXG5pZiAoIShhIDwgYikpIHt9Iiwib3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFWZXJzaW9uIjoxMSwic291cmNlVHlwZSI6Im1vZHVsZSIsImVjbWFGZWF0dXJlcyI6e319LCJydWxlcyI6e30sImVudiI6e319fQ==)**


## [no-extra-parens](https://eslint.org/docs/rules/no-extra-parens) `enforceForNewInMemberExpressions`

🔖 [#12436](https://github.com/eslint/eslint/pull/12436)

`new`式に直接プロパティアクセスを繋げているときに、その`new`式を囲む括弧を無視するためのオプションが追加されました。

```js:例
/*eslint no-extra-parens: [error, all, { enforceForNewInMemberExpressions: false }] */

//✔GOOD
var obj = (new Foo()).prop;
```

**[Online demo](https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgbm8tZXh0cmEtcGFyZW5zOiBbZXJyb3IsIGFsbCwgeyBlbmZvcmNlRm9yTmV3SW5NZW1iZXJFeHByZXNzaW9uczogZmFsc2UgfV0gKi9cblxuLy/inJRHT09EXG52YXIgb2JqID0gKG5ldyBGb28oKSkucHJvcDtcbiIsIm9wdGlvbnMiOnsicGFyc2VyT3B0aW9ucyI6eyJlY21hVmVyc2lvbiI6MTEsInNvdXJjZVR5cGUiOiJtb2R1bGUiLCJlY21hRmVhdHVyZXMiOnt9fSwicnVsZXMiOnt9LCJlbnYiOnt9fX0=)**


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

特になし。

# ⚠️ 非推奨になったルール

特になし。