[3.13] Improve pyrepl type-annotation coverage (GH-119081) (#119415)

(cherry picked from commit 033f5c87f1)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
Miss Islington (bot) 2024-05-22 20:38:32 +02:00 committed by GitHub
parent bfd9c3ea53
commit cd39da75af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 31 additions and 14 deletions

View file

@ -17,7 +17,7 @@ class error(Exception):
pass pass
def _find_clib(): def _find_clib() -> str:
trylibs = ["ncursesw", "ncurses", "curses"] trylibs = ["ncursesw", "ncurses", "curses"]
for lib in trylibs: for lib in trylibs:

View file

@ -60,7 +60,7 @@ class InputTranslator(ABC):
class KeymapTranslator(InputTranslator): 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 self.verbose = verbose
from .keymap import compile_keymap, parse_keys from .keymap import compile_keymap, parse_keys
@ -110,5 +110,5 @@ class KeymapTranslator(InputTranslator):
else: else:
return None return None
def empty(self): def empty(self) -> bool:
return not self.results return not self.results

View file

@ -190,7 +190,7 @@ def _parse_key1(key, s):
return ret, s return ret, s
def parse_keys(key): def parse_keys(key: str) -> list[str]:
s = 0 s = 0
r = [] r = []
while s < len(key): while s < len(key):

View file

@ -76,10 +76,14 @@ def tty_pager(text: str, title: str = '') -> None:
fd = sys.stdin.fileno() fd = sys.stdin.fileno()
old = termios.tcgetattr(fd) old = termios.tcgetattr(fd)
tty.setcbreak(fd) tty.setcbreak(fd)
getchar = lambda: sys.stdin.read(1)
has_tty = True has_tty = True
def getchar() -> str:
return sys.stdin.read(1)
except (ImportError, AttributeError, io.UnsupportedOperation): except (ImportError, AttributeError, io.UnsupportedOperation):
getchar = lambda: sys.stdin.readline()[:-1][:1] def getchar() -> str:
return sys.stdin.readline()[:-1][:1]
try: try:
try: try:

View file

@ -49,6 +49,9 @@ from collections.abc import Callable, Collection
from .types import Callback, Completer, KeySpec, CommandName from .types import Callback, Completer, KeySpec, CommandName
MoreLinesCallable = Callable[[str], bool]
__all__ = [ __all__ = [
"add_history", "add_history",
"clear_history", "clear_history",
@ -95,7 +98,7 @@ class ReadlineAlikeReader(historical_reader.HistoricalReader, CompletingReader):
# Instance fields # Instance fields
config: ReadlineConfig config: ReadlineConfig
more_lines: Callable[[str], bool] | None = None more_lines: MoreLinesCallable | None = None
def __post_init__(self) -> None: def __post_init__(self) -> None:
super().__post_init__() super().__post_init__()
@ -288,7 +291,7 @@ class _ReadlineWrapper:
reader.ps1 = str(prompt) reader.ps1 = str(prompt)
return reader.readline(startup_hook=self.startup_hook) 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 """Read an input on possibly multiple lines, asking for more
lines as long as 'more_lines(unicodetext)' returns an object whose lines as long as 'more_lines(unicodetext)' returns an object whose
boolean value is true. boolean value is true.

View file

@ -40,9 +40,13 @@ from .unix_eventqueue import EventQueue
from .utils import wlen from .utils import wlen
TYPE_CHECKING = False
# types # types
if False: if TYPE_CHECKING:
from typing import IO from typing import IO, Literal, overload
else:
overload = lambda func: None
class InvalidTerminal(RuntimeError): class InvalidTerminal(RuntimeError):
@ -157,7 +161,13 @@ class UnixConsole(Console):
curses.setupterm(term or None, self.output_fd) curses.setupterm(term or None, self.output_fd)
self.term = term 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) r = curses.tigetstr(cap)
if not optional and r is None: if not optional and r is None:
raise InvalidTerminal( raise InvalidTerminal(
@ -672,18 +682,18 @@ class UnixConsole(Console):
elif dy < 0: elif dy < 0:
self.__write_code(self._cuu, -dy) 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]: if x != self.__posxy[0]:
self.__write_code(self._hpa, x) 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] dx = x - self.__posxy[0]
if dx > 0: if dx > 0:
self.__write_code(self._cuf1 * dx) self.__write_code(self._cuf1 * dx)
elif dx < 0: elif dx < 0:
self.__write_code(self._cub1 * (-dx)) 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] dx = x - self.__posxy[0]
if dx > 0: if dx > 0:
self.__write_code(self._cuf, dx) self.__write_code(self._cuf, dx)