Skip to content

Commit caf885c

Browse files
authored
[ruff] Preserve parentheses around deque in fix for unnecessary-empty-iterable-within-deque-call (RUF037) (#18598)
Closes #18552
1 parent 79006df commit caf885c

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

crates/ruff_linter/resources/test/fixtures/ruff/RUF037.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,6 @@ def f():
5656

5757
def f():
5858
queue = deque() # Ok
59+
60+
def f():
61+
x = 0 or(deque)([])

crates/ruff_linter/src/rules/ruff/rules/unnecessary_literal_within_deque_call.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use ruff_macros::{ViolationMetadata, derive_message_formats};
2+
use ruff_python_ast::parenthesize::parenthesized_range;
23
use ruff_python_ast::{self as ast, Expr};
34
use ruff_text_size::Ranged;
45

@@ -107,7 +108,15 @@ fn fix_unnecessary_literal_in_deque(
107108
deque: &ast::ExprCall,
108109
maxlen: Option<&Expr>,
109110
) -> Fix {
110-
let deque_name = checker.locator().slice(deque.func.range());
111+
let deque_name = checker.locator().slice(
112+
parenthesized_range(
113+
deque.func.as_ref().into(),
114+
deque.into(),
115+
checker.comment_ranges(),
116+
checker.source(),
117+
)
118+
.unwrap_or(deque.func.range()),
119+
);
111120
let deque_str = match maxlen {
112121
Some(maxlen) => {
113122
let len_str = checker.locator().slice(maxlen);

crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF037_RUF037.py.snap

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
---
22
source: crates/ruff_linter/src/rules/ruff/mod.rs
3-
snapshot_kind: text
43
---
54
RUF037.py:6:13: RUF037 [*] Unnecessary empty iterable within a deque call
65
|
@@ -127,3 +126,18 @@ RUF037.py:30:13: RUF037 [*] Unnecessary empty iterable within a deque call
127126
31 31 |
128127
32 32 |
129128
33 33 | def f():
129+
130+
RUF037.py:61:13: RUF037 [*] Unnecessary empty iterable within a deque call
131+
|
132+
60 | def f():
133+
61 | x = 0 or(deque)([])
134+
| ^^^^^^^^^^^ RUF037
135+
|
136+
= help: Replace with `deque()`
137+
138+
Safe fix
139+
58 58 | queue = deque() # Ok
140+
59 59 |
141+
60 60 | def f():
142+
61 |- x = 0 or(deque)([])
143+
61 |+ x = 0 or(deque)()

0 commit comments

Comments
 (0)