Expo + ESLint でimportの自動追加、削除、Hooksの警告を出す

ESLint の最新の構成を追い続けるのが本質とズレてる気がしてずっと VS Code のデフォルト設定の自動修正とリント機能だけ使ってきたが、import の自動追加、削除と Hooks のルールだけ追加したら快適になったので設定方法のメモ。

モジュールのインストール

npm install -D eslint prettier eslint-config-universe eslint-plugin-react-hooks eslint-plugin-unused-imports

.eslintrc.js の設置

/* eslint-env node */

module.exports = {
  root: true,
  extends: ["universe/native"],
  plugins: ["unused-imports", "react-hooks"],
  rules: {
    "unused-imports/no-unused-imports": "warn",
    "react-hooks/rules-of-hooks": "error",
    "react-hooks/exhaustive-deps": "warn",
  },
};

.prettierrc の設置

{}

空のデフォルト設定のままだが、このファイルがないと ESLint と Prettier で競合するため追加

.eslintignore の設置

/.expo
node_modules
expo-env.d.ts

ESLint の高速化と expo-env.d.ts で自動で英字が挿入されて毎回 lint に引っかかるので除外

.vscode/settings.json の設置

{
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": [
    "source.addMissingImports",
    "source.fixAll.eslint"
  ]
}

ここまでで以下が検出されて自動修正、指摘されるようになる。

  • import が足りない時に自動追加
  • import が使われていない時に自動削除
  • Hooks のルール違反

※ import の自動追加は便利だが、同じ変数名とかで予期せぬモジュールを import することがあるので注意

metro.config.js があれば先頭に追加

/* eslint-env node */

npm run lint でエラーが出るのを防ぐため。

package.json に lint を追加

{
  "scripts": {
    "lint": "eslint .",
    "lint:fix": "eslint . --fix"
  }
}

以下でプロジェクト全体を自動修正

npm run lint:fix

手動で修正が必要なものは以下を実行しつつ対応

npm run lint