ESLint v2.11.0 released: https://t.co/dlMpn7Btly
— ESLint (@geteslint) 2016年5月27日
いくつかのバグ修正・ルール追加・機能改善が行われました。
JSCS からのルール移植を実施中です。進捗は GitHub の JSCS Compatibility マイルストーンを参照してください。
質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。
URI | |
---|---|
日本語 Issue 管理リポジトリ | https://github.com/eslint/eslint-jp |
日本語チャット | https://gitter.im/eslint/eslint-jp |
本家 Issue 管理リポジトリ | https://github.com/eslint/eslint |
本家チャット | https://gitter.im/eslint/eslint |
新しいルール
#2693: no-prototype-builtins
hasOwnProperty
等のプロパティのメタ情報を取得するメソッドを、メソッドとして利用すると警告するルールです。
これらは Object.create(null)
と併用する場合が多く、Object.create(null)
で作成したオブジェクトは一切メソッドを持っていないため、TypeError
の原因になります。
/*eslint no-prototype-builtins: "error"*/
// ✔ GOOD
Object.hasOwnProperty.call(obj, "prop")
// ✘ BAD
obj.hasOwnProperty("prop")
#5502: unicode-bom
eslint --fix
をサポートしています。
Unicode Byte Order Mark の有無を矯正するルールです。
オプションによって、BOM があったら警告するか、無かったら警告するかを選択できます。
#6058: no-useless-rename
eslint --fix
をサポートしています。
Destructuring や Import/Export の無意味な名称変更構文を警告します。
/*eslint no-useless-rename: "error"*/
// ✔ GOOD
let {foo} = obj;
import {foo} from "foo";
export {foo};
export {foo} from "foo";
let {foo: bar} = obj;
import * as foo from "foo";
import {foo as bar} from "foo";
export {foo as bar};
export {foo as bar} from "foo";
// ✘ BAD
let {foo: foo} = obj;
import {foo as foo} from "foo";
export {foo as foo};
export {foo as foo} from "foo";
オプションが追加されたルール
#5477: no-constant-condition
ループ文の条件式に定数を許可するオプションが追加されました。
無限ループを頻繁に書く人向けです。
/*eslint no-constant-condition: ["error", {"checkLoops": false}]*/
// ✔ GOOD
while (true) {
doSomething();
if (condition()) {
break;
}
};
#6026: consistent-return
一貫した return
文を矯正するルールです。
値を返すならすべての実行パスで値を返す、値を返さないならすべての実行パスで値を返さない、ということをチェックします。
今回追加されたのは、return void 0
のような「必ず undefined
を返す return
文」を「値を返さない return
文」として扱うオプションです。
/*eslint consistent-return: ["error", {"treatUndefinedAsUnspecified": true}]*/
// ✔ GOOD
function foo(callback) {
if (callback) {
return void callback();
}
}
function foo(callback) {
if (callback) {
return callback();
}
return 0;
}
// ✘ BAD
function foo(callback) {
if (callback) {
return callback();
}
// ERROR: 値を返さない実行パスがあります
}
サンプルコードのように、もともとは「コールバック関数を呼び出して即座に return
するコードを短く書きたい」という要求から議論が始まりました。何度か提案が棄却された後、紆余曲折あって今の形に収まった感じです。