mirror of https://github.com/astral-sh/ruff
[ty] support accessing `__builtins__` global (#18118)
## Summary The PR adds an explicit check for `"__builtins__"` during name lookup, similar to how `"__file__"` is implemented. The inferred type is `Any`. closes https://github.com/astral-sh/ty/issues/393 ## Test Plan Added a markdown test for `__builtins__`. --------- Co-authored-by: David Peter <sharkdp@users.noreply.github.com>
This commit is contained in:
parent
69393b2e6e
commit
d3a7cb3fe4
|
|
@ -15,6 +15,15 @@ reveal_type(__package__) # revealed: str | None
|
||||||
reveal_type(__doc__) # revealed: str | None
|
reveal_type(__doc__) # revealed: str | None
|
||||||
reveal_type(__spec__) # revealed: ModuleSpec | None
|
reveal_type(__spec__) # revealed: ModuleSpec | None
|
||||||
reveal_type(__path__) # revealed: MutableSequence[str]
|
reveal_type(__path__) # revealed: MutableSequence[str]
|
||||||
|
reveal_type(__builtins__) # revealed: Any
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
reveal_type(sys.__builtins__) # revealed: Any
|
||||||
|
|
||||||
|
from builtins import __builtins__ as __bi__
|
||||||
|
|
||||||
|
reveal_type(__bi__) # revealed: Any
|
||||||
|
|
||||||
class X:
|
class X:
|
||||||
reveal_type(__name__) # revealed: str
|
reveal_type(__name__) # revealed: str
|
||||||
|
|
|
||||||
|
|
@ -324,6 +324,8 @@ pub(crate) fn imported_symbol<'db>(
|
||||||
|| {
|
|| {
|
||||||
if name == "__getattr__" {
|
if name == "__getattr__" {
|
||||||
Symbol::Unbound.into()
|
Symbol::Unbound.into()
|
||||||
|
} else if name == "__builtins__" {
|
||||||
|
Symbol::bound(Type::any()).into()
|
||||||
} else {
|
} else {
|
||||||
KnownClass::ModuleType.to_instance(db).member(db, name)
|
KnownClass::ModuleType.to_instance(db).member(db, name)
|
||||||
}
|
}
|
||||||
|
|
@ -1013,6 +1015,8 @@ mod implicit_globals {
|
||||||
// None`.
|
// None`.
|
||||||
if name == "__file__" {
|
if name == "__file__" {
|
||||||
Symbol::bound(KnownClass::Str.to_instance(db)).into()
|
Symbol::bound(KnownClass::Str.to_instance(db)).into()
|
||||||
|
} else if name == "__builtins__" {
|
||||||
|
Symbol::bound(Type::any()).into()
|
||||||
}
|
}
|
||||||
// In general we wouldn't check to see whether a symbol exists on a class before doing the
|
// In general we wouldn't check to see whether a symbol exists on a class before doing the
|
||||||
// `.member()` call on the instance type -- we'd just do the `.member`() call on the instance
|
// `.member()` call on the instance type -- we'd just do the `.member`() call on the instance
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue