typing: add type hints to the platform specific scm modules
Surprisingly, pytype struggled to figure out the return types in the posix
functions.
--- a/mercurial/scmposix.py Thu Dec 15 01:05:27 2022 -0500
+++ b/mercurial/scmposix.py Thu Dec 15 15:41:59 2022 -0500
@@ -4,6 +4,11 @@
import os
import sys
+from typing import (
+ List,
+ Tuple,
+)
+
from .pycompat import getattr
from . import (
encoding,
@@ -11,6 +16,9 @@
util,
)
+if pycompat.TYPE_CHECKING:
+ from . import ui as uimod
+
# BSD 'more' escapes ANSI color sequences by default. This can be disabled by
# $MORE variable, but there's no compatible option with Linux 'more'. Given
# OS X is widely used and most modern Unix systems would have 'less', setting
@@ -18,7 +26,7 @@
fallbackpager = b'less'
-def _rcfiles(path):
+def _rcfiles(path: bytes) -> List[bytes]:
rcs = [os.path.join(path, b'hgrc')]
rcdir = os.path.join(path, b'hgrc.d')
try:
@@ -34,7 +42,7 @@
return rcs
-def systemrcpath():
+def systemrcpath() -> List[bytes]:
path = []
if pycompat.sysplatform == b'plan9':
root = b'lib/mercurial'
@@ -49,7 +57,7 @@
return path
-def userrcpath():
+def userrcpath() -> List[bytes]:
if pycompat.sysplatform == b'plan9':
return [encoding.environ[b'home'] + b'/lib/hgrc']
elif pycompat.isdarwin:
@@ -65,7 +73,7 @@
]
-def termsize(ui):
+def termsize(ui: "uimod.ui") -> Tuple[int, int]:
try:
import termios
--- a/mercurial/scmwindows.py Thu Dec 15 01:05:27 2022 -0500
+++ b/mercurial/scmwindows.py Thu Dec 15 15:41:59 2022 -0500
@@ -1,5 +1,10 @@
import os
+from typing import (
+ List,
+ Tuple,
+)
+
from . import (
encoding,
pycompat,
@@ -7,6 +12,9 @@
win32,
)
+if pycompat.TYPE_CHECKING:
+ from . import ui as uimod
+
try:
import _winreg as winreg # pytype: disable=import-error
@@ -19,7 +27,7 @@
fallbackpager = b'more'
-def systemrcpath():
+def systemrcpath() -> List[bytes]:
'''return default os-specific hgrc search path'''
rcpath = []
filename = win32.executablepath()
@@ -27,7 +35,7 @@
progrc = os.path.join(os.path.dirname(filename), b'mercurial.ini')
rcpath.append(progrc)
- def _processdir(progrcd):
+ def _processdir(progrcd: bytes) -> None:
if os.path.isdir(progrcd):
for f, kind in sorted(util.listdir(progrcd)):
if f.endswith(b'.rc'):
@@ -68,7 +76,7 @@
return rcpath
-def userrcpath():
+def userrcpath() -> List[bytes]:
'''return os-specific hgrc search path to the user dir'''
home = _legacy_expanduser(b'~')
path = [os.path.join(home, b'mercurial.ini'), os.path.join(home, b'.hgrc')]
@@ -79,7 +87,7 @@
return path
-def _legacy_expanduser(path):
+def _legacy_expanduser(path: bytes) -> bytes:
"""Expand ~ and ~user constructs in the pre 3.8 style"""
# Python 3.8+ changed the expansion of '~' from HOME to USERPROFILE. See
@@ -111,5 +119,5 @@
return userhome + path[i:]
-def termsize(ui):
+def termsize(ui: "uimod.ui") -> Tuple[int, int]:
return win32.termsize()