astral-sh / ruff

An extremely fast Python linter and code formatter, written in Rust.

Home Page:https://docs.astral.sh/ruff

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add default linter rules

AndreuCodina opened this issue · comments

In my company we have lots of microservices and nanoservices, and a Python project prototype I maintain to guide how Python projects must be developed and updated.
It's a common complaint not to have default rules in our pyproject.toml files, and instead have "magic letters" just because "I chose them".
My job is to ensure data engineers develop software as we do in .NET, i.e. with types.

I want to propose a group of default linter rules, and choose them with groups (letters), instead of choosing a subset.

pyproject.toml

[tool.ruff.lint]
select = ["F", "E", "W", "N", "I", "ANN"]
ignore = ["E501", "ANN101", "ANN102", "ANN401"]

Reasoning of select:

  • F: Unused variables, comparison with ==, etc.
  • E, W, N: PEP 8.
  • I: Sort imports.
  • ANN: Mandatory return types.

Reasoning of ignore:

  • E501: Line too long hasn't an automatic fix.
  • ANN101, ANN102: Typing self and cls is strange in Python.
  • ANN401: The Python ecosystem is not prepared to not use Any.

Besides, I always use this configuration:

[tool.pyright]
typeCheckingMode = "strict"

[tool.ruff]
src = ["src", "tests"]
extend-include = ["*.ipynb"]

Hi!

We're going to recategorize all of the rules (roughly discussed in #1774) and define new defaults eventually. We're actively working on this, but I'm not sure when we'll be done because it's a big project and we want to get it right.

Similarly, this request fits into #1773 which is a part of that effort.

@zanieb Do you think this can be merged into either of the linked issue?

I'm okay with keeping it open for now unless there's a duplicate issue regarding defaults.

We should add a dedicated tracking issue for the full re-categorization work eventually.