Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix typing issues around Range/RangeValue (#1196)
In order for the `_RangeValue` protocol to type check properly, it needs to reference `Self`, not itself. Both pyright and mypy show a ton of errors when type checking this before these changes. (I've omitted non-relevant errors here): ``` % pyright tests/test_types.py /Users/dmcgee/projects/sbl/asyncpg/tests/test_types.py /Users/dmcgee/projects/sbl/asyncpg/tests/test_types.py:18:25 - error: Argument of type "Literal[1]" cannot be assigned to parameter "lower" of type "_RV@Range | None" in function "__init__" Type "Literal[1]" is not assignable to type "_RV@Range | None" Type "Literal[1]" is not assignable to type "_RangeValue" "Literal[1]" is incompatible with protocol "_RangeValue" "__lt__" is an incompatible type Type "(value: int, /) -> bool" is not assignable to type "(__other: _RV@__lt__, /) -> bool" "__gt__" is an incompatible type Type "(value: int, /) -> bool" is not assignable to type "(__other: _RV@__gt__, /) -> bool" "Literal[1]" is not assignable to "None" (reportArgumentType) /Users/dmcgee/projects/sbl/asyncpg/tests/test_types.py:18:34 - error: Argument of type "Literal[5]" cannot be assigned to parameter "upper" of type "_RV@Range | None" in function "__init__" Type "Literal[5]" is not assignable to type "_RV@Range | None" Type "Literal[5]" is not assignable to type "_RangeValue" "Literal[5]" is incompatible with protocol "_RangeValue" "__lt__" is an incompatible type Type "(value: int, /) -> bool" is not assignable to type "(__other: _RV@__lt__, /) -> bool" "__gt__" is an incompatible type Type "(value: int, /) -> bool" is not assignable to type "(__other: _RV@__gt__, /) -> bool" "Literal[5]" is not assignable to "None" (reportArgumentType) ... % mypy tests/test_types.py | grep arg-type tests/test_types.py:18: error: Argument "lower" to "Range" has incompatible type "int"; expected "None" [arg-type] tests/test_types.py:18: error: Argument "upper" to "Range" has incompatible type "int"; expected "None" [arg-type] ... (19 more errors) ``` After this change, the type checking comes back clean: ``` % pyright tests/test_types.py 0 errors, 0 warnings, 0 informations % mypy tests/test_types.py | grep arg-type <no output> ```
- Loading branch information