summaryrefslogtreecommitdiffstats
path: root/Lib/_pyrepl
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-06-12 08:48:22 (GMT)
committerGitHub <noreply@github.com>2024-06-12 08:48:22 (GMT)
commit10821ccf0671a5d660ab5df7b5d4bfa0e9c8d112 (patch)
tree19e19607e5aec8725543729bdaf2680a4c232e2e /Lib/_pyrepl
parent8f5ce42f3418dfcc37232390ba89c33b9c9ffb13 (diff)
downloadcpython-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.py13
-rw-r--r--Lib/_pyrepl/simple_interact.py4
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>"