From d4f859fa74688ce639b4ee120732744e9571a89d Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Wed, 31 Jan 2024 17:02:23 -0500 Subject: [PATCH] Detect multi-statement lines in else removal --- .../test/fixtures/flake8_return/RET505.py | 6 ++++++ .../src/rules/flake8_return/rules/function.rs | 4 ++-- ...__flake8_return__tests__RET505_RET505.py.snap | 9 +++++++++ ...return__tests__preview__RET505_RET505.py.snap | 16 ++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/crates/ruff_linter/resources/test/fixtures/flake8_return/RET505.py b/crates/ruff_linter/resources/test/fixtures/flake8_return/RET505.py index 5af98f7bfe1c5..f36a19c2ca5f0 100644 --- a/crates/ruff_linter/resources/test/fixtures/flake8_return/RET505.py +++ b/crates/ruff_linter/resources/test/fixtures/flake8_return/RET505.py @@ -192,3 +192,9 @@ def bar9(): y = "b" else: y = "c" + + +# Regression test for: https://github.com/astral-sh/ruff/issues/9732 +def sb(self): + if self._sb is not None: return self._sb + else: self._sb = '\033[01;%dm'; self._sa = '\033[0;0m'; diff --git a/crates/ruff_linter/src/rules/flake8_return/rules/function.rs b/crates/ruff_linter/src/rules/flake8_return/rules/function.rs index 96df747d43ac2..e1c6f3676b275 100644 --- a/crates/ruff_linter/src/rules/flake8_return/rules/function.rs +++ b/crates/ruff_linter/src/rules/flake8_return/rules/function.rs @@ -820,8 +820,8 @@ fn remove_else( // If the statement is on the same line as the `else`, just remove the `else: `. // Ex) `else: return True` -> `return True` - if let [first] = elif_else.body.as_slice() { - if indexer.in_multi_statement_line(first, locator) { + if let Some(first) = elif_else.body.first() { + if indexer.preceded_by_multi_statement_line(first, locator) { return Ok(Fix::safe_edit(Edit::deletion( elif_else.start(), first.start(), diff --git a/crates/ruff_linter/src/rules/flake8_return/snapshots/ruff_linter__rules__flake8_return__tests__RET505_RET505.py.snap b/crates/ruff_linter/src/rules/flake8_return/snapshots/ruff_linter__rules__flake8_return__tests__RET505_RET505.py.snap index 7092059aa00bc..bb4d283029aec 100644 --- a/crates/ruff_linter/src/rules/flake8_return/snapshots/ruff_linter__rules__flake8_return__tests__RET505_RET505.py.snap +++ b/crates/ruff_linter/src/rules/flake8_return/snapshots/ruff_linter__rules__flake8_return__tests__RET505_RET505.py.snap @@ -162,4 +162,13 @@ RET505.py:183:5: RET505 Unnecessary `else` after `return` statement | = help: Remove unnecessary `else` +RET505.py:200:5: RET505 Unnecessary `else` after `return` statement + | +198 | def sb(self): +199 | if self._sb is not None: return self._sb +200 | else: self._sb = '\033[01;%dm'; self._sa = '\033[0;0m'; + | ^^^^ RET505 + | + = help: Remove unnecessary `else` + diff --git a/crates/ruff_linter/src/rules/flake8_return/snapshots/ruff_linter__rules__flake8_return__tests__preview__RET505_RET505.py.snap b/crates/ruff_linter/src/rules/flake8_return/snapshots/ruff_linter__rules__flake8_return__tests__preview__RET505_RET505.py.snap index 36de3ce974451..7f57b62a558ab 100644 --- a/crates/ruff_linter/src/rules/flake8_return/snapshots/ruff_linter__rules__flake8_return__tests__preview__RET505_RET505.py.snap +++ b/crates/ruff_linter/src/rules/flake8_return/snapshots/ruff_linter__rules__flake8_return__tests__preview__RET505_RET505.py.snap @@ -343,4 +343,20 @@ RET505.py:183:5: RET505 [*] Unnecessary `else` after `return` statement 186 185 | 187 186 | x = 0 +RET505.py:200:5: RET505 [*] Unnecessary `else` after `return` statement + | +198 | def sb(self): +199 | if self._sb is not None: return self._sb +200 | else: self._sb = '\033[01;%dm'; self._sa = '\033[0;0m'; + | ^^^^ RET505 + | + = help: Remove unnecessary `else` + +ℹ Safe fix +197 197 | # Regression test for: https://github.com/astral-sh/ruff/issues/9732 +198 198 | def sb(self): +199 199 | if self._sb is not None: return self._sb +200 |- else: self._sb = '\033[01;%dm'; self._sa = '\033[0;0m'; + 200 |+ self._sb = '\033[01;%dm'; self._sa = '\033[0;0m'; +