mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-02 22:55:08 +00:00

Fixes #10426 ## Summary Fix rule B030 giving a false positive with Tuple operations like `+`. [Playground](https://play.ruff.rs/17b086bc-cc43-40a7-b5bf-76d7d5fce78a) ```python try: ... except (ValueError,TypeError) + (EOFError,ArithmeticError): ... ``` ## Reviewer notes This is a little more convoluted than I was expecting -- because we can have valid nested Tuples with operations done on them, the flattening logic has become a bit more complex. Shall I guard this behind --preview? ## Test Plan Unit tested.
132 lines
1.5 KiB
Python
132 lines
1.5 KiB
Python
"""
|
|
Should emit:
|
|
B030:
|
|
- line 12, column 8
|
|
- line 17, column 9
|
|
- line 22, column 21
|
|
- line 27, column 37
|
|
"""
|
|
|
|
try:
|
|
pass
|
|
except 1: # Error
|
|
pass
|
|
|
|
try:
|
|
pass
|
|
except (1, ValueError): # Error
|
|
pass
|
|
|
|
try:
|
|
pass
|
|
except (ValueError, (RuntimeError, (KeyError, TypeError))): # Error
|
|
pass
|
|
|
|
try:
|
|
pass
|
|
except (ValueError, *(RuntimeError, (KeyError, TypeError))): # Error
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (*a, *(RuntimeError, (KeyError, TypeError))): # Error
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except* a + (RuntimeError, (KeyError, TypeError)): # Error
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (ValueError, *(RuntimeError, TypeError)): # OK
|
|
pass
|
|
|
|
try:
|
|
pass
|
|
except (ValueError, *[RuntimeError, *(TypeError,)]): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (*a, *b): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (*a, *(RuntimeError, TypeError)): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (*a, *(b, c)): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (*a, *(*b, *c)): # OK
|
|
pass
|
|
|
|
|
|
def what_to_catch():
|
|
return ...
|
|
|
|
|
|
try:
|
|
pass
|
|
except what_to_catch(): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (a, b) + (c, d): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except* (a, b) + (c, d): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except* (a, (b) + (c)): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (a, b) + (c, d) + (e, f): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except a + (b, c): # OK
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except (ValueError, *(RuntimeError, TypeError), *((ArithmeticError,) + (EOFError,))):
|
|
pass
|
|
|
|
|
|
try:
|
|
pass
|
|
except ((a, b) + (c, d)) + ((e, f) + (g)): # OK
|
|
pass
|
|
|
|
try:
|
|
pass
|
|
except (a, b) * (c, d): # B030
|
|
pass
|