Mercurial > hg
view mercurial/typelib.py @ 49803:55d45d0de4e7
typing: add type hints to pycompat.bytestr
The problem with leaving pytype to its own devices here was that for functions
that returned a bytestr, pytype inferred `Union[bytes, int]`. It now accepts
that it can be treated as plain bytes.
I wasn't able to figure out the arg type for `__getitem__`- `SupportsIndex`
(which PyCharm indicated is how the superclass function is typed) got flagged:
File "/mnt/c/Users/Matt/hg/mercurial/pycompat.py", line 236, in __getitem__:
unsupported operand type(s) for item retrieval: bytestr and SupportsIndex [unsupported-operands]
Function __getitem__ on bytestr expects int
But some caller got flagged when I marked it as `int`.
There's some minor spillover problems elsewhere- pytype doesn't seem to
recognize that `bytes.startswith()` can optionally take a 3rd and 4th arg, so
those few places have the warning disabled. It also flags where the tar API is
being abused, but that would be a tricky refactor (and would require typing
extensions until py3.7 is dropped), so disable those too.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 14 Dec 2022 01:51:33 -0500 |
parents | 8147abc05794 |
children | f3b34386d3e0 |
line wrap: on
line source
# typelib.py - type hint aliases and support # # Copyright 2022 Matt Harbison <matt_harbison@yahoo.com> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. import typing # Note: this is slightly different from pycompat.TYPE_CHECKING, as using # pycompat causes the BinaryIO_Proxy type to be resolved to ``object`` when # used as the base class during a pytype run. TYPE_CHECKING = typing.TYPE_CHECKING # The BinaryIO class provides empty methods, which at runtime means that # ``__getattr__`` on the proxy classes won't get called for the methods that # should delegate to the internal object. So to avoid runtime changes because # of the required typing inheritance, just use BinaryIO when typechecking, and # ``object`` otherwise. if TYPE_CHECKING: from typing import ( BinaryIO, ) BinaryIO_Proxy = BinaryIO else: BinaryIO_Proxy = object