ESLint v3.8.0 has been released: https://t.co/C8UHeUm33M
— ESLint (@geteslint) 2016年10月14日
ESLint 3.8.0 がリリースされました。
いくつかの機能追加・バグ修正が行われています。
余談ですが、今回のリリース作業は私が実施しました
質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。
本体への機能追加
#7212: Node.js API の Lint 結果にソースコード全体が含まれるようになった
詳細はこちら(英語)。
主にカスタム フォーマッターの開発者向けです。
JSCS では Lint 結果で警告周辺のソースコードを表示するのですが、そのようなカスタム フォーマッターを作れるように Lint 結果にソースコード全体を格納するプロパティが追加されました。
新しいルール
#6065: func-name-matching
関数名が代入先の変数・プロパティの名前と一致していなかった場合に警告します。
匿名関数は常に許可されます。
/*eslint func-name-matching: error */
//✔ GOOD
var foo = function foo() {}
obj.foo = function foo() {}
//✘ BAD
var foo = function bar() {}
obj.foo = function bar() {}
オプションが追加されたルール
#7101: comma-dangle
関数定義と関数呼び出しの末尾カンマを扱うオプションが追加されました。
構文の種類ごとに設定する必要があります。
/*eslint comma-dangle: [error, {
arrays: always-multiline,
objects: always-multiline,
imports: always-multiline,
exports: always-multiline,
functions: always-multiline
}] */
//✔ GOOD
function foo(a, b) {}
function foo(
a,
b,
) {}
foo(a, b)
foo(
a,
b,
)
//✘ BAD
function foo(a, b,) {}
function foo(
a,
b
) {}
foo(a, b,)
foo(
a,
b
)
#7101: space-before-function-paren
非同期アロー関数のためのオプションが追加されました。
/*eslint space-before-function-paren: [error, {asyncArrow: always}] */
//✔ GOOD
async (a) => await doSomething(a)
//✘ BAD
async(a) => await doSomething(a)
#7212: wrap-iife
関数呼び出しに加えて .call
/.apply
メソッド呼び出しされる関数式も「即座に呼び出される関数式 (Immediately-Invoked Function Expression; IIFE)」として扱うオプションが追加されました。
/*eslint wrap-iife: [error, inside, {functionPrototypeMethods: true}] */
//✔ GOOD
(function() {
doSomething()
}).call(obj)
//✘ BAD
(function() {
doSomething()
}.call(obj))
新たに eslint --fix をサポートしたルール
#7105: curly
if
等のステートメントの省略可能なブロックに関して自動修正を実施します。
ブロック内の空白や改行に関しては、別途 brace-style や block-spacing ルールによって修正されます。
if (a) doSomething()
// ↓
if (a) {doSomething()}
if (a) {
doSomething()
}
// ↓
if (a)
doSomething()
この自動修正によってブロックを自動削除するとき、セミコロンが無いことによって文の意味が変わってしまう場合は自動修正を中止します。手動で修正してください。
#7202: no-lonely-if
else
ブロックの中身がif
文1つだけだった場合に、そのelse
ブロックのカッコを削除します。
修正後のインデント等は、別途 indent ルールによって修正されます。
if (a) {
doSomething()
} else {
if (b) {
doSomething2()
}
}
// ↓
if (a) {
doSomething()
} else if (b) {
doSomething2()
}
#7236: no-extra-bind
不要な.bind(this)
を削除します。
foo(function() {
doSomething()
}.bind(this))
// ↓
foo(function() {
doSomething()
})
#7283: prefer-spread
スプレッド演算子が利用できる場合は自動修正します。
foo.apply(null, args)
obj.foo.apply(obj, args)
// ↓
foo(...args)
obj.foo(...args)
#7295: one-var-declaration-per-line
1つの変数宣言式が、1行に複数の変数を宣言していた場合は改行を挿入します。
修正後のインデント・改行文字等は、別途 indent や linebreak-style ルールによって修正されます。
let a = 1, b = 2
// ↓
let a = 1,
b = 2