できない.dev

ESLint の --fix で自動修正が適用されない

`eslint --fix` で直らないのは、そのルールが自動修正に非対応、対象ファイルが ignore されている、`--fix-dry-run` で書き込んでいない、などが主因。
fixable でない指摘は手動修正が必要。

#eslint#fix#cli#flat-config

公開:

要約

eslint --fix を実行しても警告が消えないのは、そのルールが自動修正に対応していないか、対象ファイルがそもそも修正されていないかのどちらかが大半です。

ESLint の自動修正は「安全に書き換えられる」とルール側が宣言しているものだけが対象です。
設計上の指摘(未使用変数の削除など意味が変わりうるもの)は --fix では直りません。

まず「fixable かどうか」と「ファイルが走査されているか」を切り分けます。

よくある原因

  1. ルールが非対応: そのルールに自動修正が実装されていない
  2. 走査されていない: ignore 設定や拡張子の対象外で、ファイルが対象になっていない
  3. dry-run: --fix-dry-run を使っていて、表示のみで書き込まれない
  4. 設定の限定: flat config の files が狭く、対象ファイルにルールが効いていない

解決策

1. fixable か確認する

ルールが自動修正に対応していなければ --fix では直りません。
対応状況は公式のルール一覧で確認できます(修正可能なルールにはレンチアイコンが付きます)。
非対応なら手動修正が必要です。

2. 対象が走査されているか確認する

ファイルが ignore されていないか、拡張子が対象かを確認します。

# カレント配下を対象に自動修正
npx eslint . --fix
 
# 特定の種類だけ自動修正(problem / suggestion / layout)
npx eslint . --fix-type problem,layout

--fix-dry-run は結果を表示するだけで書き込みません。
実際に直すときは --fix を使います。

3. flat config の対象を見直す

eslint.config.js(flat config)では files / ignores で対象が決まります。
対象から外れているとルール自体が適用されません。

// eslint.config.js
export default [
  {
    files: ['**/*.{js,ts,tsx}'],
    rules: {
      semi: ['error', 'always'], // fixable なので --fix で付与される
    },
  },
];

各オプションの詳細は公式の CLI リファレンスを参照してください。

この記事は役立ちましたか?