LoginSignup
2
1

More than 5 years have passed since last update.

ESLint v5.3.0

Last updated at Posted at 2018-08-04

v5.2.0 | 次 v5.4.0

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

正規表現に関する2つのルールと非同期処理に関する2つのルールが追加されています。

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

🏢 日本語 Issue 管理リポジトリ
👫 日本語サポート チャット
🏢 本家リポジトリ
👫 本家サポート チャット

🚀 本体への機能追加

特になし。

💡 新しいルール

#10511: no-misleading-character-class

複数のコードポイントから構成される文字を文字クラス構文 (例: /[👍🏻]/u) で利用したときに警告するルールです。これは、JavaScript の正規表現が複数のコードポイントから構成される文字を期待通りに扱えないためです。

例えば、絵文字 👍🏻 は絵文字 👍 (U+1F44D) と肌色セレクタ 🏻 (U+1F3FB) の2つのコードポイントから構成されます。文字クラス構文にこの文字を書く (/[👍🏻]/u) と、👍 (U+1F44D) または 🏻 (U+1F3FB) のどちらかにマッチする正規表現になります。

なお、これはサロゲートペア (1つのコードポイントを複数のコードユニットで表現したもの) とは別の概念です。JavaScript 正規表現は (uフラグを付与することで) サロゲートペアを正しく扱えます。

/*eslint no-misleading-character-class: error */

// 結合文字 (アクセント、異体字セレクタ等):
/^[]$/u.test(""); //→ false
/^[❇️]$/u.test("❇️"); //→ false

// 絵文字と肌色セレクタのセット:
/^[👶🏻]$/u.test("👶🏻"); //→ false
/^[👶🏽]$/u.test("👶🏽"); //→ false

// 国旗:
/^[🇯🇵]$/u.test("🇯🇵"); //→ false

// ZWJ を含むグラフィムクラスタ:
/^[👨‍👩‍👦]$/u.test("👨‍👩‍👦"); //→ false

// UTF16 サロゲートペア (u フラグがない場合):
/^[👍]$/.test("👍"); //→ false

Open online demo

#10655: require-atomic-updates

アトミックではない変数の書き換えを警告するルールです。詳しくは以前に書いた記事を御覧ください。

/*eslint require-atomic-updates: error */

async function getFileSize(fileList) {
    let size = 0

    await Promise.all(
        fileList.map(async (file) => {
            size += (await fs.promises.stat(file)).size
        })
    )

    return size
}

Open online demo

#10661: no-async-promise-executor

Promiseコンストラクタの引数に async 関数式を与えたときに警告するルールです。

えーと、うーん?

/*eslint no-async-promise-executor: error */

let p = new Promise(async (resolve) => {
    // do something.
})

Open online demo

#10698: require-unicode-regexp

正規表現に必ずuフラグを付けるよう矯正するルールです。

正規表現のuフラグには、2つの重要な効果があります。

  1. UTF-16 サロゲートペアを正しく扱えるようにする。
  2. 構文エラーを正しく投げるようになる。

歴史的経緯から、JavaScript の正規表現は構文エラーに寛容です。例えば /\w{1,2/ には構文エラーがありますが、JavaScript はエラーを投げません。代わりに "a{1,2" のような文字列にマッチします。

uフラグをつけることで、このような構文エラーを持つ正規表現が正しくSyntaxErrorを投げるようになり、バグの発見に役立ちます。

/*eslint require-unicode-regexp: error */

//✗ BAD
{
    const a = /aaa/
    const b = /bbb/gi
    const c = new RegExp("ccc")
    const d = new RegExp("ddd", "gi")
}

//✓ GOOD
{
    const a = /aaa/u
    const b = /bbb/giu
    const c = new RegExp("ccc", "u")
    const d = new RegExp("ddd", "giu")
}

Open online demo

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

特になし。

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

特になし。

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

特になし。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1