search
LoginSignup
5

More than 5 years have passed since last update.

posted at

updated at

ESLint v3.8.0

v3.7.0 | 次 v3.9.0

ESLint 3.8.0 がリリースされました。
いくつかの機能追加・バグ修正が行われています。

余談ですが、今回のリリース作業は私が実施しました :muscle:

質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。


:sparkles: 本体への機能追加

#7212: Node.js API の Lint 結果にソースコード全体が含まれるようになった

詳細はこちら(英語)。

主にカスタム フォーマッターの開発者向けです。

JSCS では Lint 結果で警告周辺のソースコードを表示するのですが、そのようなカスタム フォーマッターを作れるように Lint 結果にソースコード全体を格納するプロパティが追加されました。

:bulb: 新しいルール

#6065: func-name-matching

JSCS Icon JSCS 互換ルールです。

関数名が代入先の変数・プロパティの名前と一致していなかった場合に警告します。
匿名関数は常に許可されます。

/*eslint func-name-matching: error */

//✔ GOOD
var foo = function foo() {}
obj.foo = function foo() {}

//✘ BAD
var foo = function bar() {}
obj.foo = function bar() {}

:wrench: オプションが追加されたルール

#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))

:pencil: 新たに eslint --fix をサポートしたルール

#7105: curly

if等のステートメントの省略可能なブロックに関して自動修正を実施します。
ブロック内の空白や改行に関しては、別途 brace-styleblock-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行に複数の変数を宣言していた場合は改行を挿入します。
修正後のインデント・改行文字等は、別途 indentlinebreak-style ルールによって修正されます。

let a = 1, b = 2
// ↓
let a = 1,
b = 2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5