changeset 46042:8dca9051a859

cext: add .pyi files for C extensions I'm unsure if all the annotations are completely accurate. But having these helps type checkers reason about our C extensions. Differential Revision: https://phab.mercurial-scm.org/D9281
author Gregory Szorc <gregory.szorc@gmail.com>
date Sat, 07 Nov 2020 16:28:30 -0800
parents 9624bf057c2a
children b9ebe0bfed4e
files mercurial/cext/base85.pyi mercurial/cext/bdiff.pyi mercurial/cext/mpatch.pyi mercurial/cext/osutil.pyi mercurial/cext/parsers.pyi
diffstat 5 files changed, 132 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/cext/base85.pyi	Sat Nov 07 16:28:30 2020 -0800
@@ -0,0 +1,6 @@
+from typing import Optional
+
+version: int
+
+def b85encode(text: bytes, pad: Optional[int]) -> bytes: ...
+def b85decode(text: bytes) -> bytes: ...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/cext/bdiff.pyi	Sat Nov 07 16:28:30 2020 -0800
@@ -0,0 +1,12 @@
+from typing import (
+    List,
+    Tuple,
+)
+
+version: int
+
+def bdiff(a: bytes, b: bytes): bytes
+def blocks(a: bytes, b: bytes) -> List[Tuple[int, int, int, int]]: ...
+def fixws(s: bytes, allws: bool) -> bytes: ...
+def splitnewlines(text: bytes) -> List[bytes]: ...
+def xdiffblocks(a: bytes, b: bytes) -> List[Tuple[int, int, int, int]]: ...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/cext/mpatch.pyi	Sat Nov 07 16:28:30 2020 -0800
@@ -0,0 +1,10 @@
+from typing import (
+    List,
+)
+
+version: int
+
+class mpatchError(Exception): ...
+
+def patches(text: bytes, bins: List[bytes]) -> bytes: ...
+def patchedsize(orig: int, data: bytes) -> int: ...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/cext/osutil.pyi	Sat Nov 07 16:28:30 2020 -0800
@@ -0,0 +1,26 @@
+from typing import (
+    AnyStr,
+    IO,
+    List,
+    Sequence,
+)
+
+version: int
+
+class stat:
+    st_dev: int
+    st_mode: int
+    st_nlink: int
+    st_size: int
+    st_mtime: int
+    st_ctime: int
+
+def listdir(path: bytes, st: bool, skip: bool) -> List[stat]: ...
+def posixfile(name: AnyStr, mode: bytes, buffering: int) -> IO: ...
+def statfiles(names: Sequence[bytes]) -> List[stat]: ...
+def recvfds(sockfd: int) -> List[int]: ...
+def setprocname(name: bytes) -> None: ...
+def getfstype(path: bytes) -> bytes: ...
+def getfsmountpoint(path: bytes) -> bytes: ...
+def unblocksignal(sig: int) -> None: ...
+def isgui() -> bool: ...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/cext/parsers.pyi	Sat Nov 07 16:28:30 2020 -0800
@@ -0,0 +1,78 @@
+from typing import (
+    Callable,
+    Dict,
+    Iterator,
+    List,
+    Optional,
+    Set,
+    Tuple,
+    Union,
+)
+
+version: int
+versionerrortext: str
+
+class dirstatetuple:
+    __doc__: str
+
+    def __len__(self) -> int: ...
+    def __getitem__(self, key: int) -> Union[bytes, int]: ...
+
+# From dirs.c
+
+class dirs:
+    __doc__: str
+    def __init__(self, source, skipchar: bytes): ...
+    def __iter__(self) -> Iterator[bytes]: ...
+    def addpath(self, path: bytes) -> None: ...
+    def delpath(self, path: bytes) -> None: ...
+
+# From manifest.c
+class lazymanifest:
+    def __init__(self, data: bytes): ...
+    def __iter__(self) -> Iterator[bytes]: ...
+
+    def __len__(self) -> int: ...
+    def __getitem__(self, item: bytes) -> Optional[Tuple[bytes, bytes]]: ...
+    def __setitem__(self, key: bytes, value: Tuple[bytes, bytes]) -> None: ...
+    def __delitem__(self, key: bytes) -> None: ...
+
+    def iterkeys(self) -> Iterator[bytes]: ...
+    def iterentries(self) -> Iterator[Tuple[bytes, bytes, bytes]]: ...
+    def copy(self) -> lazymanifest: ...
+    def filtercopy(self, matchfn: Callable[[bytes], bool]) -> lazymanifest: ...
+    def diff(self, other: lazymanifest, clean: Optional[bool]) -> Dict[bytes, Tuple[bytes, Tuple]]: ...
+    def text(self) -> bytes: ...
+
+# From revlog.c
+
+class index:
+    __doc__: str
+
+    nodemap: Dict[bytes, int]
+
+    def ancestors(self, *args: int) -> Iterator[int]: ...
+    def commonancestorsheads(self, *args: int) -> List[int]: ...
+    def clearcaches(self) -> None: ...
+    def get(self, value: bytes) -> Optional[int]: ...
+    def get_rev(self, value: bytes) -> Optional[int]: ...
+    def has_node(self, value: Union[int, bytes]) -> bool: ...
+    def rev(self, node: bytes) -> int: ...
+    def computephasesmapsets(self, root: Dict[int, Set[bytes]]) -> Tuple[int, Dict[int, Set[bytes]]]: ...
+    def reachableroots2(self, minroot: int, heads: List[int], roots: List[int], includepath: bool) -> List[int]: ...
+    def headrevs(self, filteredrevs: Optional[List[int]]) -> List[int]: ...
+    def headrevsfiltered(self, filteredrevs: Optional[List[int]]) -> List[int]: ...
+    def issnapshot(self, value: int) -> bool: ...
+    def findsnapshots(self, cache: Dict[int, List[int]], start_rev: int) -> None: ...
+    def deltachain(self, rev: int, stop: int, generaldelta: bool) -> Tuple[List[int], bool]: ...
+    def slicechunktodensity(self, revs: List[int], targetdensity: float, mingapsize: int) -> List[List[int]]: ...
+    def append(self, value: Tuple[int, int, int, int, int, int, int, bytes]) -> None: ...
+    def partialmatch(self, node: bytes) -> bytes: ...
+    def shortest(self, value: bytes) -> int: ...
+    def stats(self) -> Dict[bytes, int]: ...
+
+class nodetree:
+    __doc__: str
+
+    def insert(self, rev: int) -> None: ...
+    def shortest(self, node: bytes) -> int: ...