ESLint v4.12.0 has been released: https://t.co/67WAJTVfdr
— ESLint (@geteslint) November 26, 2017
ESLint 4.12.0 がリリースされました。
小さな機能追加とバグ修正が行われています。
質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。
🚀 本体への機能追加
#9321: Linter.prototype.defineParser
が追加された
ツール開発者向け。
Node.js API の Linter
クラスに defineParser
メソッドが追加されました。
const eslint = require("eslint")
const linter = new eslint.Linter()
linter.defineParser("my-custom-parser", {
parse(text, options) {
// text を解析して AST を作成する
}
})
linter.verify(text, {
// 設定で定義されたパーサーを指定できる
parser: "my-custom-parser",
rules: { /* ... */ }
})
今までは Linter
内部で動的 require
してパーサーを読み込んでいましたが、今後は defineParser
メソッドで独自のパーサーを定義できます。定義されていなかった場合は、今まで通り動的 require
します。
💡 新しいルール
#9629: implicit-arrow-linebreak
Arrow 関数の非ブロックの本体をどこに書くかを矯正するスタイル ルールです。
"beside"
で =>
の右側に、"below"
で下側に書くよう警告します。
/* eslint implicit-arrow-linebreak: [error, beside] */
//✓ GOOD
(foo) => bar;
(foo) => (bar);
(foo) => (
bar()
);
//✘ BAD
(foo) =>
bar;
(foo) =>
(bar);
(foo) =>
(
bar()
);
🔧 オプションが追加されたルール
#9506: no-restricted-imports importNames
指定したパッケージの特定のメンバーだけを利用禁止にするオプションが追加されました。
importNames
が未指定の場合は、今まで通りパッケージ全体が禁止されます。
/* eslint no-restricted-imports: [error, {name: foo, importNames: [Foo]}] */
//✓ GOOD
import {bar} from "foo";
//✘ BAD
import {Foo} from "foo";
#9594: semi beforeStatementContinuationChars
次の行が ASI ハザードが起こり得る文字で始まり、かつ ASI ハザードが起こらない場合のセミコロンの有無を矯正するためのオプションが追加されました。
ASI ハザードが起こり得る文字には [
や (
等があります。
一方で行がこれらの文字で始まっていたとしても、前の文が do-while
や import
等であった場合は ASI ハザードが発生しません。
このような場合、今まではセミコロンがあっても無くても警告していませんでした。
/* eslint semi: [error, never, {beforeStatementContinuationChars: always}] */
//✓ GOOD
do {/* 略 */} while (a)
;[1, 2, 3].forEach(doSomething)
//✘ BAD
do {/* 略 */} while (a)
[1, 2, 3].forEach(doSomething)
✒️ eslint --fix
をサポートしたルール
#9496: sort-vars (partial)
/* eslint sort-vars: error */
var a = 1,
c = 2,
b = 3
// Gets fixed to:
var a = 1,
b = 3,
c = 2
※ 初期値に変数がある場合は自動修正されません。