ESLint 7.8.0

前 [v7.7.0](https://qiita.com/mysticatea/items/86491a32e6018260c27b) | 次 [v7.9.0](https://qiita.com/mysticatea/items/e3f6cc2725e420e29824)

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">ESLint v7.8.0 has been released:<a href="https://t.co/xrKRHJ8e6F">https://t.co/xrKRHJ8e6F</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/1300558400871333889?ref_src=twsrc%5Etfw">August 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

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

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

> 🏢 [日本語 Issue 管理リポジトリ](https://github.com/eslint/eslint-jp)
> 👫 [日本語サポート チャット](https://discord.com/channels/688543509199716507/718026066001788958) ([招待リンク](https://discord.gg/wfTnWvE))
> 🏢 [本家リポジトリ](https://github.com/eslint/eslint)
> 👫 [本家サポート チャット](https://discord.com/channels/688543509199716507) ([招待リンク](https://eslint.org/chat))

---

[PR] ESLint は開発リソースを確保するための寄付を募っています。
応援してくださると嬉しいです。

- [ESLint の GitHub Sponsors](https://github.com/sponsors/eslint)
- [私個人の GitHub Sponsors](https://github.com/sponsors/mysticatea)

---

# ✨ 本体への機能追加

## `env.es2021` が追加されました

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

```js:.eslintrc.js
module.exports = {
    env: {
        es2021: true,
    },
}
```

2つの新しいグローバル変数 `WeakRef` と `FinalizationRegistry` を定義します。

## 論理演算の複合代入演算子をサポートしました

🔖 [#13609](https://github.com/eslint/eslint/pull/13609), [#13612](https://github.com/eslint/eslint/pull/13612), [#13618](https://github.com/eslint/eslint/pull/13618)

```js
a1 &&= b1
a2 ||= b2
a3 ??= b3
```

これらの演算子の正規化は `a1 = a1 && b1` ではなく `a1 && (a1 = b1)` です。つまり、短絡する場合は代入演算が発生しません。

これらの演算子には短絡動作 (short-circuit) があるため、今までは複合代入演算子をサポートしていませんでした。最近追加された `??` 演算子によって需要が出たため、短絡動作があっても複合代入演算子をサポートすることになりました。

この新しい構文を使用する場合、`parserOptions.ecmaVersion` オプションを `2021` に指定してください。

```js:.eslintrc.js
module.exports = {
    parserOptions: {
        ecmaVersion: 2021,
    },
}
```

## 数値リテラルの桁区切りをサポートしました

🔖 [#13609](https://github.com/eslint/eslint/pull/13609), [#13574](https://github.com/eslint/eslint/pull/13574), [#13581](https://github.com/eslint/eslint/pull/13581)

```js
const binary = 0b0000_1010_0101_1111
const octal = 0o012_666_755
const hex = 0xDEAD_BEAF
const decimal = 1_000_000_000
```

桁数の多い数値をアンダーバーで区切って読みやすくできます。

この新しい構文を使用する場合、`parserOptions.ecmaVersion` オプションを `2021` に指定してください。

```js:.eslintrc.js
module.exports = {
    parserOptions: {
        ecmaVersion: 2021,
    },
}
```

# 💡 新しいルール

特になし

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

## [no-magic-numbers](https://eslint.org/docs/rules/no-magic-numbers) `ignoreDefaultValues`

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

デフォルト値にマジックナンバーを許可するオプションが追加されました。

```js
/*eslint no-magic-numbers: [error, { ignoreDefaultValues: true }]*/

//✓ GOOD
const { PI = 3.14159265359 } = constants
```
> [Open Online Demo](https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgbm8tbWFnaWMtbnVtYmVyczogW2Vycm9yLCB7IGlnbm9yZURlZmF1bHRWYWx1ZXM6IHRydWUgfV0qL1xuXG4vL+KckyBHT09EXG5jb25zdCB7IFBJID0gMy4xNDE1OTI2NTM1OSB9ID0gY29uc3RhbnRzXG4iLCJvcHRpb25zIjp7InBhcnNlck9wdGlvbnMiOnsiZWNtYVZlcnNpb24iOjExLCJzb3VyY2VUeXBlIjoibW9kdWxlIiwiZWNtYUZlYXR1cmVzIjp7fX0sInJ1bGVzIjp7fSwiZW52Ijp7fX19)

## [id-length](https://eslint.org/docs/rules/id-length) `exceptionPatterns`

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

正規表現で許可する名前を指定するオプションが追加されました。

```js
/*eslint id-length: [error, { min: 3, exceptionPatterns: ["^(e|pi)$"] }]*/

//✓ GOOD
const e = 2.71828182846
const pi = 3.14159265359

//✘ BAD
const f = () => {}
```
> [Open Online Demo](https://eslint.org/demo#eyJ0ZXh0IjoiLyplc2xpbnQgaWQtbGVuZ3RoOiBbZXJyb3IsIHsgbWluOiAzLCBleGNlcHRpb25QYXR0ZXJuczogW1wiXihlfHBpKSRcIl0gfV0qL1xuXG4vL+KckyBHT09EXG5jb25zdCBlID0gMi43MTgyODE4Mjg0NlxuY29uc3QgcGkgPSAzLjE0MTU5MjY1MzU5XG5cbi8v4pyYIEJBRFxuY29uc3QgZiA9ICgpID0+IHt9XG4iLCJvcHRpb25zIjp7InBhcnNlck9wdGlvbnMiOnsiZWNtYVZlcnNpb24iOjExLCJzb3VyY2VUeXBlIjoibW9kdWxlIiwiZWNtYUZlYXR1cmVzIjp7fX0sInJ1bGVzIjp7fSwiZW52Ijp7fX19)