リンターしたい(ruff
)
$ pip3 install ruff
Rustで書かれたPython用のリンター&フォーマッタです。
これまでblack
、isort
、flake8
を組み合わせてできたことをruff
に集約できます。
設定をpyproject.toml
に記述できるため、既存のPythonプロジェクトにも導入しやすいと思います。
注釈
Pythonのリンター&フォーマッタの変遷は闇が深そうです。 時代とともにベストプラクティスが移り変わっている感じで、 これを使っておけばOKみたいな標準的なモジュールが存在しません。
数年前に「設定不要のフォーマッタ」を謳ったblack
が登場しました。
インストールしてそのまま使えるため、逆に導入しやすいと感じました。
リンターはflake8
を使ってみようと思ったのですが、たしかpyproject.toml
に対応しておらず断念。
型チェッカーにmypy
を使ってみようと思ったのですが、そもそも型アノテーションをうまく設定できておらず、こちらも断念しました。
ruff
の基本コマンドは簡単なので、今度こそ身につけられるのではと期待しています。
リンターしたい
$ ruff check ファイル名
$ ruff check ファイル名 --select カテゴリ記号
check
コマンドでリンターを実行します。
引数にファイル名を指定したり、確認したいディレクトリでruff check .
を指定したりできます。
--select
オプションを使って、チェックしたいカテゴリーやエラー番号などを指定できます。
修正箇所はターミナルに出力されます。
ファイル内容は変更されないので、とりあえず--select ALL
でチェックして、
どのリンターを有効にするといいか検討してみるといいと思います。
$ ruff check . --select ALL
フォーマッタしたい
$ ruff format ファイル名
format
コマンドでフォーマッターとして利用できます。
引数にファイル名を指定したり、確認したいディレクトリでruff format .
を指定して実行します。
ルール
select
やignore
で設定できるカテゴリ記号は公式ドキュメントの「ルール」に書いてあります。
どんなものがあるかなと思って書き写してみたら、なんと58種類もありました。
E
,W
:pycodestyle
F
:Pyflakes
C90
:mccabe
I
:isort
N
:pep8-naming
D
:pydocstyle
UP
:pyupgrade
YTT
:flake8-2020
ANN
:flake8-annotations
ASYNC
:flake8-async
TRIO
:flake8-trio
S
:flake8-bandit
BLE
:flake8-blind-except
FBT
:flake8-boolean-tra
B
:flake8-bugbear
A
:flake8-builtins
COM
:flake8-commas
CPY
:flake8-copyright
C4
:flake8-comprehensions
DTZ
:flake8-datetimez
T10
:flake8-debugger
DJ
:flake8-django
EM
:flake8-errmsg
EXE
:flake8-executable
FA
:flake8-future-annotations
ISC
:flake8-implicit-str-concat
ICN
:flake8-import-conventions
G
:flake8-logging-format
INP
:flake8-no-pep420
PIE
:flake8-pie
T20
:flake8-print
PYI
:flake8-pyi
PT
:flake8-pytest-style
Q
:flake8-quotes
RSE
:flake8-raise
RET
:flake8-return
SLF
:flake8-self
SLT
:flake8-slots
SIM
:flake8-simplify
TID
:flake8-tidy-imports
TCH
:flake8-type-checking
INT
:flake8-gettext
ARG
:flake8-unused-arguments
PTH
:flake8-use-pathlib
TD
:flake8-todos
FIX
:flake8-fixme
ERA
:eradicate
PD
:pandas-vet
PGH
:pygrep-hooks
PL
:pylint
TRY
:tryceratops
FLY
:flynt
NPY
: NumPy-specific rulesAIR
:Airflow
PERF
:Perflint
FURB
:refurb
LOG
:flake8-logging
RUF
: Ruff-specific rules