gh-151390: Colorize `match +` and `match -` in the REPL (#151391)
diff --git a/Lib/_pyrepl/utils.py b/Lib/_pyrepl/utils.py
index f2837a1..230dae3 100644
--- a/Lib/_pyrepl/utils.py
+++ b/Lib/_pyrepl/utils.py
@@ -259,7 +259,7 @@ def is_soft_keyword_used(*tokens: TI | None) -> bool:
None | TI(T.NEWLINE) | TI(T.INDENT) | TI(string=":"),
TI(string="match"),
TI(T.NUMBER | T.STRING | T.FSTRING_START | T.TSTRING_START)
- | TI(T.OP, string="(" | "*" | "[" | "{" | "~" | "...")
+ | TI(T.OP, string="(" | "*" | "-" | "+" | "[" | "{" | "~" | "...")
):
return True
case (
diff --git a/Lib/test/test_pyrepl/test_utils.py b/Lib/test/test_pyrepl/test_utils.py
index 0b873d3..ebbd062 100644
--- a/Lib/test/test_pyrepl/test_utils.py
+++ b/Lib/test/test_pyrepl/test_utils.py
@@ -133,6 +133,22 @@ def test_gen_colors_keyword_highlighting(self):
("1", "number"),
],
),
+ (
+ "match +1",
+ [
+ ("match", "soft_keyword"),
+ ("+", "op"),
+ ("1", "number"),
+ ],
+ ),
+ (
+ "match -1",
+ [
+ ("match", "soft_keyword"),
+ ("-", "op"),
+ ("1", "number"),
+ ],
+ ),
]
for code, expected_highlights in cases:
with self.subTest(code=code):
diff --git a/Misc/NEWS.d/next/Library/2026-06-12-07-20-08.gh-issue-151390.CmYN9EeJ.rst b/Misc/NEWS.d/next/Library/2026-06-12-07-20-08.gh-issue-151390.CmYN9EeJ.rst
new file mode 100644
index 0000000..ff8de30
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-06-12-07-20-08.gh-issue-151390.CmYN9EeJ.rst
@@ -0,0 +1 @@
+Colorize ``match`` in the :term:`REPL` when followed by a unary ``+`` or ``-`` operator. Patch by Bartosz Sławecki.