11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ESLint v4.1.0

Last updated at Posted at 2017-06-24

v4.0.0 | 次 v4.2.0

ESLint 4.1.0 がリリースされました。
長いことペンディングしていた機能追加 PR がマージされたり、インデント周りのバグ修正が多めです。

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

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

🚀 本体への機能追加

#3611: Glob-based configuration!!

.eslintrc.*ファイル内で、指定した Glob にマッチするファイルの設定のみ変更できるようになりました。例えば、**/*.spec.jsにテスト用のルールを追加することができます。

この機能を利用するには、以下のようにoverridesプロパティを利用します。詳細はこちら🇺🇸

.eslintrc.json
{
    "rules": {
        //...
    },
    "overrides": [
        {
            "files": ["**/*.spec.js"],
            "env": { mocha: true }
        }
    ]
}

#7348: 各ルールのfix()関数が複数のfixオブジェクトを返せるようになった

自動修正をサポートする検証ルールを作る場合、fix()関数を実装します。
このとき、fix()関数はfixオブジェクトを1つだけしか返せませんでした。v4.1.0から、複数のfixオブジェクトを返すことができるようになります。

例えば、あるノードを囲むカッコを削除するfix()関数は次のように変化します。

Before
context.report({
    node,
    message: "Unexpected parenthesized expression.",

    fix(fixer) {
        const openParen  = sourceCode.getTokenBefore(node, t => t.value === "(")
        const closeParen = sourceCode.getTokenAfter(node, t => t.value === ")")

        // インラインコメントを消さないために sourceCode.getText(node) を使えない。
        // カッコを削除したいだけだが、削除しないものに注目したコードになっている。
        const code = sourceCode.text.slice(openParen.range[1], closeParen.range[0])
        return fixer.replaceTextRange([openParen.range[0], closeParen.range[1]], code)
    }
})
After
context.report({
    node,
    message: "Unexpected parenthesized expression.",

    *fix(fixer) {
        const openParen  = sourceCode.getTokenBefore(node, t => t.value === "(")
        const closeParen = sourceCode.getTokenAfter(node, t => t.value === ")")

        // カッコを削除したいだけなので、カッコを削除する。
        yield fixer.remove(openParen)
        yield fixer.remove(closeParen)
    }
})

すっきり。

#8458: .eslintignoreファイルの内容をpackage.jsonに書けるようになった

.eslintignoreファイルは、無視するファイルを改行区切りの Glob で書くことができるファイルです。デフォルト (該当ファイルがない場合) ではnode_modules等が無視されるようになっています。この設定を (.eslintignoreファイルを作る代わりに) package.jsonファイルに含めることができるようになりました。

この機能を利用するには、以下のようにeslintIgnoreプロパティを利用します。

package.json
{
    "name": "...",
    "version": "...",
    //...
    "eslintConfig": {
        //...
    },
    "eslintIgnore": [
        "node_modules",
        "build/**/*.js",
        "dist/**/*.js"
    ]
}

#8631: Linterクラスに自動修正メソッドを追加した

ESLint の JavaScript API は主に2つのクラスで構成されています。

  • Linter ... 与えられたテキストと設定を使って Lint する。
  • CLIEngine ... Globs から対象ファイルと設定ファイルを検索して共有設定やプラグインの解決と読み込みを行い、Linter を呼び出す。

主に使われるのはCLIEngineです。
Linterはブラウザ内で使えるようにファイルシステムに依存しない処理だけを受け持っています。

今までは自動修正に関する全てのコードはCLIEngineに実装されていましたが、今回の修正で一部Linterに移動されました。オンライン デモで自動修正したいですからね。

image.png

💡 新しいルール

今回はありません。

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

#6196: no-extra-parens enforceForArrowConditionals

[no-confusing-arrow]ルールとの競合を避けるためのオプションです。
アロー関数の本文を囲むカッコを許可します。

/* eslint no-extra-parens: [error, all, { enforceForArrowConditionals: false }] */

//✔ GOOD
const b = a => 1 ? 2 : 3;
const d = c => (1 ? 2 : 3); //< このオプション無しだと警告されます

#8061: no-trailing-spaces ignoreComments

コメント内の末尾スペースを無視するオプションです。
ドキュメント ジェネレータで、コメントを Markdown として解釈している場合などに便利でしょう。

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

今回はありません。


11
9
1

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
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?