メインコンテンツへスキップ
  1. Blogs/

Pythonのlinter(Ruff)のTIPS

·758 文字·
Memo Python
hiroki
著者
hiroki
クラウドを作るお仕事をしてます。
目次

はじめに
#

本記事はmemoレベルでしか調査していないため、誤りがある可能性があります。ご注意ください。

Python + visual studio code + Ruffを使う上で気をつけること。

1. pyproject.tomlを優先する
#

問題

Ruffのvscode拡張では、設定をpyproject.tomlから自動で読み込んでくれる。

# pyproject.toml
[tool.ruff]
target-version = "py311"
exclude = ["alembic"]

[tool.ruff.lint]
select = [
    "E",  # pycodestyle errors
    "W",  # pycodestyle warnings
    "F",  # pyflakes
    "I",  # isort
    "B",  # flake8-bugbear
    "C4",  # flake8-comprehensions
    "UP",  # pyupgrade
    "ARG001", # unused arguments in functions
    "PL", # pylint

]
ignore = [
    "E501",  # line too long,
    "B008",  # do not perform function calls in argument defaults
    "W191",  # indentation contains tabs
    "B904",  # Allow raising exceptions without from e, for HTTPException
]

しかし「vscodeの設定が常に優先される」ので、pyproject.tomlが無視されてしまうことがある。 https://github.com/astral-sh/ruff-vscode/issues/425

解決方法

vscodeに設定項目が追加された様なので、設定の優先度を指定できるようになった。 https://github.com/astral-sh/ruff-vscode/blob/main/package.json

alt text

項目 説明
editorFirst [default]エディターで設定された設定は、.toml ファイルで設定された設定よりも優先されます。
filesystemFirst .toml ファイルに設定された構成は、エディターに設定された構成よりも優先されます。
editorOnly .toml ファイルに設定された設定は完全に無視されます
これでチーム開発の場合はpyproject.tomlを優先して、コード規約がないprojectの場合は独自のRuff設定を使える。

2. import文をformat
#

問題

import文がフォーマットコマンドruff formatや、vscodeのformat on saveではformatされない。

解決方法

import文もformatしたい場合は以下コマンドになる。 https://docs.astral.sh/ruff/formatter/#sorting-imports

ruff check --select I --fix
ruff format
formatコマンドでimportも修正できるように検討中らしい。 https://github.com/astral-sh/ruff/issues/8232

3. その他
#

まだ問題になってないけど、どういう挙動をするか不明なもの

vscodeのtopにpyproject.tomlが無い

.
├── frontend
├── backend
│   ├── app/
│   ├── poetry.lock
│   ├── pyproject.toml
│   └── README.md
└── README.md

Related

pyvmomiで自動化9 -performance情報を取得-
·2157 文字
Blog VMware VSphere Pyvmomi Python
Nested ESXiを使った低コストなinstall検証
·2481 文字
Blog VMware VSphere ESXi
Image Builderでカスタムイメージを作る
·3430 文字
Blog VMware VSphere ESXi