勉強を兼ねて Ruff の lint ルールを全て確認しています。(多分更新していきます…)
主観でおススメ度を 5 段階でつけているので、良ければ参考にしてください。
- 5: デメリットがないため、必ずつけるべき
- 4: 一定の制約がつくが、つけた方が良い
- 3: つけてもつけなくてもいい
- 2: つけない方がいい場面が多い
- 1: つけるべきではない(そんなルールあるのかって感じですが…)
isort (I)
isortは python の import 順序を整頓してくれるサードパーティーライブラリです。
以下のように組み込みモジュール、外部モジュール、ローカルモジュールを abc 順でソートします。
from __future__ import absolute_import
import os
import sys
from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
lib9, lib10, lib11, lib12, lib13, lib14, lib15)
from my_lib import Object, Object2, Object3
print("Hey")
print("yo")
Ruff の IXXX のルールは isort に関する lint ルールになります。
I001(unsorted-imports) 5/5
isort の順に並んでいない場合に警告を出します。
悪い例
import pandas
import numpy as np
良い例:
import numpy as np
import pandas
import の順序が一意になるメリットは大きいので、導入推奨です。
I002(missing-required-import) 5/5
暗に仮定されている必要な import 文がない場合に警告を出します。
悪い例:
import typing
良い例:
from __future__ import annotations
import typing
特に型アノテーションについて I002 が役に立つ場面が多いように思います。
例えば Python の 3.8 以前の場合、以下のコードはfrom __future__ import annotations
がモジュールの先頭に必要になります。
def sum_value(value: list[int]) -> int: # ! lint[int]は3.9から標準で使える型アノテーション
pass
忘れていたら実行時にエラーになるだけなので、事前に教えてもらって損はないと思います。lint に追加推奨です。
終わりに
isort(I) はANNなどと違い開発体験を飛躍的に向上させたりはしませんが、git での diff 管理や検索性能など、細かなところで恩恵を得られる lint ルールだと思います。
野放図の import が開発に寄与することがないので、余裕があれば是非 lint の対象に加えていきたいです。
lint に追加する場合はpyproject.toml
に以下を追記してください。
[tool.ruff.lint]
select = ["I"]
コメント