技術とかの雑なToday I Learnedメモ

lint-staged で Git のステージングに上がったファイルのみを対象にする、なぜか .eslintignore が効かず .eslintrc.js の ignorePatterns は効く

lint-staged で Git のステージングに上がったファイルのみを対象にする、なぜか .eslintignore が効かず .eslintrc.js の ignorePatterns は効く

pre-commit で lint / format するファイルの対象がアプリケーションの全ファイル(./src)になっている

  • これは lint-staged の設定で叩く yarn lint:fix のコマンドの引数に指定されているから
{
  "scripts": {
    "lint": "eslint --cache --ext .js,.ts,.tsx --ignore-path .gitignore --fix ./src",
    "format": "prettier --check --ignore-path .gitignore --write \"**/*.+(js|json|ts|tsx)\"",
    "lint:fix": "yarn lint & yarn format"
  },
  "lint-staged": {
    "*.{js,ts,tsx}": "yarn lint:fix"
  }
}
  • ↑こんな感じだった

npm scripts で eslint の引数にファイルパスを渡さない

  • ./src という指定が原因で全ファイル対象になっていた
  • npm scripts で ./src の指定を外す or lint-staged 専用の npm scripts を作る
    • 専用の npm scripts を作ってもよかったが内容がほぼ一緒なのでどうなの?という気もする
    • が、ローカルの pre-commit だけでなく CI / GitHub Actions で走らせることも考えると別々にしたほうがよさそう

lint-staged.config.js の設定

parserOptions.project のエラー

  • 0:0 error Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser
    • lint-staged.config.js をコミットしようとすると上記エラーが出る
    • .eslintrc.js のコミットでも上記エラーが出る
  • package.json の "eslintIgnore" で設定していてもダメだった(lint-staged.config.js を作成する前は効いてた)
  • .eslintignore に移してもダメだった

Ignoring Code - ESLint - Pluggable JavaScript Linter

  • 色々やって .eslintrc.js の ignorePatterns に ".eslintrc.js" と "lint-staged.config.js" を指定したらいけた
  • ただ公式ドキュメントには

Patterns defined in .eslintignore take precedence over the ignorePatterns property of config files.

DeepL で翻訳すると

.eslintignoreで定義されたパターンは、設定ファイルのignorePatternsプロパティより優先されます。

とあるが……?

結果原因はよくわからなかった

  • とりあえず ignorePatterns に指定したらしてほしい動作をしてくれたのでこれにした
  • が、なぜ .eslintignore でダメだったのかはよく分かっていない