eslint:recommendedとは
ESLintの推奨ルールがセットになったもの。
ESLint Rulesのページ内でチェックが付いたものが該当する。
現在のESLintはルールが多いので0から手動ですべて設定するのは好ましくない。
ESLint Rules
http://eslint.org/docs/rules/
eslint:allとは
ESLint Rulesのルールがすべて適用される。
ESLintは以前と比べてルールが多くなっており、eslint:recommendedを指定してもあったほうが良いルールが含まれていないことが多くなってきている。
ESLintのインストールなどの詳細は以前の記事をご参照ください。
eslint:recommendedのデメリット
eslint:recommendedを使用すれば基本的なルールがひと通り適用されるので楽だが、eslint:recommendedにあったほうが良いルールが含まれていないことがあるため、eslint:recommendedだと検出してほしいコードがエラーにならないデメリットがある。
例えばno-dupe-argsはeslint:recommendedに含まれているがno-dupe-else-ifは含まれていないため、どちらも変数の重複に関するものだが後者はeslint:recommendedでは検出されない。
const a = 1 const b = 2 // エラーになる const add = (n, m, n) => console.log(n + m + n) add(a, b, a) // no-dupe-else-ifのエラーにならない if (a) { console.log(a) } else if (b) { console.log(b) } else if (b) { console.log(b) }
またeslint:recommendedを使用した場合はルールを追加していくことになるため、自身が把握していないルールは追加されず使用されることがない。
eslint:allであればすべてのルールが含まれているため、自身が適用しないもの下記のようにoffにしなければ必ずルールが適用される。
env: browser: true es6: true extends: 'eslint:all' globals: Atomics: readonly SharedArrayBuffer: readonly parserOptions: ecmaVersion: 2018 sourceType: module rules: indent: - error - 2 linebreak-style: - error - unix quotes: - error - single semi: - error - never id-length: - off one-var: - off no-magic-numbers: - off no-plusplus: - off function-call-argument-newline: - off dot-location: - off padded-blocks: - off arrow-parens: - off no-unused-expressions: - off no-ternary: - off multiline-ternary: - off no-mixed-operators: - off no-extra-parens: - off capitalized-comments: - off array-element-newline: - off array-bracket-newline: - off comma-dangle: - off require-unicode-regexp: - off
自身でoffにしていくため、どのようなルールが存在するか確認する機会を創出できる。
そのためiwb.jpではeslint:allを推奨している。
rulesの重複はエラーになる
.eslintrc.ymlのrulesで重複があると無視やうしろの設定が読み込まれるのではなくエラーになってESLintが機能しない。
rules: id-length: - off one-var: - off id-length: - off
.eslintrc.ymlでoffの設定を追記する際は以下のようなシェルスクリプトを作成して追記すれば重複の心配はなくなるのでオススメ。
#!/bin/sh if [ "`cat ./.eslintrc.yml | grep -E \\\\s\{2\}$1:`" ]; then echo "$1は設定済み"; elif [ -z "$1" ]; then echo "文字列が空です"; elif [[ ! $1 =~ ^[a-z-]+$ ]]; then echo "使用不可の文字列が含まれています"; else echo " $1:"$'\n'" - off" >> .eslintrc.yml fi
$ ./s.sh one-var one-varは設定済み