ESLint v3.10.0 has been released: https://t.co/DPn3VFGVvF
— ESLint (@geteslint) 2016年11月11日
ESLint 3.10.0 がリリースされました。
いくつかの機能追加・バグ修正が行われています。
マイナーバージョンが2桁になると、次のメジャーバージョンが近いなぁって思えますね (隔週リリースで6ヶ月間あると12前後まで上がる)。
4.0.0 は年明け早々に出るんじゃないかと思っています。
質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。
新しいルール
#7537: no-return-await
安全に削除できる (冗長な) await
文を禁止するルールです。
async
関数では戻り値のPromise
が自動的に unwrap されるため、return
文の中でawait
式を使う必要はありません。
/*eslint no-useless-return: error */
//✔ GOOD
async function foo() {
return doSomething()
}
async () => doSomething()
//✘ BAD
async function foo() {
return await doSomething()
}
async () => await doSomething()
オプションが追加されたルール
#6963: no-restricted-imports and no-restricted-modules
.gitignore と同様のパターン表現で禁止するモジュールを指定できるようになりました。
/*eslint no-restricted-modules: [error, {patterns: ["foo/*"]}] */
//✔ GOOD
const abc = require("abc")
const foo = require("foo")
//✘ BAD
const bar = require("foo/bar")
#7235: func-names
「自動的に関数名が決まらない場合には明示的に関数名を書け」というオプションが追加されました。
自動的に関数名が決まるのは、変数への代入やオブジェクトリテラルの中などです。
Dr. Axel の解説が詳しいです: http://www.2ality.com/2015/09/function-names-es6.html
/*eslint func-names: [error, as-needed] */
//✔ GOOD
const aaa = function() {}
bbb = function() {}
const obj = {
ccc: function() {}
}
obj.ddd = function ddd() {}
foo(function eee() {})
;(function fff() { })()
//✘ BAD
obj.ddd = function() {}
foo(function() {})
;(function() { })()
#7470: comma-style
カンマを行末に書くか、行頭に書くかを指定するスタイル ルールにおいて、チェックする場所を増やすオプションが追加されました。
従来は、変数宣言・オブジェクトリテラル・配列リテラルの3箇所をチェックしていましたが、オプションによって次の場所をチェックすることができるようになります。
- Destructring のオブジェクトパターン
- Destructring の配列パターン
- 関数宣言の仮引数
- 関数呼び出しの実引数
-
import
文
あれ、
export
文がない...
現時点ではオプションによる指定が必要ですが、4.0.0 でデフォルト有効になる予定です。
/*eslint comma-style: [error, last, {exceptions: {
ArrayPattern: false,
ArrowFunctionExpression: false,
CallExpression: false,
FunctionDeclaration: false,
FunctionExpression: false,
ImportDeclaration: false,
ObjectPattern: false
}}] */
//✔ GOOD
const {
a,
b
} = obj
const [
a,
b
] = list
function foo(
a,
b
) {}
//✘ BAD
const {
a
, b
} = obj
const [
a
, b
] = list
function foo(
a
, b
) {}
#7518: require-jsdoc
JSDoc コメントが書かれていない Arrow 関数を警告するオプションが追加されました。
/*eslint require-jsdoc: [error, {require: {ArrowFunctionExpression: true}}] */
//✔ GOOD
/**
* @returns {number} 10
*/
const foo = () => {
return 10
}
// 変数へ代入されない場合は無視します
foo(() => 10)
//✘ BAD
const foo = () => {
return 10
}
eslint --fix
をサポートしたルール
#7387: no-extra-boolean-cast
if (!!foo);
if (Boolean(bar));
Boolean(!!baz);
// ↓↓↓
if (foo);
if (bar);
Boolean(baz);
#7389: eqeqeq
確実にコードの意味を変更しない場合だけ自動修正します。
つまり、==
演算子の左右の値の型が判明していて、かつ等しい場合です。
typeof foo == 'bar'
1 == 1
// ↓↓↓
typeof foo === 'bar'
1 === 1