mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-03 15:14:42 +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
|
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
|
### Emit diagnostics for definitely wrong code
|
||||||
|
|
||||||
Even though the expressions in the snippet below are unreachable, we still emit diagnostics for
|
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