Detect multi-statement lines in else removal (#9748)

The condition here wasn't quite right -- we can have multiple
statements, all on the same line.

Closes https://github.com/astral-sh/ruff/issues/9732.
This commit is contained in:
Charlie Marsh 2024-01-31 14:08:32 -08:00 committed by GitHub
parent 6e225cb57c
commit ad83944ded
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 33 additions and 2 deletions

View File

@ -192,3 +192,9 @@ elif x == 2:
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';

View File

@ -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(),

View File

@ -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`

View File

@ -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';