https://github.com/python/cpython/commit/342b644bd22e27bb4f0ed886736c088de40dd121
commit: 342b644bd22e27bb4f0ed886736c088de40dd121
branch: 3.14
author: Miss Islington (bot) <[email protected]>
committer: terryjreedy <[email protected]>
date: 2025-10-09T09:51:58Z
summary:

[3.14] gh-139742: Add support for Python 3.14 t-string prefixes in IDLE 
colorizer and tests (GH-139756) (#139831)

gh-139742: Add support for Python 3.14 t-string prefixes in IDLE colorizer and 
tests (GH-139756)

Add 't' prefix to colorizer.py stringprefix regex to support Python 3.14 
template strings.
Add t prefixes to test_colorizer.py source test text and adjust line numbers on 
test methods.
---------
(cherry picked from commit 6fd141834193e3dc2423e785d97eb127c972a70e)

Co-authored-by: Anuradha Agrawal <[email protected]>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Ɓukasz Langa <[email protected]>
Co-authored-by: Stan Ulbrych <[email protected]>

files:
A Misc/NEWS.d/next/IDLE/2025-10-08-08-35-50.gh-issue-139742.B3fZLg.rst
M Lib/idlelib/colorizer.py
M Lib/idlelib/idle_test/test_colorizer.py

diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py
index b4df353012b788..bffa2ddd3cd9cd 100644
--- a/Lib/idlelib/colorizer.py
+++ b/Lib/idlelib/colorizer.py
@@ -47,7 +47,7 @@ def make_pat():
                    name not in keyword.kwlist]
     builtin = r"([^.'\"\\#]\b|^)" + any("BUILTIN", builtinlist) + r"\b"
     comment = any("COMMENT", [r"#[^\n]*"])
-    stringprefix = r"(?i:r|u|f|fr|rf|b|br|rb)?"
+    stringprefix = r"(?i:r|u|f|fr|rf|b|br|rb|t|rt|tr)?"
     sqstring = stringprefix + r"'[^'\\\n]*(\\.[^'\\\n]*)*'?"
     dqstring = stringprefix + r'"[^"\\\n]*(\\.[^"\\\n]*)*"?'
     sq3string = stringprefix + r"'''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?"
diff --git a/Lib/idlelib/idle_test/test_colorizer.py 
b/Lib/idlelib/idle_test/test_colorizer.py
index 308bc389384d33..40800df97b0bd3 100644
--- a/Lib/idlelib/idle_test/test_colorizer.py
+++ b/Lib/idlelib/idle_test/test_colorizer.py
@@ -36,6 +36,7 @@ async def f(): await g()
     # All valid prefixes for unicode and byte strings should be colored.
     r'x', u'x', R'x', U'x', f'x', F'x'
     fr'x', Fr'x', fR'x', FR'x', rf'x', rF'x', Rf'x', RF'x'
+    tr'x', Tr'x', tR'x', TR'x', rt'x', rT'x', Rt'x', RT'x'
     b'x',B'x', br'x',Br'x',bR'x',BR'x', rb'x', rB'x',Rb'x',RB'x'
     # Invalid combinations of legal characters should be half colored.
     ur'x', ru'x', uf'x', fu'x', UR'x', ufr'x', rfu'x', xf'x', fx'x'
@@ -390,19 +391,19 @@ def test_recolorize_main(self, mock_notify):
                     ('6.0', ('KEYWORD',)), ('6.10', ('DEFINITION',)), ('6.11', 
()),
                     ('8.0', ('STRING',)), ('8.4', ()), ('8.5', ('STRING',)),
                     ('8.12', ()), ('8.14', ('STRING',)),
-                    ('19.0', ('KEYWORD',)),
-                    ('20.4', ('KEYWORD',)), ('20.16', ('KEYWORD',)),# 
('20.19', ('KEYWORD',)),
-                    #('22.4', ('KEYWORD',)), ('22.10', ('KEYWORD',)), 
('22.14', ('KEYWORD',)), ('22.19', ('STRING',)),
-                    #('23.12', ('KEYWORD',)),
-                    ('24.8', ('KEYWORD',)),
-                    ('25.4', ('KEYWORD',)), ('25.9', ('KEYWORD',)),
-                    ('25.11', ('KEYWORD',)), ('25.15', ('STRING',)),
-                    ('25.19', ('KEYWORD',)), ('25.22', ()),
-                    ('25.24', ('KEYWORD',)), ('25.29', ('BUILTIN',)), 
('25.37', ('KEYWORD',)),
-                    ('26.4', ('KEYWORD',)), ('26.9', ('KEYWORD',)),# ('26.11', 
('KEYWORD',)), ('26.14', (),),
-                    ('27.25', ('STRING',)), ('27.38', ('STRING',)),
-                    ('29.0', ('STRING',)),
-                    ('30.1', ('STRING',)),
+                    ('20.0', ('KEYWORD',)),
+                    ('21.4', ('KEYWORD',)), ('21.16', ('KEYWORD',)),# 
('21.19', ('KEYWORD',)),
+                    #('23.4', ('KEYWORD',)), ('23.10', ('KEYWORD',)), 
('23.14', ('KEYWORD',)), ('23.19', ('STRING',)),
+                    #('24.12', ('KEYWORD',)),
+                    ('25.8', ('KEYWORD',)),
+                    ('26.4', ('KEYWORD',)), ('26.9', ('KEYWORD',)),
+                    ('26.11', ('KEYWORD',)), ('26.15', ('STRING',)),
+                    ('26.19', ('KEYWORD',)), ('26.22', ()),
+                    ('26.24', ('KEYWORD',)), ('26.29', ('BUILTIN',)), 
('26.37', ('KEYWORD',)),
+                    ('27.4', ('KEYWORD',)), ('27.9', ('KEYWORD',)),# ('27.11', 
('KEYWORD',)), ('27.14', (),),
+                    ('28.25', ('STRING',)), ('28.38', ('STRING',)),
+                    ('30.0', ('STRING',)),
+                    ('31.1', ('STRING',)),
                     # SYNC at the end of every line.
                     ('1.55', ('SYNC',)), ('2.50', ('SYNC',)), ('3.34', 
('SYNC',)),
                    )
@@ -433,7 +434,7 @@ def test_recolorize_main(self, mock_notify):
         eq(text.tag_nextrange('STRING', '8.12'), ('8.14', '8.17'))
         eq(text.tag_nextrange('STRING', '8.17'), ('8.19', '8.26'))
         eq(text.tag_nextrange('SYNC', '8.0'), ('8.26', '9.0'))
-        eq(text.tag_nextrange('SYNC', '30.0'), ('30.10', '32.0'))
+        eq(text.tag_nextrange('SYNC', '31.0'), ('31.10', '33.0'))
 
     def _assert_highlighting(self, source, tag_ranges):
         """Check highlighting of a given piece of code.
diff --git 
a/Misc/NEWS.d/next/IDLE/2025-10-08-08-35-50.gh-issue-139742.B3fZLg.rst 
b/Misc/NEWS.d/next/IDLE/2025-10-08-08-35-50.gh-issue-139742.B3fZLg.rst
new file mode 100644
index 00000000000000..c9e2f977a7967d
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2025-10-08-08-35-50.gh-issue-139742.B3fZLg.rst
@@ -0,0 +1 @@
+Colorize t-string prefixes for template strings in IDLE, as done for f-string 
prefixes.

_______________________________________________
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