Skip to content

Infinite loop in import sorting for long variable names with force-single-line (ruff >= 0.0.256) #4062

@pstjohn

Description

@pstjohn

The following code snippet causes ruff to hang for ruff >= 0.0.256.

pyproject.toml

[tool.ruff]
select = ["I"]
fix = true
line-length = 88

[tool.ruff.isort]
force-single-line = true

test.py

from mypackage.subpackage2 import (  # long comment that seems to be a problem
    a_long_variable_name_that_causes_problems,
    item2,
)

Doing some bisection, it works in 0.0.255 and hangs in 0.0.256 onwards.
Probably related to #3530? But it happens regardless of the combine-as-imports setting

In the newer versions, it seems to get stuck in an infinite loop

[2023-04-21][20:08:42][ruff_cli::commands::run][DEBUG] Identified files to lint in: 521.625µs
[2023-04-21][20:08:42][ruff_cli::diagnostics][DEBUG] Checking: /Users/pstjohn/Misc/ruff_issue/test.py
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:08:42][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)

The older versions run through twice

[2023-04-21][20:15:05][ruff_cli::commands::run][DEBUG] Identified files to lint in: 381.25µs
[2023-04-21][20:15:05][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:15:05][ruff::rules::isort::categorize][DEBUG] Categorized 'mypackage' as ThirdParty (NoMatch)
[2023-04-21][20:15:05][ruff_cli::commands::run][DEBUG] Checked 1 files in: 1.910292ms
Found 1 error (1 fixed, 0 remaining).

resulting in this formatted import

from mypackage.subpackage2 import (  # long comment that seems to be a problem
    a_long_variable_name_that_causes_problems,
)
from mypackage.subpackage2 import item2

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingisortRelated to import sorting

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions