From 1c5666ce5da0dff2c1ef51697daefcb8ec966ee6 Mon Sep 17 00:00:00 2001 From: Nikolas Hearp <154913660+njhearp@users.noreply.github.com> Date: Mon, 6 Oct 2025 09:02:27 -0400 Subject: [PATCH] [`RUF051`] Ignore if `else`/`elif` block is present (#20705) ## Summary Fixes #20700 `else` and `elif` blocks could previously be deleted when applying a fix for this rule. If an `else` or `elif` branch is detected the rule will not trigger. So now the rule will only flag if it is safe. --- .../resources/test/fixtures/ruff/RUF051.py | 12 ++++++++++++ .../src/rules/ruff/rules/if_key_in_dict_del.rs | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/crates/ruff_linter/resources/test/fixtures/ruff/RUF051.py b/crates/ruff_linter/resources/test/fixtures/ruff/RUF051.py index 7233bef5b5..d544f76924 100644 --- a/crates/ruff_linter/resources/test/fixtures/ruff/RUF051.py +++ b/crates/ruff_linter/resources/test/fixtures/ruff/RUF051.py @@ -128,3 +128,15 @@ if f"0" in d: # f-string if k in a.d: # Attribute dict del a.d[k] + +if k in d: # else statement + del d[k] +else: + pass + +if k in d: # elif and else statements + del d[k] +elif 0 in d: + del d[0] +else: + pass diff --git a/crates/ruff_linter/src/rules/ruff/rules/if_key_in_dict_del.rs b/crates/ruff_linter/src/rules/ruff/rules/if_key_in_dict_del.rs index 969aff55b2..b167a78894 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/if_key_in_dict_del.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/if_key_in_dict_del.rs @@ -45,6 +45,10 @@ impl AlwaysFixableViolation for IfKeyInDictDel { /// RUF051 pub(crate) fn if_key_in_dict_del(checker: &Checker, stmt: &StmtIf) { + if !stmt.elif_else_clauses.is_empty() { + return; + } + let [Stmt::Delete(delete)] = &stmt.body[..] else { return; };