https://github.com/python/cpython/commit/033f5c87f1f876088701d1ae078dc39c41177d4a
commit: 033f5c87f1f876088701d1ae078dc39c41177d4a
branch: main
author: Alex Waygood <[email protected]>
committer: AlexWaygood <[email protected]>
date: 2024-05-17T06:13:24-04:00
summary:

Improve `pyrepl` type-annotation coverage (#119081)

files:
M Lib/_pyrepl/_minimal_curses.py
M Lib/_pyrepl/input.py
M Lib/_pyrepl/keymap.py
M Lib/_pyrepl/pager.py
M Lib/_pyrepl/readline.py
M Lib/_pyrepl/unix_console.py

diff --git a/Lib/_pyrepl/_minimal_curses.py b/Lib/_pyrepl/_minimal_curses.py
index 0757fb2c664add..849617bf7585e4 100644
--- a/Lib/_pyrepl/_minimal_curses.py
+++ b/Lib/_pyrepl/_minimal_curses.py
@@ -17,7 +17,7 @@ class error(Exception):
     pass
 
 
-def _find_clib():
+def _find_clib() -> str:
     trylibs = ["ncursesw", "ncurses", "curses"]
 
     for lib in trylibs:
diff --git a/Lib/_pyrepl/input.py b/Lib/_pyrepl/input.py
index 300e16d1d25441..21c24eb5cde3e3 100644
--- a/Lib/_pyrepl/input.py
+++ b/Lib/_pyrepl/input.py
@@ -60,7 +60,7 @@ def empty(self) -> bool:
 
 
 class KeymapTranslator(InputTranslator):
-    def __init__(self, keymap, verbose=0, invalid_cls=None, 
character_cls=None):
+    def __init__(self, keymap, verbose=False, invalid_cls=None, 
character_cls=None):
         self.verbose = verbose
         from .keymap import compile_keymap, parse_keys
 
@@ -110,5 +110,5 @@ def get(self):
         else:
             return None
 
-    def empty(self):
+    def empty(self) -> bool:
         return not self.results
diff --git a/Lib/_pyrepl/keymap.py b/Lib/_pyrepl/keymap.py
index 31a02642ce8ceb..e1421730e75717 100644
--- a/Lib/_pyrepl/keymap.py
+++ b/Lib/_pyrepl/keymap.py
@@ -187,7 +187,7 @@ def _parse_key1(key, s):
     return ret, s
 
 
-def parse_keys(key):
+def parse_keys(key: str) -> list[str]:
     s = 0
     r = []
     while s < len(key):
diff --git a/Lib/_pyrepl/pager.py b/Lib/_pyrepl/pager.py
index af0409c4523bc2..6a076b5181d872 100644
--- a/Lib/_pyrepl/pager.py
+++ b/Lib/_pyrepl/pager.py
@@ -76,10 +76,14 @@ def tty_pager(text: str, title: str = '') -> None:
         fd = sys.stdin.fileno()
         old = termios.tcgetattr(fd)
         tty.setcbreak(fd)
-        getchar = lambda: sys.stdin.read(1)
         has_tty = True
+
+        def getchar() -> str:
+            return sys.stdin.read(1)
+
     except (ImportError, AttributeError, io.UnsupportedOperation):
-        getchar = lambda: sys.stdin.readline()[:-1][:1]
+        def getchar() -> str:
+            return sys.stdin.readline()[:-1][:1]
 
     try:
         try:
diff --git a/Lib/_pyrepl/readline.py b/Lib/_pyrepl/readline.py
index d28a7f3779f302..0adecf235a4eb4 100644
--- a/Lib/_pyrepl/readline.py
+++ b/Lib/_pyrepl/readline.py
@@ -48,6 +48,9 @@
 from .types import Callback, Completer, KeySpec, CommandName
 
 
+MoreLinesCallable = Callable[[str], bool]
+
+
 __all__ = [
     "add_history",
     "clear_history",
@@ -94,7 +97,7 @@ class ReadlineAlikeReader(historical_reader.HistoricalReader, 
CompletingReader):
 
     # Instance fields
     config: ReadlineConfig
-    more_lines: Callable[[str], bool] | None = None
+    more_lines: MoreLinesCallable | None = None
 
     def __post_init__(self) -> None:
         super().__post_init__()
@@ -287,7 +290,7 @@ def input(self, prompt: object = "") -> str:
         reader.ps1 = str(prompt)
         return reader.readline(startup_hook=self.startup_hook)
 
-    def multiline_input(self, more_lines, ps1, ps2):
+    def multiline_input(self, more_lines: MoreLinesCallable, ps1: str, ps2: 
str) -> tuple[str, bool]:
         """Read an input on possibly multiple lines, asking for more
         lines as long as 'more_lines(unicodetext)' returns an object whose
         boolean value is true.
diff --git a/Lib/_pyrepl/unix_console.py b/Lib/_pyrepl/unix_console.py
index 605318c82ae2ea..7c59f48df406e6 100644
--- a/Lib/_pyrepl/unix_console.py
+++ b/Lib/_pyrepl/unix_console.py
@@ -40,9 +40,13 @@
 from .utils import wlen
 
 
+TYPE_CHECKING = False
+
 # types
-if False:
-    from typing import IO
+if TYPE_CHECKING:
+    from typing import IO, Literal, overload
+else:
+    overload = lambda func: None
 
 
 class InvalidTerminal(RuntimeError):
@@ -157,7 +161,13 @@ def __init__(
         curses.setupterm(term or None, self.output_fd)
         self.term = term
 
-        def _my_getstr(cap, optional=0):
+        @overload
+        def _my_getstr(cap: str, optional: Literal[False] = False) -> bytes: 
...
+
+        @overload
+        def _my_getstr(cap: str, optional: bool) -> bytes | None: ...
+
+        def _my_getstr(cap: str, optional: bool = False) -> bytes | None:
             r = curses.tigetstr(cap)
             if not optional and r is None:
                 raise InvalidTerminal(
@@ -672,18 +682,18 @@ def __move_y_cuu_cud(self, y):
         elif dy < 0:
             self.__write_code(self._cuu, -dy)
 
-    def __move_x_hpa(self, x):
+    def __move_x_hpa(self, x: int) -> None:
         if x != self.__posxy[0]:
             self.__write_code(self._hpa, x)
 
-    def __move_x_cub1_cuf1(self, x):
+    def __move_x_cub1_cuf1(self, x: int) -> None:
         dx = x - self.__posxy[0]
         if dx > 0:
             self.__write_code(self._cuf1 * dx)
         elif dx < 0:
             self.__write_code(self._cub1 * (-dx))
 
-    def __move_x_cub_cuf(self, x):
+    def __move_x_cub_cuf(self, x: int) -> None:
         dx = x - self.__posxy[0]
         if dx > 0:
             self.__write_code(self._cuf, dx)

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to