LoginSignup
25
23

More than 5 years have passed since last update.

Node.js Advent Calendar 2015の7日目の記事です。遅刻してごめんなさいごめんなさい。

sinopiaをs3対応して記事を書こうと思ったのですが、思ったより手こずってしまい、ESLintの2系のalpha版が出たので、そちらについて調べました。

ESLint v2.0.0-alpha-1 released

新しいルール

下記のルールが新しく追加される。

マイグレーションが必要そうなところ

Migrating to v2.0.0

設定ファイル

.eslintrcpackage.jsoneslintConfigフィールドの両方がある場合、現状は両方の設定がマージされ適用されるが、2.0.0からは.eslintrc.*が存在する場合はpackage.jsoneslintCofigフィールドは無視される。

.eslintrc.*package.jsoneslintConfigフィールドが併用されている環境がある場合は、どちらかに寄せよう。

組み込みのグローバル変数

2.0.0以前はES6の機能であるPromise, Map, Set, Symbolが何も設定しなくてもグローバル変数と認識されており、ES5の環境で上記の機能が使えない場合にも、no-undefルール等でエラーとして認識されないという問題があった。

$ eslint -v
v1.10.3

$  cat .eslintrc.json
{
  "extends": "eslint:recommended"
}

$ cat index.js
'use strict';
// Promiseを使ったコード
new Promise(function (resolve) {
  resolve(10000);
});

$ eslint index.js

# 何もエラーが出ない

2.0.0からは、明示的にenv: { es6: true }を設定しないとエラーになった。

$ eslint -v
v2.0.0-alpha-1

$  cat .eslintrc.json
{
  "extends": "eslint:recommended"
}

$ cat index.js
'use strict';
// Promiseを使ったコード
new Promise(function (resolve) {
  resolve(10000);
});

$  eslint index.js

/Users/pirosikick/src/github.com/pirosikick/eslint-next-playground/next/index.js
  2:5  error  "Promise" is not defined  no-undef

✖ 1 problem (1 error, 0 warnings)

# env: { es6: true }を追加
$  cat .eslintrc.json
{
  "env": {
    "es6": true
  },
  "extends": "eslint:recommended"
}

$ eslint index.js

# 何もエラーが出ない

ecmaFeaturesオプション

2.0.0からecmaFeaturesオプションのES6系のフラグ(arrowFunctionsblockBindingsなど。modules, jsx, experimentalObjectRestSpread以外)は廃止になって、代わりにparserOptions.ecmaVersionオプションに6を設定するとES6系のフラグを全部trueにしたのと同じになる。

.eslintrc.js
module.exports = {
  parserOptions: {
    // 3, 5 ,6が設定可能で、デフォルトは5
    ecmaVersion: 6
  }
};

ecmaFeaturesmodulesフラグは廃止になり、parserOptions.souceType"module"を設定すると同じ設定になる。

.eslintrc.js
module.exports = {
  parserOptions: {
    // "script"と"module"が設定可能で、デフォルトは"script"
    sourceType: "module"
  }
};

ecmaFeaturesjsxフラグとexperimentalObjectRestSpreadフラグはparserOptions.ecmaFeaturesに設定する。

.eslintrc.js
module.exports = {
  parserOptions: {
    ecmaFeatures: {
      jsx: true,
      experimentalObjectRestSpread: true
    }
  }
};

ルール開発周りのSchemaの修正とCode Path Analysisについては、もうちょっと調べて書きます。

25
23
0

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
  3. You can use dark theme
What you can do with signing up
25
23