mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-29 11:07:54 +00:00
[flake8-simplify] Skip SIM911 when unknown arguments are present (#20697)
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / Fuzz for new ty panics (push) Blocked by required conditions
CI / ty completion evaluation (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo fmt (push) Waiting to run
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (${{ github.repository == 'astral-sh/ruff' && 'depot-windows-2022-16' || 'windows-latest' }}) (push) Blocked by required conditions
CI / cargo test (macos-latest) (push) Blocked by required conditions
CI / benchmarks walltime (small|large) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / check playground (push) Blocked by required conditions
CI / benchmarks instrumented (ruff) (push) Blocked by required conditions
CI / benchmarks instrumented (ty) (push) Blocked by required conditions
CI / benchmarks walltime (medium|multithreaded) (push) Blocked by required conditions
[ty Playground] Release / publish (push) Waiting to run
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / Fuzz for new ty panics (push) Blocked by required conditions
CI / ty completion evaluation (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo fmt (push) Waiting to run
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (${{ github.repository == 'astral-sh/ruff' && 'depot-windows-2022-16' || 'windows-latest' }}) (push) Blocked by required conditions
CI / cargo test (macos-latest) (push) Blocked by required conditions
CI / benchmarks walltime (small|large) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / check playground (push) Blocked by required conditions
CI / benchmarks instrumented (ruff) (push) Blocked by required conditions
CI / benchmarks instrumented (ty) (push) Blocked by required conditions
CI / benchmarks walltime (medium|multithreaded) (push) Blocked by required conditions
[ty Playground] Release / publish (push) Waiting to run
<!-- 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? --> Fixes #18778 Prevent SIM911 from triggering when zip() is called on .keys()/.values() that take any positional or keyword arguments, so Ruff never suggests the lossy rewrite. ## Test Plan <!-- How was it tested? --> Added a test case to SIM911.py.
This commit is contained in:
parent
4b0fa5f270
commit
a51a0f16e4
3 changed files with 23 additions and 6 deletions
|
|
@ -34,3 +34,7 @@ def foo():
|
||||||
# https://github.com/astral-sh/ruff/issues/18776
|
# https://github.com/astral-sh/ruff/issues/18776
|
||||||
flag_stars = {}
|
flag_stars = {}
|
||||||
for country, stars in(zip)(flag_stars.keys(), flag_stars.values()):...
|
for country, stars in(zip)(flag_stars.keys(), flag_stars.values()):...
|
||||||
|
|
||||||
|
# Regression test for https://github.com/astral-sh/ruff/issues/18778
|
||||||
|
d = {}
|
||||||
|
for country, stars in zip(d.keys(*x), d.values("hello")):...
|
||||||
|
|
|
||||||
|
|
@ -78,13 +78,18 @@ pub(crate) fn zip_dict_keys_and_values(checker: &Checker, expr: &ast::ExprCall)
|
||||||
let [arg1, arg2] = &args[..] else {
|
let [arg1, arg2] = &args[..] else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let Some((var1, attr1)) = get_var_attr(arg1) else {
|
let Some((var1, attr1, args1)) = get_var_attr_args(arg1) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let Some((var2, attr2)) = get_var_attr(arg2) else {
|
let Some((var2, attr2, args2)) = get_var_attr_args(arg2) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
if var1.id != var2.id || attr1 != "keys" || attr2 != "values" {
|
if var1.id != var2.id
|
||||||
|
|| attr1 != "keys"
|
||||||
|
|| attr2 != "values"
|
||||||
|
|| !args1.is_empty()
|
||||||
|
|| !args2.is_empty()
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if !checker.semantic().match_builtin_expr(func, "zip") {
|
if !checker.semantic().match_builtin_expr(func, "zip") {
|
||||||
|
|
@ -122,8 +127,11 @@ pub(crate) fn zip_dict_keys_and_values(checker: &Checker, expr: &ast::ExprCall)
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_var_attr(expr: &Expr) -> Option<(&ExprName, &Identifier)> {
|
fn get_var_attr_args(expr: &Expr) -> Option<(&ExprName, &Identifier, &Arguments)> {
|
||||||
let Expr::Call(ast::ExprCall { func, .. }) = expr else {
|
let Expr::Call(ast::ExprCall {
|
||||||
|
func, arguments, ..
|
||||||
|
}) = expr
|
||||||
|
else {
|
||||||
return None;
|
return None;
|
||||||
};
|
};
|
||||||
let Expr::Attribute(ExprAttribute { value, attr, .. }) = func.as_ref() else {
|
let Expr::Attribute(ExprAttribute { value, attr, .. }) = func.as_ref() else {
|
||||||
|
|
@ -132,5 +140,5 @@ fn get_var_attr(expr: &Expr) -> Option<(&ExprName, &Identifier)> {
|
||||||
let Expr::Name(var_name) = value.as_ref() else {
|
let Expr::Name(var_name) = value.as_ref() else {
|
||||||
return None;
|
return None;
|
||||||
};
|
};
|
||||||
Some((var_name, attr))
|
Some((var_name, attr, arguments))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,8 @@ SIM911 [*] Use ` flag_stars.items()` instead of `(zip)(flag_stars.keys(), flag_s
|
||||||
35 | flag_stars = {}
|
35 | flag_stars = {}
|
||||||
36 | for country, stars in(zip)(flag_stars.keys(), flag_stars.values()):...
|
36 | for country, stars in(zip)(flag_stars.keys(), flag_stars.values()):...
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
37 |
|
||||||
|
38 | # Regression test for https://github.com/astral-sh/ruff/issues/18778
|
||||||
|
|
|
|
||||||
help: Replace `(zip)(flag_stars.keys(), flag_stars.values())` with ` flag_stars.items()`
|
help: Replace `(zip)(flag_stars.keys(), flag_stars.values())` with ` flag_stars.items()`
|
||||||
33 |
|
33 |
|
||||||
|
|
@ -88,3 +90,6 @@ help: Replace `(zip)(flag_stars.keys(), flag_stars.values())` with ` flag_stars.
|
||||||
35 | flag_stars = {}
|
35 | flag_stars = {}
|
||||||
- for country, stars in(zip)(flag_stars.keys(), flag_stars.values()):...
|
- for country, stars in(zip)(flag_stars.keys(), flag_stars.values()):...
|
||||||
36 + for country, stars in flag_stars.items():...
|
36 + for country, stars in flag_stars.items():...
|
||||||
|
37 |
|
||||||
|
38 | # Regression test for https://github.com/astral-sh/ruff/issues/18778
|
||||||
|
39 | d = {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue