ESLint v4.1.0 has been released: https://t.co/rpWjkpy4Yn
— ESLint (@geteslint) 2017年6月24日
ESLint 4.1.0 がリリースされました。
長いことペンディングしていた機能追加 PR がマージされたり、インデント周りのバグ修正が多めです。
質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。
🚀 本体への機能追加
#3611: Glob-based configuration!!
.eslintrc.*
ファイル内で、指定した Glob にマッチするファイルの設定のみ変更できるようになりました。例えば、**/*.spec.js
にテスト用のルールを追加することができます。
この機能を利用するには、以下のようにoverrides
プロパティを利用します。詳細はこちら🇺🇸
{
"rules": {
//...
},
"overrides": [
{
"files": ["**/*.spec.js"],
"env": { mocha: true }
}
]
}
#7348: 各ルールのfix()
関数が複数のfix
オブジェクトを返せるようになった
自動修正をサポートする検証ルールを作る場合、fix()
関数を実装します。
このとき、fix()
関数はfix
オブジェクトを1つだけしか返せませんでした。v4.1.0
から、複数のfix
オブジェクトを返すことができるようになります。
例えば、あるノードを囲むカッコを削除するfix()
関数は次のように変化します。
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)
}
})
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
プロパティを利用します。
{
"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
に移動されました。オンライン デモで自動修正したいですからね。
💡 新しいルール
今回はありません。
🔧 オプションが追加されたルール
#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
をサポートしたルール
今回はありません。