diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2024-06-12 08:48:22 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-12 08:48:22 (GMT) |
commit | 10821ccf0671a5d660ab5df7b5d4bfa0e9c8d112 (patch) | |
tree | 19e19607e5aec8725543729bdaf2680a4c232e2e /Lib/_pyrepl | |
parent | 8f5ce42f3418dfcc37232390ba89c33b9c9ffb13 (diff) | |
download | cpython-10821ccf0671a5d660ab5df7b5d4bfa0e9c8d112.zip cpython-10821ccf0671a5d660ab5df7b5d4bfa0e9c8d112.tar.gz cpython-10821ccf0671a5d660ab5df7b5d4bfa0e9c8d112.tar.bz2 |
[3.13] gh-118908: Fix completions after namespace change in REPL (GH-120370) (#120392)
(cherry picked from commit 02e74c356223feb0771759286d24d1dbac01d4ca)
Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com>
Diffstat (limited to 'Lib/_pyrepl')
-rw-r--r-- | Lib/_pyrepl/readline.py | 13 | ||||
-rw-r--r-- | Lib/_pyrepl/simple_interact.py | 4 |
2 files changed, 12 insertions, 5 deletions
diff --git a/Lib/_pyrepl/readline.py b/Lib/_pyrepl/readline.py index b10d0c6..28f592d 100644 --- a/Lib/_pyrepl/readline.py +++ b/Lib/_pyrepl/readline.py @@ -55,6 +55,11 @@ Command = commands.Command from collections.abc import Callable, Collection from .types import Callback, Completer, KeySpec, CommandName +TYPE_CHECKING = False + +if TYPE_CHECKING: + from typing import Any + MoreLinesCallable = Callable[[str], bool] @@ -92,7 +97,7 @@ __all__ = [ @dataclass class ReadlineConfig: - readline_completer: Completer | None = RLCompleter().complete + readline_completer: Completer | None = None completer_delims: frozenset[str] = frozenset(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?") @@ -554,7 +559,7 @@ for _name, _ret in [ # ____________________________________________________________ -def _setup() -> None: +def _setup(namespace: dict[str, Any]) -> None: global raw_input if raw_input is not None: return # don't run _setup twice @@ -570,9 +575,11 @@ def _setup() -> None: _wrapper.f_in = f_in _wrapper.f_out = f_out + # set up namespace in rlcompleter + _wrapper.config.readline_completer = RLCompleter(namespace).complete + # this is not really what readline.c does. Better than nothing I guess import builtins - raw_input = builtins.input builtins.input = _wrapper.input diff --git a/Lib/_pyrepl/simple_interact.py b/Lib/_pyrepl/simple_interact.py index 620f87b..2de3b38 100644 --- a/Lib/_pyrepl/simple_interact.py +++ b/Lib/_pyrepl/simple_interact.py @@ -96,9 +96,9 @@ def run_multiline_interactive_console( console: code.InteractiveConsole | None = None, ) -> None: from .readline import _setup - _setup() - namespace = mainmodule.__dict__ if mainmodule else DEFAULT_NAMESPACE + _setup(namespace) + if console is None: console = InteractiveColoredConsole( namespace, filename="<stdin>" |