---
source: crates/ruff_linter/src/rules/ruff/mod.rs
snapshot_kind: text
---
RUF021.py:12:10: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
11 | a, b, c = 1, 0, 2
12 | x = a or b and c  # RUF021: => `a or (b and c)`
   |          ^^^^^^^ RUF021
13 | x = a or b and c  # looooooooooooooooooooooooooooooong comment but it won't prevent an autofix
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
9  9  | # as part of a chain.
10 10 | 
11 11 | a, b, c = 1, 0, 2
12    |-x = a or b and c  # RUF021: => `a or (b and c)`
   12 |+x = a or (b and c)  # RUF021: => `a or (b and c)`
13 13 | x = a or b and c  # looooooooooooooooooooooooooooooong comment but it won't prevent an autofix
14 14 | 
15 15 | a, b, c = 0, 1, 2

RUF021.py:13:10: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
11 | a, b, c = 1, 0, 2
12 | x = a or b and c  # RUF021: => `a or (b and c)`
13 | x = a or b and c  # looooooooooooooooooooooooooooooong comment but it won't prevent an autofix
   |          ^^^^^^^ RUF021
14 | 
15 | a, b, c = 0, 1, 2
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
10 10 | 
11 11 | a, b, c = 1, 0, 2
12 12 | x = a or b and c  # RUF021: => `a or (b and c)`
13    |-x = a or b and c  # looooooooooooooooooooooooooooooong comment but it won't prevent an autofix
   13 |+x = a or (b and c)  # looooooooooooooooooooooooooooooong comment but it won't prevent an autofix
14 14 | 
15 15 | a, b, c = 0, 1, 2
16 16 | y = a and b or c  # RUF021: => `(a and b) or c`

RUF021.py:16:5: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
15 | a, b, c = 0, 1, 2
16 | y = a and b or c  # RUF021: => `(a and b) or c`
   |     ^^^^^^^ RUF021
17 | 
18 | a, b, c, d = 1, 2, 0, 3
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
13 13 | x = a or b and c  # looooooooooooooooooooooooooooooong comment but it won't prevent an autofix
14 14 | 
15 15 | a, b, c = 0, 1, 2
16    |-y = a and b or c  # RUF021: => `(a and b) or c`
   16 |+y = (a and b) or c  # RUF021: => `(a and b) or c`
17 17 | 
18 18 | a, b, c, d = 1, 2, 0, 3
19 19 | if a or b or c and d:  # RUF021: => `a or b or (c and d)`

RUF021.py:19:14: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
18 | a, b, c, d = 1, 2, 0, 3
19 | if a or b or c and d:  # RUF021: => `a or b or (c and d)`
   |              ^^^^^^^ RUF021
20 |     pass
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
16 16 | y = a and b or c  # RUF021: => `(a and b) or c`
17 17 | 
18 18 | a, b, c, d = 1, 2, 0, 3
19    |-if a or b or c and d:  # RUF021: => `a or b or (c and d)`
   19 |+if a or b or (c and d):  # RUF021: => `a or b or (c and d)`
20 20 |     pass
21 21 | 
22 22 | a, b, c, d = 0, 0, 2, 3

RUF021.py:26:11: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
24 | if bool():
25 |     pass
26 | elif a or b and c or d:  # RUF021: => `a or (b and c) or d`
   |           ^^^^^^^ RUF021
27 |     pass
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
23 23 | 
24 24 | if bool():
25 25 |     pass
26    |-elif a or b and c or d:  # RUF021: => `a or (b and c) or d`
   26 |+elif a or (b and c) or d:  # RUF021: => `a or (b and c) or d`
27 27 |     pass
28 28 | 
29 29 | a, b, c, d = 0, 1, 0, 2

RUF021.py:30:7: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
29 | a, b, c, d = 0, 1, 0, 2
30 | while a and b or c and d:  # RUF021: => `(and b) or (c and d)`
   |       ^^^^^^^ RUF021
31 |     pass
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
27 27 |     pass
28 28 | 
29 29 | a, b, c, d = 0, 1, 0, 2
30    |-while a and b or c and d:  # RUF021: => `(and b) or (c and d)`
   30 |+while (a and b) or c and d:  # RUF021: => `(and b) or (c and d)`
31 31 |     pass
32 32 | 
33 33 | b, c, d, e = 2, 3, 0, 4

RUF021.py:30:18: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
29 | a, b, c, d = 0, 1, 0, 2
30 | while a and b or c and d:  # RUF021: => `(and b) or (c and d)`
   |                  ^^^^^^^ RUF021
31 |     pass
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
27 27 |     pass
28 28 | 
29 29 | a, b, c, d = 0, 1, 0, 2
30    |-while a and b or c and d:  # RUF021: => `(and b) or (c and d)`
   30 |+while a and b or (c and d):  # RUF021: => `(and b) or (c and d)`
