Help us understand the problem. What is going on with this article?

ESLint v3.6.0

More than 3 years have passed since last update.

v3.5.0 | 次 v3.7.0

ESLint 3.6.0 がリリースされました。

今回のリリースで ECMAScript® 2017 Draft の一部をサポートしました!
これにより、babel-eslintを利用しなくても async/await や関数関連の末尾カンマを利用できるようになります。
これらの新しい言語機能を利用する場合は、

.eslintrc.json
{
    "parserOptions": {
        "ecmaVersion": 2017
    }
}

と設定します。

今後も Stage 4 (finished) に到達した言語機能から順にサポートしていきます。

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


:sparkles: ES2017 サポートのために修正されたルール

ES2017 の新しい構文をサポートするために、以下のルールが修正されました。
この他にも ES2017 の新しい構文の周りで誤検知・見逃しをするルールがあるかもしれません。もしも見つけた場合はご一報頂けると幸いです。

#7172: array-callback-return

配列メソッドのコールバックとして async 関数が使われた場合、戻り値が無くとも警告しないように修正されました。

/*eslint array-callback-return:error*/

//✔ GOOD
Promise.all(list.map(async x => { await doSomething(x) })

従来は「戻り値が必要だ」と警告されていました。

#7173: prefer-arrow-callback

eslint --fixasync 関数を正しく扱えなかったので修正されました。

#7174: space-unary-ops

await 式の await 文脈キーワードと後続する式との間のスペースをチェックするようになりました。

/*eslint space-unary-ops:error*/

async function wrap() {

    //✔ GOOD
    await [1,2,3].reduce(doSomething)

    //✘ BAD
    await[1,2,3].reduce(doSomething)
}

#7175: no-unused-expressions

await 式を副作用のない式だと誤検出していた不具合が修正されました。

#7176: arrow-parens

async アロー関数で正しく動作していなかった不具合が修正されました。

#7178: no-extra-parens

await 式関連の演算子結合度を正しく判定できるようになりました。
ちなみに、await 演算子の結合度は単項演算子と同じです。
よく似ている yield 演算子とは完全に異なるのでご留意ください。

#7179: keyword-spacing

asyncawait 文脈キーワードの前にある空白をチェックするようになりました。

:bulb: 新しいルール

今回はありません。

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

#6938: eol-last

ファイル末尾に空行が無いと警告する always オプションと、ファイル末尾に空行があると警告する never オプションが追加されました。デフォルトは always (既存の動作) です。

また、既存の2つのオプション windowslinux は非推奨になりました。
改行文字を指定する場合は linebreak-style ルールを利用してください。

表現が難しいので例示は割愛。

#7085: class-methods-use-this

特定の名称のメソッドではthisを使用しない事を許可できるようになりました。

/*eslint class-methods-use-this: [error, {exceptMethods: [foo]}]*/

// ✔ GOOD
class A {
    foo() {
    }
    bar() {
        this.foo()
    }
}

// ✘ BAD
class A {
    bar() {
    }
}

#7137: no-restricted-properties

以下の2つが新たにできるようになりました。

  • 指定した名称の変数での全プロパティアクセスを禁止する
  • あらゆる変数での指定プロパティアクセスを禁止する

従来は変数名とプロパティ名を両方指定する必要があったため、用途が限定されていました。

/*eslint no-restricted-properties: [
    error,
    {object: require},
    {property: __defineGetter__},
    {property: __defineSetter__}
]*/

// ✔ GOOD
require("a")
obj

// ✘ BAD
require.resolve
require.cache
require.extensions
obj.__defineGetter__
a.__defineGetter__
b.__defineSetter__

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

#6668: strict

自動修正では余分な "use strict" を削除します。

function foo() {
    "use strict"
    "use strict"
}
// ↓
function foo() {
    "use strict"
}

残念ながら追加はしてくれません。
Strict モードが切り替わると既存のコードが構文エラーになる可能性があるためです。

#6978: prefer-template

文字列と式との連結をテンプレートに変換します。

let b = "hello, " + name + "!"
// ↓
let b = `hello, ${  name  }!`

連結演算子 + の周囲の空白・コメントは維持されます。
修正後の空白は、template-curly-spacing ルールや no-multi-spaces ルールが有効になっていれば、それらの自動修正が好み通りに整えてくれるでしょう。

#6996: quote-props

プロパティ名を囲むクォートが必要ならば追加し、不要ならば削除します。
追加時のクォートの種類は別途 quotes ルールが決定します。

let obj = {"a": 1, b: 2}
// ↓
let obj = {a: 1, b: 2}

#7113: no-regex-spaces

正規表現内の連続した空白を繰り返し表現に修正します。

let s = /    /
// ↓
let s = / {4}/
mysticatea
ESLint のメンテナ。Vue.js の開発チームメンバー。JavaScript 言語仕様書 ECMA-262 や JavaScript 構文解析器 Acorn のコントリビューター。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away