ruff/crates/ty_python_semantic/resources/mdtest/import/builtins.md
2025-05-03 19:49:15 +02:00

1.3 KiB

Builtins

Importing builtin module

Builtin symbols can be explicitly imported:

import builtins

reveal_type(builtins.chr)  # revealed: def chr(i: SupportsIndex, /) -> str

Implicit use of builtin

Or used implicitly:

reveal_type(chr)  # revealed: def chr(i: SupportsIndex, /) -> str
reveal_type(str)  # revealed: Literal[str]

Builtin symbol from custom typeshed

If we specify a custom typeshed, we can use the builtin symbol from it, and no longer access the builtins from the "actual" vendored typeshed:

[environment]
typeshed = "/typeshed"

/typeshed/stdlib/builtins.pyi:

class Custom: ...

custom_builtin: Custom

/typeshed/stdlib/typing_extensions.pyi:

def reveal_type(obj, /): ...
reveal_type(custom_builtin)  # revealed: Custom

# error: [unresolved-reference]
reveal_type(str)  # revealed: Unknown

Unknown builtin (later defined)

foo has a type of Unknown in this example, as it relies on bar which has not been defined at that point:

[environment]
typeshed = "/typeshed"

/typeshed/stdlib/builtins.pyi:

foo = bar
bar = 1

/typeshed/stdlib/typing_extensions.pyi:

def reveal_type(obj, /): ...
reveal_type(foo)  # revealed: Unknown