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