React × TypeScript 環境における ESlint の設定
2021-02-01
プロジェクトを作るたびに悩まされる ESlint
ですが、ある程度これがベストかなーと思える設定ができあがってきたので備忘録がてらです。
今回の環境は Nextjs
× TypeScript
となっています。
{
"devDependencies": {
"@typescript-eslint/eslint-plugin": "4.14.1",
"@typescript-eslint/parser": "4.14.1",
"eslint": "7.18.0",
"eslint-config-prettier": "7.2.0",
"eslint-plugin-import": "2.22.1",
"eslint-plugin-jsx-a11y": "6.4.1",
"eslint-plugin-prettier": "3.3.1",
"eslint-plugin-react": "7.22.0",
"eslint-plugin-react-hooks": "4.2.0",
"eslint-plugin-sort-keys-shorthand": "2.1.0",
"eslint-watch": "7.0.0",
"prettier": "2.2.1"
},
"eslintConfig": {
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"prettier/@typescript-eslint",
"plugin:prettier/recommended",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript",
"plugin:react-hooks/recommended",
"plugin:jsx-a11y/recommended"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 2020,
// @typescript-eslint/parser の反映に必須
"project": ["./tsconfig.json"],
"sourceType": "module"
},
"plugins": [
"prettier",
"react",
"@typescript-eslint",
"import",
"sort-keys-shorthand",
"jsx-a11y"
],
"rules": {
"import/order": [
"error",
{
"alphabetize": {
"caseInsensitive": true,
"order": "asc"
}
}
],
// TODO: Nextjs の Link コンポーネント対策
"jsx-a11y/anchor-is-valid": [
"error",
{
"aspects": ["invalidHref", "preferButton"],
"components": ["Link"],
"specialLink": ["hrefLeft", "hrefRight"]
}
],
"prettier/prettier": "error",
"react/jsx-sort-props": [
"error",
{
"callbacksLast": false,
"ignoreCase": false,
"noSortAlphabetically": false,
"reservedFirst": false,
"shorthandFirst": false,
"shorthandLast": false
}
],
"sort-keys-shorthand/sort-keys-shorthand": [
"error",
"asc",
{
"caseSensitive": true,
"natural": true,
"shorthand": "first"
}
]
},
"settings": {
"import/resolver": {
"node": {
"paths": ["src"]
}
},
"react": {
"version": "detect"
}
}
},
"scripts": {
"lint": "eslint . --ext .ts,.tsx --fix"
}
}
個人的には eslint-config-airbnb-typescript
も使用したいところなのですが、うまく設定できず断念気味です。
ルールとしてはもう少しきつめにしたほうが良いかな?という印象です。
Prettier
のフォーマットがなんだかんだでめちゃくちゃ強いので ESLint
側に組み込む形にしてあります。
フォーマットは ESLint
で行うようにしています Pritter
でやったらどうなるんですかね?
stylelint
もついでに備忘録がてら…ただ、こっちはまだまだ試行錯誤中です。
こちらの環境は Nextjs(CSS Modules)
× SCSS
となっています。
{
"devDependencies": {
"stylelint": "13.9.0",
"stylelint-config-css-modules": "2.2.0",
"stylelint-config-recommended-scss": "4.2.0",
"stylelint-config-sass-guidelines": "7.1.0",
"stylelint-scss": "3.18.0"
},
"scripts": {
"lint:style": "stylelint '**/*.scss' --fix"
},
"stylelint": {
"extends": [
"stylelint-config-sass-guidelines",
"stylelint-config-recommended-scss",
"stylelint-config-css-modules"
],
"plugins": ["stylelint-scss"],
"rules": {
"at-rule-no-unknown": [
true,
{
"ignoreAtRules": ["include"]
}
],
"selector-class-pattern": null
}
}
}
stylelint-config-recommended-scss
はいらないのかもなーというのと selector-class-pattern
の回避方法がわかっていません、誰か教えて!