31 31 |     pass
32 32 | 
33 33 | b, c, d, e = 2, 3, 0, 4

RUF021.py:35:44: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
33 | b, c, d, e = 2, 3, 0, 4
34 | # RUF021: => `a or b or c or (d and e)`:
35 | z = [a for a in range(5) if a or b or c or d and e]
   |                                            ^^^^^^^ RUF021
36 | 
37 | a, b, c, d = 0, 1, 3, 0
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
32 32 | 
33 33 | b, c, d, e = 2, 3, 0, 4
34 34 | # RUF021: => `a or b or c or (d and e)`:
35    |-z = [a for a in range(5) if a or b or c or d and e]
   35 |+z = [a for a in range(5) if a or b or c or (d and e)]
36 36 | 
37 37 | a, b, c, d = 0, 1, 3, 0
38 38 | assert not a and b or c or d  # RUF021: => `(not a and b) or c or d`

RUF021.py:38:8: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
37 | a, b, c, d = 0, 1, 3, 0
38 | assert not a and b or c or d  # RUF021: => `(not a and b) or c or d`
   |        ^^^^^^^^^^^ RUF021
39 | 
40 | if (not a) and b or c or d:  # RUF021: => `((not a) and b) or c or d`
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
35 35 | z = [a for a in range(5) if a or b or c or d and e]
36 36 | 
37 37 | a, b, c, d = 0, 1, 3, 0
38    |-assert not a and b or c or d  # RUF021: => `(not a and b) or c or d`
   38 |+assert (not a and b) or c or d  # RUF021: => `(not a and b) or c or d`
39 39 | 
40 40 | if (not a) and b or c or d:  # RUF021: => `((not a) and b) or c or d`
41 41 |     if (not a and b) or c or d:  # OK

RUF021.py:40:4: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
38 | assert not a and b or c or d  # RUF021: => `(not a and b) or c or d`
39 | 
40 | if (not a) and b or c or d:  # RUF021: => `((not a) and b) or c or d`
   |    ^^^^^^^^^^^^^ RUF021
41 |     if (not a and b) or c or d:  # OK
42 |         pass
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
37 37 | a, b, c, d = 0, 1, 3, 0
38 38 | assert not a and b or c or d  # RUF021: => `(not a and b) or c or d`
39 39 | 
40    |-if (not a) and b or c or d:  # RUF021: => `((not a) and b) or c or d`
   40 |+if ((not a) and b) or c or d:  # RUF021: => `((not a) and b) or c or d`
41 41 |     if (not a and b) or c or d:  # OK
42 42 |         pass
43 43 | 

RUF021.py:46:8: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
44 |   if (
45 |       some_reasonably_long_condition
46 |       or some_other_reasonably_long_condition
   |  ________^
47 | |     and some_third_reasonably_long_condition
   | |____________________________________________^ RUF021
48 |       or some_fourth_reasonably_long_condition
49 |       and some_fifth_reasonably_long_condition
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
43 43 | 
44 44 | if (
45 45 |     some_reasonably_long_condition
46    |-    or some_other_reasonably_long_condition
47    |-    and some_third_reasonably_long_condition
   46 |+    or (some_other_reasonably_long_condition
   47 |+    and some_third_reasonably_long_condition)
48 48 |     or some_fourth_reasonably_long_condition
49 49 |     and some_fifth_reasonably_long_condition
50 50 |     # a comment

RUF021.py:48:8: RUF021 [*] Parenthesize `a and b` expressions when chaining `and` and `or` together, to make the precedence clear
   |
46 |       or some_other_reasonably_long_condition
47 |       and some_third_reasonably_long_condition
48 |       or some_fourth_reasonably_long_condition
   |  ________^
49 | |     and some_fifth_reasonably_long_condition
50 | |     # a comment
51 | |     and some_sixth_reasonably_long_condition
52 | |     and some_seventh_reasonably_long_condition
   | |______________________________________________^ RUF021
53 |       # another comment
54 |       or some_eighth_reasonably_long_condition
   |
   = help: Parenthesize the `and` subexpression

ℹ Safe fix
45 45 |     some_reasonably_long_condition
46 46 |     or some_other_reasonably_long_condition
47 47 |     and some_third_reasonably_long_condition
48    |-    or some_fourth_reasonably_long_condition
   48 |+    or (some_fourth_reasonably_long_condition
49 49 |     and some_fifth_reasonably_long_condition
50 50 |     # a comment
51 51 |     and some_sixth_reasonably_long_condition
52    |-    and some_seventh_reasonably_long_condition
   52 |+    and some_seventh_reasonably_long_condition)
53 53 |     # another comment
54 54 |     or some_eighth_reasonably_long_condition
55 55 | ):
