Open4

TypeScriptのimport order系比較

bisquit_devbisquit_dev

TS4.9+から使えるlanguage serviceのやつ
https://github.com/microsoft/TypeScript/pull/50931

  "editor.codeActionsOnSave": {
    # 未使用importの削除
    "source.removeUnusedImports": true,
    # import順のソート
    "source.sortImports": true,
    # 上記2つのショートカット
    "source.organizeImports": true,
  },
bisquit_devbisquit_dev
  • cliで一括autofix出来ない
  • グループごとの空行とかそういうのは出来ない(空行はas-isで残る)
bisquit_devbisquit_dev

TSビルトイン、Prettier、ESLintの中ではESLintを採用する

TSビルトインのやつを採用できない理由

  • グループごとの改行はぶっちゃけ好みだが、その好みを制御出来ないとコードの一貫性を達成できない
  • 一括でautofix出来ない(公式から提供されてるのはファイル保存時のフックのみ、api使えば出来るけど)

Prettierを採用できない理由

  • ASTを変換しない原則に反するため
  • 他のプラグインとの整合性が面倒になりそう
bisquit_devbisquit_dev

結論

ESLintの方法の中では、ざっくり調べた感じはeslint-plugin-simple-import-sortがちょうどいいと思う

https://github.com/lydell/eslint-plugin-simple-import-sort

  • デフォルトの設定で十分、その場合に導入がシンプル

他に検討したやつ

ESLint組み込みルール

https://eslint.org/docs/latest/rules/sort-imports

  • いい感じに設定するのが面倒

eslint-plugin-import

https://github.com/import-js/eslint-plugin-import/

  • いい感じに設定するのが面倒
  • ここまでオプションいらない
  • 2021/10で更新止まってる

eslint-plugin-perfectionist

https://github.com/azat-io/eslint-plugin-perfectionist

  • こういう系では新しめで、import以外にも色々ソート出来て、導入が簡単
  • ただソートアルゴリズムが独自っぽいため、TSのorganize importとずれがありそう
  • まだ若干不安定な感じはする