mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-04 02:38:25 +00:00
[red-knot] Add new 'unreachable code' test case (#17306)
## Summary This is a new test case that I don't know how to handle yet. It leads to many false positives in `rich/tests/test_win32_console.py`, which does something like: ```py if sys.platform == "win32": from windows_only_module import some_symbol some_other_symbol = 1 def some_test_case(): use(some_symbol) # Red Knot: unresolved-reference use(some_other_symbol) # Red Knot: unresolved-reference ``` Also adds a test for using unreachable symbols in type annotations or as class bases.
This commit is contained in:
parent
9a5a86769b
commit
00e00b9ad6
1 changed files with 38 additions and 0 deletions
|
@ -432,6 +432,44 @@ if sys.version_info >= (3, 11):
|
|||
import wsgiref.types
|
||||
```
|
||||
|
||||
### Nested scopes
|
||||
|
||||
When we have nested scopes inside the unreachable section, we should not emit diagnostics either:
|
||||
|
||||
```py
|
||||
if False:
|
||||
x = 1
|
||||
|
||||
def f():
|
||||
# TODO
|
||||
# error: [unresolved-reference]
|
||||
print(x)
|
||||
|
||||
class C:
|
||||
def __init__(self):
|
||||
# TODO
|
||||
# error: [unresolved-reference]
|
||||
print(x)
|
||||
```
|
||||
|
||||
### Use of unreachable symbols in type annotations, or as class bases
|
||||
|
||||
We should not show any diagnostics in type annotations inside unreachable sections.
|
||||
|
||||
```py
|
||||
def _():
|
||||
class C: ...
|
||||
return
|
||||
|
||||
# TODO
|
||||
# error: [invalid-type-form] "Variable of type `Never` is not allowed in a type expression"
|
||||
c: C = C()
|
||||
|
||||
# TODO
|
||||
# error: [invalid-base] "Invalid class base with type `Never` (all bases must be a class, `Any`, `Unknown` or `Todo`)"
|
||||
class Sub(C): ...
|
||||
```
|
||||
|
||||
### Emit diagnostics for definitely wrong code
|
||||
|
||||
Even though the expressions in the snippet below are unreachable, we still emit diagnostics for
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue