ESLint v3.5.0

前 [v3.4.0] | 次 [v3.6.0]

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">ESLint v3.5.0 released: <a href="https://t.co/fxti7JPs95">https://t.co/fxti7JPs95</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/774343141021380612">2016年9月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

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

現在、ECMAScript® 2017 Draft の対応が進行中です。
async/await と trailing commas in functions 構文について、構文解析器レベルでのサポートが完了し、現在各種ルールのサポート状況を改善しています。たぶん今月中には完了すると思います。

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

- :globe_with_meridians: [日本語 Issue 管理リポジトリ](https://github.com/eslint/eslint-jp)
- :speech_balloon: [日本語サポート チャット](https://gitter.im/eslint/eslint-jp)
- :globe_with_meridians: [本家リポジトリ](https://github.com/eslint/eslint)
- :speech_balloon: [本家サポート チャット](https://gitter.im/eslint/eslint)

----

# :sparkles: ESLint 本体への変更

## [#5344]: 構文解析器へソースコードのファイル名が渡されるようになった

構文解析器プラグインの製作者向けです。

構文解析器プラグインの `parse()` メソッドの第2引数には `parserOptions` が渡されますが、この `parserOptions` オブジェクトに `filePath` プロパティが追加されました。
このプロパティは、解析中のソースコードのファイルへのパスが格納されています。

これにより、例えば TypeScript の構文解析器プラグインは、このファイルパスを手がかりに別ファイルにある型情報を検索できるようになります。

# :bulb: 新しいルール

## [#3218]: [no-restricted-properties]

指定した名称のプロパティ アクセスを禁止するルールです。
名称だけを手がかりにしている点に注意が必要です。

```js:例
/*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]

![JSCS](http://jscs.info/favicon.ico) JSCS 互換ルールです。

`parseInt` による2進数・8進数・16進数の定数値を警告し、数値リテラルを使うよう促します。

```js:例
/*eslint prefer-numeric-literals: error*/

// ✔ GOOD
0b111110111
0o767
0x1F7

// ✘ BAD
parseInt("111110111", 2)
parseInt("767", 8)
parseInt("1F7", 16)
```

> あれ? 10進数は...?

## [#6069]: [lines-around-directive]

![JSCS](http://jscs.info/favicon.ico) JSCS 互換ルールです。

ディレクティブ プロローグの前後に空白行を入れるかどうかを矯正するスタイル ルールです。
ディレクティブ プロローグとは、`"use strict"` のような文字列だけの文によって構文解析の振る舞いを変更する JS 独特の構文のことです。

```js:例
/*eslint lines-around-directive: error*/

// ✔ GOOD
function foo() {
    "use strict"

    doSomething()
}

// ✘ BAD
function foo() {
    "use strict"
    doSomething()
}
```

## [#6077]: [line-comment-position]

![JSCS](http://jscs.info/favicon.ico) JSCS 互換ルールです。

行コメントの位置を矯正するスタイル ルールです。
オプションによって、コードの上に書くか、コードの右に書くかを指定できます。

```js:例(上)
/*eslint line-comment-position: [error, {position: above}]*/

// ✔ GOOD
doSomething()


doSomething() // ✘ BAD
```

```js:例(右)
/*eslint line-comment-position: [error, {position: beside}]*/

doSomething() // ✔ GOOD

// ✘ BAD
doSomething()
```

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

## [#5805]: [max-len]

文字列リテラル・テンプレート リテラルが存在する行を無視するオプションが追加されました。

```js:例
/*eslint max-len: [error, {code: 5, ignoreStrings: true, ignoreTemplateLiterals: true}]*/

// ✔ GOOD
let a = "long string"
let b = `long template`

// ✘ BAD
doSomething()
```

## [#6052]: [indent]

![JSCS](http://jscs.info/favicon.ico) JSCS 互換オプションです。

関数定義において、引数部のインデントを指定するオプションが追加されました。
最初の引数に合わせる `"first"` と、固定値によるインデントが指定できます。

```js:例(first)
/*eslint indent: [error, 4, {FunctionDeclaration: {parameters: first, body: 1}}]*/

// ✔ GOOD
function foo(aaa,
             bbb,
             ccc) {
    doSomething()
}

// ✘ BAD
function foo(aaa,
    bbb,
    ccc) {
    doSomething()
}
```

```js:例(2)
/*eslint indent: [error, 4, {FunctionDeclaration: {parameters: 2, body: 1}}]*/

// ✔ GOOD
function foo(
        aaa,
        bbb,
        ccc) {
    doSomething()
}

// ✘ BAD
function foo(
    aaa,
    bbb,
    ccc) {
    doSomething()
}
```

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

## [#5958]: [newline-before-return]
## [#6941]: [comma-style]
## [#6994]: [new-parens]
## [#7002]: [prefer-arrow-callback]
## [#7013]: [wrap-regex]
## [#7014]: [dot-notation]
## [#7056]: [no-implicit-coercion]
## [#7070]: [no-floating-decimal]

[v3.4.0]: http://qiita.com/mysticatea/items/4fe399cf0a1d675b6172
[v3.6.0]: http://qiita.com/mysticatea/items/9fd48f9ac3faac578c62
[#3218]: https://github.com/eslint/eslint/issues/3218
[#5344]: https://github.com/eslint/eslint/issues/5344
[#5805]: https://github.com/eslint/eslint/issues/5805
[#5958]: https://github.com/eslint/eslint/issues/5958
[#6052]: https://github.com/eslint/eslint/issues/6052
[#6068]: https://github.com/eslint/eslint/issues/6068
[#6069]: https://github.com/eslint/eslint/issues/6069
[#6077]: https://github.com/eslint/eslint/issues/6077
[#6941]: https://github.com/eslint/eslint/issues/6941
[#6994]: https://github.com/eslint/eslint/issues/6994
[#7002]: https://github.com/eslint/eslint/issues/7002
[#7013]: https://github.com/eslint/eslint/issues/7013
[#7014]: https://github.com/eslint/eslint/issues/7014
[#7056]: https://github.com/eslint/eslint/issues/7056
[#7070]: https://github.com/eslint/eslint/issues/7070
[no-restricted-properties]: http://eslint.org/docs/rules/no-restricted-properties
[prefer-numeric-literals]: http://eslint.org/docs/rules/prefer-numeric-literals
[lines-around-directive]: http://eslint.org/docs/rules/lines-around-directive
[line-comment-position]: http://eslint.org/docs/rules/line-comment-position
[max-len]: http://eslint.org/docs/rules/max-len
[indent]: http://eslint.org/docs/rules/indent
[newline-before-return]: http://eslint.org/docs/rules/newline-before-return
[comma-style]: http://eslint.org/docs/rules/comma-style
[new-parens]: http://eslint.org/docs/rules/new-parens
[prefer-arrow-callback]: http://eslint.org/docs/rules/prefer-arrow-callback
[wrap-regex]: http://eslint.org/docs/rules/wrap-regex
[dot-notation]: http://eslint.org/docs/rules/dot-notation
[no-implicit-coercion]: http://eslint.org/docs/rules/no-implicit-coercion
[no-floating-decimal]: http://eslint.org/docs/rules/no-floating-decimal