Files
ruff/crates/red_knot_python_semantic/resources/mdtest/scopes/builtin.md
aditya pillai ed4a0b34ba [red-knot] don't include Unknown in the type for a conditionally-defined import (#13563)
## Summary

Fixes the bug described in #13514 where an unbound public type defaulted
to the type or `Unknown`, whereas it should only be the type if unbound.

## Test Plan

Added a new test case

---------

Co-authored-by: Carl Meyer <carl@astral.sh>
2024-10-16 13:46:03 -07:00

631 B

Builtin scope

Conditionally global or builtin

If a builtin name is conditionally defined as a global, a name lookup should union the builtin type with the conditionally-defined type:

def returns_bool() -> bool:
    return True

if returns_bool():
    copyright = 1

def f():
    reveal_type(copyright)  # revealed: Literal[copyright] | Literal[1]

Conditionally global or builtin, with annotation

Same is true if the name is annotated:

def returns_bool() -> bool:
    return True

if returns_bool():
    copyright: int = 1

def f():
    reveal_type(copyright)  # revealed: Literal[copyright] | int