Ruff does not autofix line-too-long violation
Asked Answered
B

2

12

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.

Bianka answered 26/7, 2023 at 13:32 Comment(3)
I believe black will change the line length for you with you having to do it. Black is a different linter.Nab
Oh yes, black was easy to configure and it did reformat files with length issues. I was also trying out ruff as it is supposed to be a faster alternative to black and wanted to autofix the line length issue through ruff alone without combining with other linters.Bianka
Long lines are strings or comments or code lines?Heptavalent
B
1

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.

Bianka answered 29/9, 2023 at 19:36 Comment(0)
E
5

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.

Elinaelinor answered 10/1 at 22:1 Comment(0)
B
1

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.

Bianka answered 29/9, 2023 at 19:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.