Improve typing support for the UNSET symbol.
Review Request #13191 — Created Aug. 7, 2023 and submitted — Latest diff uploaded
This reworks the internals of the UNSET symbol (which was introduced in
Djblets 3.3) and makes it easier to integrate it with typing logic and
type checkers.
UnsetSymbolis now anEnum, allowingUNSETto be defined as a
Literal. This works along with a newUnsettable[_T]type alias to
mark whether a parameter or variable allowsUNSETto be set.By making this a
Literal, type checkers can type narrow when a code
compares a value toUNSET, avoiding any type errors that still wanted
to considerUnsetSymbola possible value.
Made use of this in some in-progress code. Verified that mypy and pyright
successfully narrowed the types when comparing againstUNSET.