mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-27 04:19:18 +00:00
[refurb] Skip slice-to-remove-prefix-or-suffix (FURB188)
when nontrivial slice step is present (#13405)
This commit is contained in:
parent
a6d3d2fccd
commit
f110d80279
3 changed files with 116 additions and 1 deletions
|
@ -152,3 +152,21 @@ def shadow_builtins(filename: str, extension: str) -> None:
|
||||||
from builtins import len as builtins_len
|
from builtins import len as builtins_len
|
||||||
|
|
||||||
return filename[:-builtins_len(extension)] if filename.endswith(extension) else filename
|
return filename[:-builtins_len(extension)] if filename.endswith(extension) else filename
|
||||||
|
|
||||||
|
def okay_steps():
|
||||||
|
text = "!x!y!z"
|
||||||
|
if text.startswith("!"):
|
||||||
|
text = text[1::1]
|
||||||
|
if text.startswith("!"):
|
||||||
|
text = text[1::True]
|
||||||
|
if text.startswith("!"):
|
||||||
|
text = text[1::None]
|
||||||
|
print(text)
|
||||||
|
|
||||||
|
|
||||||
|
# this should be skipped
|
||||||
|
def ignore_step():
|
||||||
|
text = "!x!y!z"
|
||||||
|
if text.startswith("!"):
|
||||||
|
text = text[1::2]
|
||||||
|
print(text)
|
|
@ -246,6 +246,27 @@ fn affix_removal_data<'a>(
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let slice = slice.as_slice_expr()?;
|
let slice = slice.as_slice_expr()?;
|
||||||
|
|
||||||
|
// Exit early if slice step is...
|
||||||
|
if slice
|
||||||
|
.step
|
||||||
|
.as_deref()
|
||||||
|
// present and
|
||||||
|
.is_some_and(|step| match step {
|
||||||
|
// not equal to 1
|
||||||
|
ast::Expr::NumberLiteral(ast::ExprNumberLiteral {
|
||||||
|
value: ast::Number::Int(x),
|
||||||
|
..
|
||||||
|
}) => x.as_u8() != Some(1),
|
||||||
|
// and not equal to `None` or `True`
|
||||||
|
ast::Expr::NoneLiteral(_)
|
||||||
|
| ast::Expr::BooleanLiteral(ast::ExprBooleanLiteral { value: true, .. }) => false,
|
||||||
|
_ => true,
|
||||||
|
})
|
||||||
|
{
|
||||||
|
return None;
|
||||||
|
};
|
||||||
|
|
||||||
let compr_test_expr = ast::comparable::ComparableExpr::from(
|
let compr_test_expr = ast::comparable::ComparableExpr::from(
|
||||||
&test.as_call_expr()?.func.as_attribute_expr()?.value,
|
&test.as_call_expr()?.func.as_attribute_expr()?.value,
|
||||||
);
|
);
|
||||||
|
|
|
@ -166,6 +166,8 @@ FURB188.py:154:12: FURB188 [*] Prefer `removesuffix` over conditionally replacin
|
||||||
153 |
|
153 |
|
||||||
154 | return filename[:-builtins_len(extension)] if filename.endswith(extension) else filename
|
154 | return filename[:-builtins_len(extension)] if filename.endswith(extension) else filename
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FURB188
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FURB188
|
||||||
|
155 |
|
||||||
|
156 | def okay_steps():
|
||||||
|
|
|
|
||||||
= help: Use removesuffix instead of ternary expression conditional upon endswith.
|
= help: Use removesuffix instead of ternary expression conditional upon endswith.
|
||||||
|
|
||||||
|
@ -175,3 +177,77 @@ FURB188.py:154:12: FURB188 [*] Prefer `removesuffix` over conditionally replacin
|
||||||
153 153 |
|
153 153 |
|
||||||
154 |- return filename[:-builtins_len(extension)] if filename.endswith(extension) else filename
|
154 |- return filename[:-builtins_len(extension)] if filename.endswith(extension) else filename
|
||||||
154 |+ return filename.removesuffix(extension)
|
154 |+ return filename.removesuffix(extension)
|
||||||
|
155 155 |
|
||||||
|
156 156 | def okay_steps():
|
||||||
|
157 157 | text = "!x!y!z"
|
||||||
|
|
||||||
|
FURB188.py:158:5: FURB188 [*] Prefer `removeprefix` over conditionally replacing with slice.
|
||||||
|
|
|
||||||
|
156 | def okay_steps():
|
||||||
|
157 | text = "!x!y!z"
|
||||||
|
158 | if text.startswith("!"):
|
||||||
|
| _____^
|
||||||
|
159 | | text = text[1::1]
|
||||||
|
| |_________________________^ FURB188
|
||||||
|
160 | if text.startswith("!"):
|
||||||
|
161 | text = text[1::True]
|
||||||
|
|
|
||||||
|
= help: Use removeprefix instead of assignment conditional upon startswith.
|
||||||
|
|
||||||
|
ℹ Safe fix
|
||||||
|
155 155 |
|
||||||
|
156 156 | def okay_steps():
|
||||||
|
157 157 | text = "!x!y!z"
|
||||||
|
158 |- if text.startswith("!"):
|
||||||
|
159 |- text = text[1::1]
|
||||||
|
158 |+ text = text.removeprefix("!")
|
||||||
|
160 159 | if text.startswith("!"):
|
||||||
|
161 160 | text = text[1::True]
|
||||||
|
162 161 | if text.startswith("!"):
|
||||||
|
|
||||||
|
FURB188.py:160:5: FURB188 [*] Prefer `removeprefix` over conditionally replacing with slice.
|
||||||
|
|
|
||||||
|
158 | if text.startswith("!"):
|
||||||
|
159 | text = text[1::1]
|
||||||
|
160 | if text.startswith("!"):
|
||||||
|
| _____^
|
||||||
|
161 | | text = text[1::True]
|
||||||
|
| |____________________________^ FURB188
|
||||||
|
162 | if text.startswith("!"):
|
||||||
|
163 | text = text[1::None]
|
||||||
|
|
|
||||||
|
= help: Use removeprefix instead of assignment conditional upon startswith.
|
||||||
|
|
||||||
|
ℹ Safe fix
|
||||||
|
157 157 | text = "!x!y!z"
|
||||||
|
158 158 | if text.startswith("!"):
|
||||||
|
159 159 | text = text[1::1]
|
||||||
|
160 |- if text.startswith("!"):
|
||||||
|
161 |- text = text[1::True]
|
||||||
|
160 |+ text = text.removeprefix("!")
|
||||||
|
162 161 | if text.startswith("!"):
|
||||||
|
163 162 | text = text[1::None]
|
||||||
|
164 163 | print(text)
|
||||||
|
|
||||||
|
FURB188.py:162:5: FURB188 [*] Prefer `removeprefix` over conditionally replacing with slice.
|
||||||
|
|
|
||||||
|
160 | if text.startswith("!"):
|
||||||
|
161 | text = text[1::True]
|
||||||
|
162 | if text.startswith("!"):
|
||||||
|
| _____^
|
||||||
|
163 | | text = text[1::None]
|
||||||
|
| |____________________________^ FURB188
|
||||||
|
164 | print(text)
|
||||||
|
|
|
||||||
|
= help: Use removeprefix instead of assignment conditional upon startswith.
|
||||||
|
|
||||||
|
ℹ Safe fix
|
||||||
|
159 159 | text = text[1::1]
|
||||||
|
160 160 | if text.startswith("!"):
|
||||||
|
161 161 | text = text[1::True]
|
||||||
|
162 |- if text.startswith("!"):
|
||||||
|
163 |- text = text[1::None]
|
||||||
|
162 |+ text = text.removeprefix("!")
|
||||||
|
164 163 | print(text)
|
||||||
|
165 164 |
|
||||||
|
166 165 |
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue