ESLint v3.17.0 released: https://t.co/JlIqv894Jc
— ESLint (@geteslint) 2017年3月3日
ESLint 3.17.0 がリリースされました。
いくつかの機能追加・バグ修正が行われています。
質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。
✨ 本体の変更
#7837: RuleTester
の警告メッセージ検証で正規表現が使えるようになった
プラグイン・カスタム ルール開発者向けです。
ルールのユニットテストでは、出力される警告メッセージが妥当かどうかを、固定文字列との比較によって検査しています。
tester.run("eqeqeq", eqeqeq, {
valid: [
{
code: "foo === bar"
}
],
invalid: [
{
code: "foo == bar",
errors: ["Expected '===' and instead saw '=='."]
}
]
})
大半のケースではこれで十分なのですが、ファイルパスが警告メッセージに含まれる場合にテストが書きにくいという問題があります。
今回これを解決するために、正規表現でも警告メッセージを検査できるようになりました。
tester.run("eqeqeq", eqeqeq, {
invalid: [
{
code: "foo == bar",
errors: [/^Expected '===' and instead saw '=='\.$/]
}
]
})
#8073: AST ノード・トークンの位置情報に関する API を追加
プラグイン・カスタム ルール開発者向けです。
AST ノードの位置情報には2種類あります。1つは行番号・列番号で、もう1つはソースコードを文字配列にした時の添字です。ESLint では、目的に応じてこの2つの位置情報を使い分けています。
で。まれにこれらの位置情報を相互変換したいことがあったため、相互変換のための API が追加されました。
class SourceCode {
// Converts a character index in a source file into a line, column pair
getLocationFromRangeIndex(index: number): { line: number, column: number }
// Converts a line, column pair into a character index in a file
getRangeIndexFromLocation(loc: { line: number, column: number }): number
}
#8157: RuleTester
の自動修正に関するテストの改善
プラグイン・カスタム ルール開発者向けです。
自動修正をサポートするルールも、自動修正を実施しないケースがあります。
例えば、自動修正を適用すると開発者が書いたコメント (//FIXME: hoge!
等) を消してしまう場合などは、自動修正を実施しません。
ユニットテストでは、入力コードと出力コードをまったく同じにすることで表現していました。
tester.run("no-unused-labels", rule, {
invalid: [
{
code: "A: var foo = 0;",
output: "var foo = 0;",
errors: ["'A:' is defined but never used."]
},
{
code: "A: /* comment */ foo",
output: "A: /* comment */ foo",
errors: ["'A:' is defined but never used."]
},
]
})
今回、出力コードを null
にした場合は自動修正しないと見做すようになりました。より DRY にテストを書けるようになります。
tester.run("no-unused-labels", rule, {
invalid: [
{
code: "A: var foo = 0;",
output: "var foo = 0;",
errors: ["'A:' is defined but never used."]
},
{
code: "A: /* comment */ foo",
output: null,
errors: ["'A:' is defined but never used."]
},
]
})
💡 新しいルール
#6067: nonblock-statement-body-position
本文がブロックではない制御構文 (if
等) について、本文を書く位置を矯正するスタイル・ルールです。
オプションによって、右側・下側を指定することができます。
/*eslint nonblock-statement-body-position: [error, beside] */
//✘ BAD
if (foo)
bar();
else
baz();
//✔ GOOD
if (foo) bar();
else baz();
/*eslint nonblock-statement-body-position: [error, below] */
//✘ BAD
if (foo) bar();
else baz();
//✔ GOOD
if (foo)
bar();
else
baz();
#8091: no-compare-neg-zero
-0
(マイナス ゼロ) との比較を警告するルールです。
JavaScript では、-0
と+0
を比較すると等価として扱われますが、一部の演算は異なる結果になります。大半のケースでは問題ありませんが、まれに-0
を識別したいことがあるようです。そんな時にx === -0
等と比較すると、-0
と+0
を区別できません。代わりにObject.is(x, -0)
を使う必要があります。
/*eslint no-compare-neg-zero: error */
//✘ BAD
x === -0
y !== -0
//✔ GOOD
x === 0
Object.is(x, -0)
🔧 オプションが追加されたルール
#4345: lines-around-comment (ignorePattern
)
特定のコメントには周囲の改行をチェックしないよう無視するオプションが追加されました。
デフォルトでは /*eslint eqeqeq: error */
等のコメントが無視リストに含まれます。
✒️ eslint --fix
をサポートしたルール
今回はありません。