Ruff does not autofix line-too-long violation

6.5k views Asked by At

I have a python project and I am configuring latest version of ruff for that project for linting and formating purpose. I have the below settings in my pyproject.toml file:

[tool.ruff]
select = ["E", "F", "W", "Q", "I"]

ignore = ["E203"]

# Allow autofix for all enabled rules (when `--fix`) is provided.
fixable = ["ALL"]
unfixable = []

# restrict Line length to 99
line-length = 99

The ruff check command with autofix feature (--fix) of ruff identifies that the lines are long with E501 errors, but it does not format that code to wrap to next line to maintain the line-length restriction. Is there something I need to enable or do to ensure that ruff fixes this? Or is this not possible in ruff currently? Please help.

I tried going through the documentation to find anything, but I am clueless what to do here.

2

There are 2 answers

0
Sukanya Pai On BEST ANSWER

It seems like Ruff has released Ruff Python Formatter as part of v0.0.289 and is currently in alpha state - https://github.com/astral-sh/ruff/blob/main/crates/ruff_python_formatter/README.md

We are currently using v0.0.280 which does not have this feature so we used a combination of Black and Ruff as per our project requirements.

0
amiola On

As of today (Ruff's autoformatter available), the following should hold:

Ruff is designed to be used alongside a formatter (like Ruff's own formatter, or Black) and, as such, will defer implementing stylistic rules that are obviated by automated formatting.

All this said, IMO, aiming at autoformatting E501 issues (with no manual intervention), in your case the following configuration might help:

[tool.ruff]
line-length = 99

[tool.ruff.lint]
select = ["E", "F", "W", "Q", "I"]
ignore = ["E203", "E501"]

i.e. simply specify the line-length setting letting the formatter (Ruff or Black) do the work and ignore E501 lint rule (if all the E-like rules are selected). Observe that's kind of what Ruff does by default (i.e. in its default configuration). It enables F rules and a subset of E rules (among which you won't find E501); it leaves aside all those stylistic rules overlapping with the use of a formatter (see https://docs.astral.sh/ruff/tutorial/#configuration for reference).

Final side note, as per my understanding fixable = ["ALL"] is the default already (see https://docs.astral.sh/ruff/settings/#fixable); thus, fixable should be rather used to specify those rules - among the ones to be checked - that you want to autofix as well (provided that an autofix is available and not unsafe); IOW, it should specify a subset of the selected rules not to be redundant.