Closed6

【ESLint】eslint-plugin-import 2.31.0 → 2.32.0

1zushun1zushun

課題1

@ts-expect-error でエラーが出ていた。eslint-plugin-import 2.31.0 → 2.32.0 で型が追加された様子だけれどリリースノートには記載がない。@ts-expect-error が不要になったので @ts-expect-errorを削除するだけでok

1zushun1zushun

課題2

ConfigError: Config "import/typescript": Key "plugins": Cannot redefine plugin "import".

次に上記のエラーが出た。プラグインを重複登録しているために発生している。似たようなIssueは結構散見するのでみんな困っていそうだなーと。

https://github.com/eslint/eslintrc/issues/135

https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2325

純粋に重複しないようpluginを除外するようにした

import pluginImport from 'eslint-plugin-import';

const { plugins, name, ...pluginImportTypeScript } = pluginImport.flatConfigs.typescript;

const typescriptConfig = [
 {
    name: 'eslint-plugin-import/typescript',
    plugins: { import: pluginImport },
    ...pluginImportTypeScript,
  }
]
1zushun1zushun

課題3

typescriptConfigの中にtypescript-eslintのconfig objectがあるが型エラーが発生した

import pluginImport from 'eslint-plugin-import';

const { plugins, name, ...pluginImportTypeScript } = pluginImport.flatConfigs.typescript;

const typescriptConfig = [
 // ここら辺にtypesscript-eslintのconfig objectがある
 {
    name: 'eslint-plugin-import/typescript',
    plugins: { import: pluginImport },
    ...pluginImportTypeScript,
  }
]

どうやらtypescript-eslint側の問題らしく型キャストで対応した。今まで型エラーが発生していなかった理由はeslint-plugin-importがany型になっていて型の健全性 (Type Soundness)が欠如していたから。普段any型を使うことがなくこういったケースもあるんだなーと。

I'd suggest using type casting, or ts-ignore in this case. It's the issue of upstream eslint/typescript-eslint, there is not much we could do here.

https://github.com/nuxt/eslint/issues/497#issuecomment-2553086676

1zushun1zushun

モチベーション

課題2を対応する時にconfig nameは特に指定していなかったけれどimport/typescriptになっていてpluginImport.flatConfigs.typescriptでは特にconfig nameの指定はなかったのになぜーと思ったので追ってみる

pluginImport.flatConfigs.typescript

L102がpluginImport.flatConfigs.typescriptに該当する

https://github.com/import-js/eslint-plugin-import/blob/main/src/index.js#L89-L103

createFlatConfigでconfig nameを追加していた。pluginもここで追加されている。

https://github.com/import-js/eslint-plugin-import/blob/main/src/index.js#L83-L87

pluginImport.flatConfigs.typescriptの独自の設定が以下になる。createFlatConfigで共通部分を注入している。eslint-plugin-importに限らず、共通部分は切り出されている可能性かもとライブラリ見る時は予測する必要があるのかなと思った。

https://github.com/import-js/eslint-plugin-import/blob/main/config/typescript.js#L14C1-L34

1zushun1zushun

まとめ

eslint-plugin-import 2.31.0 → 2.32.0 にするために以下の3つの修正に取り組んだ

  • @ts-expect-errorが不要になったためエラー
  • プラグインを重複登録していたためエラー
  • typescript-eslintの型エラー

補足

そこまで重い修正ではないものの、自分だけではなく他の方も遭遇しそうなエラーだったので足跡を残しておく。このスクラップで調査の時間短縮ができたら幸いです

このスクラップは1ヶ月前にクローズされました