mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-02 06:41:23 +00:00
Avoid flagging B009 and B010 on starred expressions (#7621)
See: https://github.com/astral-sh/ruff/issues/7455#issuecomment-1732387247.
This commit is contained in:
parent
e41b08f1d0
commit
b194f59aab
4 changed files with 22 additions and 0 deletions
|
@ -56,3 +56,7 @@ setattr(foo.bar, r"baz", None)
|
|||
|
||||
# Regression test for: https://github.com/astral-sh/ruff/issues/7455#issuecomment-1722458885
|
||||
assert getattr(func, '_rpc')is True
|
||||
|
||||
# Regression test for: https://github.com/astral-sh/ruff/issues/7455#issuecomment-1732387247
|
||||
getattr(*foo, "bar")
|
||||
setattr(*foo, "bar", None)
|
||||
|
|
|
@ -64,6 +64,9 @@ pub(crate) fn getattr_with_constant(
|
|||
let [obj, arg] = args else {
|
||||
return;
|
||||
};
|
||||
if obj.is_starred_expr() {
|
||||
return;
|
||||
}
|
||||
let Expr::Constant(ast::ExprConstant {
|
||||
value: Constant::Str(ast::StringConstant { value, .. }),
|
||||
..
|
||||
|
@ -77,6 +80,9 @@ pub(crate) fn getattr_with_constant(
|
|||
if is_mangled_private(value) {
|
||||
return;
|
||||
}
|
||||
if !checker.semantic().is_builtin("getattr") {
|
||||
return;
|
||||
}
|
||||
|
||||
let mut diagnostic = Diagnostic::new(GetAttrWithConstant, expr.range());
|
||||
if checker.patch(diagnostic.kind.rule()) {
|
||||
|
|
|
@ -78,6 +78,9 @@ pub(crate) fn setattr_with_constant(
|
|||
let [obj, name, value] = args else {
|
||||
return;
|
||||
};
|
||||
if obj.is_starred_expr() {
|
||||
return;
|
||||
}
|
||||
let Expr::Constant(ast::ExprConstant {
|
||||
value: Constant::Str(name),
|
||||
..
|
||||
|
@ -91,6 +94,10 @@ pub(crate) fn setattr_with_constant(
|
|||
if is_mangled_private(name) {
|
||||
return;
|
||||
}
|
||||
if !checker.semantic().is_builtin("setattr") {
|
||||
return;
|
||||
}
|
||||
|
||||
// We can only replace a `setattr` call (which is an `Expr`) with an assignment
|
||||
// (which is a `Stmt`) if the `Expr` is already being used as a `Stmt`
|
||||
// (i.e., it's directly within an `Stmt::Expr`).
|
||||
|
|
|
@ -321,6 +321,8 @@ B009_B010.py:58:8: B009 [*] Do not call `getattr` with a constant attribute valu
|
|||
57 | # Regression test for: https://github.com/astral-sh/ruff/issues/7455#issuecomment-1722458885
|
||||
58 | assert getattr(func, '_rpc')is True
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ B009
|
||||
59 |
|
||||
60 | # Regression test for: https://github.com/astral-sh/ruff/issues/7455#issuecomment-1732387247
|
||||
|
|
||||
= help: Replace `getattr` with attribute access
|
||||
|
||||
|
@ -330,5 +332,8 @@ B009_B010.py:58:8: B009 [*] Do not call `getattr` with a constant attribute valu
|
|||
57 57 | # Regression test for: https://github.com/astral-sh/ruff/issues/7455#issuecomment-1722458885
|
||||
58 |-assert getattr(func, '_rpc')is True
|
||||
58 |+assert func._rpc is True
|
||||
59 59 |
|
||||
60 60 | # Regression test for: https://github.com/astral-sh/ruff/issues/7455#issuecomment-1732387247
|
||||
61 61 | getattr(*foo, "bar")
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue