Refactor fix in `readlines-in-for` (#18573)

## Summary

Post-merge feedback from https://github.com/astral-sh/ruff/pull/18542.
This commit is contained in:
Charlie Marsh 2025-06-08 20:10:13 -04:00 committed by GitHub
parent 1dc8f8f903
commit 331821244b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 31 additions and 51 deletions

View File

@ -102,8 +102,6 @@ with open("furb129.py") as f:
pass
for line in(f).readlines():
pass
# Test case for issue #17683 - missing space before keyword
# Test case for issue #17683 (missing space before keyword)
print([line for line in f.readlines()if True])
print([line for line in f.readlines()and True])
print([line for line in f.readlines()or True])
print([line for line in f.readlines()in ["test"]])

View File

@ -86,27 +86,23 @@ fn readlines_in_iter(checker: &Checker, iter_expr: &Expr) {
return;
}
}
let edit = if let Some(parenthesized_range) = parenthesized_range(
let deletion_range = if let Some(parenthesized_range) = parenthesized_range(
expr_attr.value.as_ref().into(),
expr_attr.into(),
checker.comment_ranges(),
checker.source(),
) {
let deletion_range = expr_call.range().add_start(parenthesized_range.len());
expr_call.range().add_start(parenthesized_range.len())
} else {
expr_call.range().add_start(expr_attr.value.range().len())
};
let padded = pad_end(String::new(), deletion_range.end(), checker.locator());
if padded.is_empty() {
let edit = if padded.is_empty() {
Edit::range_deletion(deletion_range)
} else {
Edit::range_replacement(padded, deletion_range)
}
} else {
let deletion_range = expr_call.range().add_start(expr_attr.value.range().len());
let padded = pad_end(String::new(), deletion_range.end(), checker.locator());
if padded.is_empty() {
Edit::range_deletion(deletion_range)
} else {
Edit::range_replacement(padded, deletion_range)
}
};
let mut diagnostic = checker.report_diagnostic(ReadlinesInFor, expr_call.range());

View File

@ -307,7 +307,6 @@ FURB129.py:103:16: FURB129 [*] Instead of calling `readlines()`, iterate over fi
103 | for line in(f).readlines():
| ^^^^^^^^^^^^^^^ FURB129
104 | pass
105 | # Test case for issue #17683 - missing space before keyword
|
= help: Remove `readlines()`
@ -318,26 +317,20 @@ FURB129.py:103:16: FURB129 [*] Instead of calling `readlines()`, iterate over fi
103 |- for line in(f).readlines():
103 |+ for line in(f):
104 104 | pass
105 105 | # Test case for issue #17683 - missing space before keyword
106 106 | print([line for line in f.readlines()if True])
105 105 |
106 106 | # Test case for issue #17683 (missing space before keyword)
FURB129.py:106:29: FURB129 [*] Instead of calling `readlines()`, iterate over file object directly
FURB129.py:107:29: FURB129 [*] Instead of calling `readlines()`, iterate over file object directly
|
104 | pass
105 | # Test case for issue #17683 - missing space before keyword
106 | print([line for line in f.readlines()if True])
106 | # Test case for issue #17683 (missing space before keyword)
107 | print([line for line in f.readlines()if True])
| ^^^^^^^^^^^^^ FURB129
107 | print([line for line in f.readlines()and True])
108 | print([line for line in f.readlines()or True])
|
= help: Remove `readlines()`
Unsafe fix
103 103 | for line in(f).readlines():
104 104 | pass
105 105 | # Test case for issue #17683 - missing space before keyword
106 |- print([line for line in f.readlines()if True])
106 |+ print([line for line in f if True])
107 107 | print([line for line in f.readlines()and True])
108 108 | print([line for line in f.readlines()or True])
109 109 | print([line for line in f.readlines()in ["test"]])
105 105 |
106 106 | # Test case for issue #17683 (missing space before keyword)
107 |- print([line for line in f.readlines()if True])
107 |+ print([line for line in f if True])

View File

@ -307,7 +307,6 @@ FURB129.py:103:16: FURB129 [*] Instead of calling `readlines()`, iterate over fi
103 | for line in(f).readlines():
| ^^^^^^^^^^^^^^^ FURB129
104 | pass
105 | # Test case for issue #17683 - missing space before keyword
|
= help: Remove `readlines()`
@ -318,26 +317,20 @@ FURB129.py:103:16: FURB129 [*] Instead of calling `readlines()`, iterate over fi
103 |- for line in(f).readlines():
103 |+ for line in(f):
104 104 | pass
105 105 | # Test case for issue #17683 - missing space before keyword
106 106 | print([line for line in f.readlines()if True])
105 105 |
106 106 | # Test case for issue #17683 (missing space before keyword)
FURB129.py:106:29: FURB129 [*] Instead of calling `readlines()`, iterate over file object directly
FURB129.py:107:29: FURB129 [*] Instead of calling `readlines()`, iterate over file object directly
|
104 | pass
105 | # Test case for issue #17683 - missing space before keyword
106 | print([line for line in f.readlines()if True])
106 | # Test case for issue #17683 (missing space before keyword)
107 | print([line for line in f.readlines()if True])
| ^^^^^^^^^^^^^ FURB129
107 | print([line for line in f.readlines()and True])
108 | print([line for line in f.readlines()or True])
|
= help: Remove `readlines()`
Safe fix
103 103 | for line in(f).readlines():
104 104 | pass
105 105 | # Test case for issue #17683 - missing space before keyword
106 |- print([line for line in f.readlines()if True])
106 |+ print([line for line in f if True])
107 107 | print([line for line in f.readlines()and True])
108 108 | print([line for line in f.readlines()or True])
109 109 | print([line for line in f.readlines()in ["test"]])
105 105 |
106 106 | # Test case for issue #17683 (missing space before keyword)
107 |- print([line for line in f.readlines()if True])
107 |+ print([line for line in f if True])