mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-29 03:04:38 +08:00
* Preserve pyrepl console mock guards during migration Keep the existing three named-function decorator workarounds and their explanations at exact audited anchors. Reject changed canonical or local preambles, and retain canonical test bodies. Assisted-by: OpenAI Codex:model version unavailable * Update pyrepl rendering and completion for Python 3.15 Sync the complete _pyrepl package and rlcompleter with CPython d220409a13b77de7a6c30abe16ea90db01528edc using scripts/update_lib copy-lib. Migrate the complete test_pyrepl package and existing repl/completion consumers, preserving existing RustPython guards and canonical assertions. This is a source checkpoint. Interpreter, PTY, native platform, workspace, C-API and Clippy validation remain pending; host updater tests and configured commit hooks passed. Assisted-by: OpenAI Codex:model version unavailable * Include lazy soft keyword for canonical REPL highlighting Assisted-by: OpenAI Codex:model version unavailable
41 lines
904 B
Python
Vendored
41 lines
904 B
Python
Vendored
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
|
|
# types
|
|
if False:
|
|
from typing import IO
|
|
|
|
|
|
trace_file: IO[str] | None = None
|
|
if trace_filename := os.environ.get("PYREPL_TRACE"):
|
|
trace_file = open(trace_filename, "a")
|
|
|
|
|
|
|
|
if sys.platform == "emscripten":
|
|
from posix import _emscripten_log
|
|
|
|
def trace(line: str, *k: object, **kw: object) -> None:
|
|
if "PYREPL_TRACE" not in os.environ:
|
|
return
|
|
if k or kw:
|
|
line = line.format(*k, **kw)
|
|
_emscripten_log(line)
|
|
|
|
else:
|
|
def trace(line: str, *k: object, **kw: object) -> None:
|
|
if trace_file is None:
|
|
return
|
|
if k or kw:
|
|
line = line.format(*k, **kw)
|
|
trace_file.write(line + "\n")
|
|
trace_file.flush()
|
|
|
|
|
|
def trace_text(text: str, limit: int = 60) -> str:
|
|
if len(text) > limit:
|
|
text = text[:limit] + "..."
|
|
return repr(text)
|