From 161446a47a7f49b1da96e2547acdb1f963d9af10 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Tue, 10 Jun 2025 02:48:59 -0400 Subject: [PATCH] [ty] Add support for global __debug__ constant (#18540) ## Summary Closes https://github.com/astral-sh/ty/issues/577. Make global `__debug__` a `bool` constant. ## Test Plan Mdtest `global-constants.md` was created to check if resolved type was `bool`. --------- Co-authored-by: David Peter --- .../resources/mdtest/scopes/global-constants.md | 14 ++++++++++++++ crates/ty_python_semantic/src/place.rs | 2 ++ 2 files changed, 16 insertions(+) create mode 100644 crates/ty_python_semantic/resources/mdtest/scopes/global-constants.md diff --git a/crates/ty_python_semantic/resources/mdtest/scopes/global-constants.md b/crates/ty_python_semantic/resources/mdtest/scopes/global-constants.md new file mode 100644 index 0000000000..7163aa6980 --- /dev/null +++ b/crates/ty_python_semantic/resources/mdtest/scopes/global-constants.md @@ -0,0 +1,14 @@ +# Global Constants + +## `__debug__` constant + +The [`__debug__` constant] should be globally available: + +```py +reveal_type(__debug__) # revealed: bool + +def foo(): + reveal_type(__debug__) # revealed: bool +``` + +[`__debug__` constant]: https://docs.python.org/3/library/constants.html#debug__ diff --git a/crates/ty_python_semantic/src/place.rs b/crates/ty_python_semantic/src/place.rs index 0f25a3ff30..253cef46e8 100644 --- a/crates/ty_python_semantic/src/place.rs +++ b/crates/ty_python_semantic/src/place.rs @@ -1073,6 +1073,8 @@ mod implicit_globals { Place::bound(KnownClass::Str.to_instance(db)).into() } else if name == "__builtins__" { Place::bound(Type::any()).into() + } else if name == "__debug__" { + Place::bound(KnownClass::Bool.to_instance(db)).into() } // 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