ESLint v3.5.0 released: https://t.co/fxti7JPs95
— ESLint (@geteslint) 2016年9月9日
ESLint 3.5.0 がリリースされました。
小さな機能追加といくつかのバグ修正が行われています。
現在、ECMAScript® 2017 Draft の対応が進行中です。
async/await と trailing commas in functions 構文について、構文解析器レベルでのサポートが完了し、現在各種ルールのサポート状況を改善しています。たぶん今月中には完了すると思います。
質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。
ESLint 本体への変更
#5344: 構文解析器へソースコードのファイル名が渡されるようになった
構文解析器プラグインの製作者向けです。
構文解析器プラグインの parse()
メソッドの第2引数には parserOptions
が渡されますが、この parserOptions
オブジェクトに filePath
プロパティが追加されました。
このプロパティは、解析中のソースコードのファイルへのパスが格納されています。
これにより、例えば TypeScript の構文解析器プラグインは、このファイルパスを手がかりに別ファイルにある型情報を検索できるようになります。
新しいルール
#3218: no-restricted-properties
指定した名称のプロパティ アクセスを禁止するルールです。
名称だけを手がかりにしている点に注意が必要です。
/*eslint no-restricted-properties: [error,
{object: _, property: extend},
{object: describe, property: only},
{object: foo, property: bar}
]*/
// ✘ BAD
_.extend()
describe.only()
foo.bar
#6068: prefer-numeric-literals
parseInt
による2進数・8進数・16進数の定数値を警告し、数値リテラルを使うよう促します。
/*eslint prefer-numeric-literals: error*/
// ✔ GOOD
0b111110111
0o767
0x1F7
// ✘ BAD
parseInt("111110111", 2)
parseInt("767", 8)
parseInt("1F7", 16)
あれ? 10進数は...?
#6069: lines-around-directive
ディレクティブ プロローグの前後に空白行を入れるかどうかを矯正するスタイル ルールです。
ディレクティブ プロローグとは、"use strict"
のような文字列だけの文によって構文解析の振る舞いを変更する JS 独特の構文のことです。
/*eslint lines-around-directive: error*/
// ✔ GOOD
function foo() {
"use strict"
doSomething()
}
// ✘ BAD
function foo() {
"use strict"
doSomething()
}
#6077: line-comment-position
行コメントの位置を矯正するスタイル ルールです。
オプションによって、コードの上に書くか、コードの右に書くかを指定できます。
/*eslint line-comment-position: [error, {position: above}]*/
// ✔ GOOD
doSomething()
doSomething() // ✘ BAD
/*eslint line-comment-position: [error, {position: beside}]*/
doSomething() // ✔ GOOD
// ✘ BAD
doSomething()
オプションが追加されたルール
#5805: max-len
文字列リテラル・テンプレート リテラルが存在する行を無視するオプションが追加されました。
/*eslint max-len: [error, {code: 5, ignoreStrings: true, ignoreTemplateLiterals: true}]*/
// ✔ GOOD
let a = "long string"
let b = `long template`
// ✘ BAD
doSomething()
#6052: indent
関数定義において、引数部のインデントを指定するオプションが追加されました。
最初の引数に合わせる "first"
と、固定値によるインデントが指定できます。
/*eslint indent: [error, 4, {FunctionDeclaration: {parameters: first, body: 1}}]*/
// ✔ GOOD
function foo(aaa,
bbb,
ccc) {
doSomething()
}
// ✘ BAD
function foo(aaa,
bbb,
ccc) {
doSomething()
}
/*eslint indent: [error, 4, {FunctionDeclaration: {parameters: 2, body: 1}}]*/
// ✔ GOOD
function foo(
aaa,
bbb,
ccc) {
doSomething()
}
// ✘ BAD
function foo(
aaa,
bbb,
ccc) {
doSomething()
}