https://github.com/python/cpython/commit/61d49a5d37fbff7839fe7f2f746bbc9d464feb87
commit: 61d49a5d37fbff7839fe7f2f746bbc9d464feb87
branch: 3.14
author: Miss Islington (bot) <[email protected]>
committer: encukou <[email protected]>
date: 2025-10-07T23:02:32+02:00
summary:

[3.14] gh-138239: Fix incorrect highlighting of "type" in type statements in 
the REPL (GH-138241) (GH-138937)


(cherry picked from commit 26cfb1794255222b20cd7b502ab9193861df3184)

Co-authored-by: 00ll00 <[email protected]>
Co-authored-by: Bénédikt Tran <[email protected]>

files:
A Misc/NEWS.d/next/Library/2025-08-29-12-56-55.gh-issue-138239.uthZFI.rst
M Lib/_pyrepl/utils.py
M Lib/test/test_pyrepl/test_reader.py

diff --git a/Lib/_pyrepl/utils.py b/Lib/_pyrepl/utils.py
index 99b5c5aaf39e5a..64708e843b685b 100644
--- a/Lib/_pyrepl/utils.py
+++ b/Lib/_pyrepl/utils.py
@@ -264,6 +264,12 @@ def is_soft_keyword_used(*tokens: TI | None) -> bool:
             return True
         case (TI(string="case"), TI(string="_"), TI(string=":")):
             return True
+        case (
+            None | TI(T.NEWLINE) | TI(T.INDENT) | TI(T.DEDENT) | 
TI(string=":"),
+            TI(string="type"),
+            TI(T.NAME, string=s)
+        ):
+            return not keyword.iskeyword(s)
         case _:
             return False
 
diff --git a/Lib/test/test_pyrepl/test_reader.py 
b/Lib/test/test_pyrepl/test_reader.py
index 9a02dff7387563..b1b6ae16a1e592 100644
--- a/Lib/test/test_pyrepl/test_reader.py
+++ b/Lib/test/test_pyrepl/test_reader.py
@@ -378,6 +378,7 @@ def funct(case: str = sys.platform) -> None:
                     case "ios" | "android":
                         print("on the phone")
                     case _: print('arms around', match.group(1))
+            type type = type[type]
             """
         )
         expected = dedent(
@@ -397,6 +398,7 @@ def funct(case: str = sys.platform) -> None:
                     {K}case{z} {s}"ios"{z} {o}|{z} {s}"android"{z}{o}:{z}
                         {b}print{z}{o}({z}{s}"on the phone"{z}{o}){z}
                     {K}case{z} {K}_{z}{o}:{z} {b}print{z}{o}({z}{s}'arms 
around'{z}{o},{z} match{o}.{z}group{o}({z}{n}1{z}{o}){z}{o}){z}
+            {K}type{z} {b}type{z} {o}={z} {b}type{z}{o}[{z}{b}type{z}{o}]{z}
             """
         )
         expected_sync = expected.format(a="", **colors)
@@ -404,14 +406,14 @@ def funct(case: str = sys.platform) -> None:
         reader, _ = handle_all_events(events)
         self.assert_screen_equal(reader, code, clean=True)
         self.assert_screen_equal(reader, expected_sync)
-        self.assertEqual(reader.pos, 396)
-        self.assertEqual(reader.cxy, (0, 15))
+        self.assertEqual(reader.pos, 419)
+        self.assertEqual(reader.cxy, (0, 16))
 
         async_msg = "{k}async{z} ".format(**colors)
         expected_async = expected.format(a=async_msg, **colors)
         more_events = itertools.chain(
             code_to_events(code),
-            [Event(evt="key", data="up", raw=bytearray(b"\x1bOA"))] * 14,
+            [Event(evt="key", data="up", raw=bytearray(b"\x1bOA"))] * 15,
             code_to_events("async "),
         )
         reader, _ = handle_all_events(more_events)
diff --git 
a/Misc/NEWS.d/next/Library/2025-08-29-12-56-55.gh-issue-138239.uthZFI.rst 
b/Misc/NEWS.d/next/Library/2025-08-29-12-56-55.gh-issue-138239.uthZFI.rst
new file mode 100644
index 00000000000000..9e0218e02664c6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-08-29-12-56-55.gh-issue-138239.uthZFI.rst
@@ -0,0 +1,2 @@
+The REPL now highlights :keyword:`type` as a soft keyword
+in :ref:`type statements <type>`.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to