[isort] Insert imports in alphabetical order (I002) (#22493)
<!-- Thank you for contributing to Ruff/ty! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? (Please prefix with `[ty]` for ty pull requests.) - Does this pull request include references to any relevant issues? --> ## Summary <!-- What's the purpose of the change? What does it do, and why? --> This PR fixes #20811 , current approach reverses the order in `BtreeSet` however as pointed in https://github.com/astral-sh/ruff/issues/20811#issuecomment-3398958832 here we cannot use I`IndexSet` to preserve config order since Settings derives `CacheKey` which isn't implemented for `IndexSet`, another approach to preserve the original order might be to use `Vec` however lookup time complexity might get affected as a result. <!-- How was it tested? --> I have tested it locally its working as expected , <img width="2200" height="1071" alt="image" src="https://github.com/user-attachments/assets/7d97b488-1552-4a42-9d90-92acf55ec493" /> --------- Signed-off-by: Bhuminjay <bhuminjaysoni@gmail.com>
This commit is contained in:
@@ -140,7 +140,7 @@ pub(crate) fn add_required_imports(
|
||||
source_type: PySourceType,
|
||||
context: &LintContext,
|
||||
) {
|
||||
for required_import in &settings.isort.required_imports {
|
||||
for required_import in settings.isort.required_imports.iter().rev() {
|
||||
add_required_import(
|
||||
required_import,
|
||||
parsed,
|
||||
|
||||
@@ -1,14 +1,6 @@
|
||||
---
|
||||
source: crates/ruff_linter/src/rules/isort/mod.rs
|
||||
---
|
||||
I002 [*] Missing required import: `from __future__ import annotations`
|
||||
--> docstring.py:1:1
|
||||
help: Insert required import: `from __future__ import annotations`
|
||||
1 | """Hello, world!"""
|
||||
2 + from __future__ import annotations
|
||||
3 |
|
||||
4 | x = 1
|
||||
|
||||
I002 [*] Missing required import: `from __future__ import generator_stop`
|
||||
--> docstring.py:1:1
|
||||
help: Insert required import: `from __future__ import generator_stop`
|
||||
@@ -16,3 +8,11 @@ help: Insert required import: `from __future__ import generator_stop`
|
||||
2 + from __future__ import generator_stop
|
||||
3 |
|
||||
4 | x = 1
|
||||
|
||||
I002 [*] Missing required import: `from __future__ import annotations`
|
||||
--> docstring.py:1:1
|
||||
help: Insert required import: `from __future__ import annotations`
|
||||
1 | """Hello, world!"""
|
||||
2 + from __future__ import annotations
|
||||
3 |
|
||||
4 | x = 1
|
||||
|
||||
@@ -1,15 +1,6 @@
|
||||
---
|
||||
source: crates/ruff_linter/src/rules/isort/mod.rs
|
||||
---
|
||||
I002 [*] Missing required import: `from __future__ import annotations`
|
||||
--> multiple_strings.py:1:1
|
||||
help: Insert required import: `from __future__ import annotations`
|
||||
1 | """This is a docstring."""
|
||||
2 + from __future__ import annotations
|
||||
3 | "This is not a docstring."
|
||||
4 | "This is also not a docstring."
|
||||
5 |
|
||||
|
||||
I002 [*] Missing required import: `from __future__ import generator_stop`
|
||||
--> multiple_strings.py:1:1
|
||||
help: Insert required import: `from __future__ import generator_stop`
|
||||
@@ -17,4 +8,13 @@ help: Insert required import: `from __future__ import generator_stop`
|
||||
2 + from __future__ import generator_stop
|
||||
3 | "This is not a docstring."
|
||||
4 | "This is also not a docstring."
|
||||
5 |
|
||||
|
||||
I002 [*] Missing required import: `from __future__ import annotations`
|
||||
--> multiple_strings.py:1:1
|
||||
help: Insert required import: `from __future__ import annotations`
|
||||
1 | """This is a docstring."""
|
||||
2 + from __future__ import annotations
|
||||
3 | "This is not a docstring."
|
||||
4 | "This is also not a docstring."
|
||||
5 |
|
||||
|
||||
@@ -398,17 +398,17 @@ mod tests {
|
||||
1 + from pipes import Template
|
||||
2 + from shlex import quote
|
||||
|
||||
I002 [*] Missing required import: `from __future__ import generator_stop`
|
||||
--> <filename>:1:1
|
||||
help: Insert required import: `from __future__ import generator_stop`
|
||||
1 + from __future__ import generator_stop
|
||||
2 | from pipes import quote, Template
|
||||
|
||||
I002 [*] Missing required import: `from collections import Sequence`
|
||||
--> <filename>:1:1
|
||||
help: Insert required import: `from collections import Sequence`
|
||||
1 + from collections import Sequence
|
||||
2 | from pipes import quote, Template
|
||||
|
||||
I002 [*] Missing required import: `from __future__ import generator_stop`
|
||||
--> <filename>:1:1
|
||||
help: Insert required import: `from __future__ import generator_stop`
|
||||
1 + from __future__ import generator_stop
|
||||
2 | from pipes import quote, Template
|
||||
");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user