Commit d0797f1
authored
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>
```1 parent e9bb695 commit d0797f1
1 file changed
+2
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
| 66 | + | |
67 | 67 | | |
68 | 68 | | |
69 | | - | |
| 69 | + | |
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
| |||
0 commit comments