@@ -113,8 +113,10 @@ def recover_unterminated_string(
113113 if (
114114 msg .startswith ("unterminated string literal" )
115115 or msg .startswith ("unterminated f-string literal" )
116+ or msg .startswith ("unterminated t-string literal" )
116117 or msg .startswith ("EOF in multi-line string" )
117118 or msg .startswith ("unterminated triple-quoted f-string literal" )
119+ or msg .startswith ("unterminated triple-quoted t-string literal" )
118120 ):
119121 start = line_lengths [loc [0 ] - 1 ] + loc [1 ] - 1
120122 end = line_lengths [- 1 ] - 1
@@ -149,7 +151,11 @@ def gen_colors_from_token_stream(
149151 continue
150152
151153 match token .type :
152- case T .STRING | T .FSTRING_START | T .FSTRING_MIDDLE | T .FSTRING_END :
154+ case (
155+ T .STRING
156+ | T .FSTRING_START | T .FSTRING_MIDDLE | T .FSTRING_END
157+ | T .TSTRING_START | T .TSTRING_MIDDLE | T .TSTRING_END
158+ ):
153159 span = Span .from_token (token , line_lengths )
154160 yield ColorSpan (span , "STRING" )
155161 case T .COMMENT :
@@ -202,7 +208,7 @@ def is_soft_keyword_used(*tokens: TI | None) -> bool:
202208 case (
203209 None | TI (T .NEWLINE ) | TI (T .INDENT ) | TI (string = ":" ),
204210 TI (string = "match" ),
205- TI (T .NUMBER | T .STRING | T .FSTRING_START )
211+ TI (T .NUMBER | T .STRING | T .FSTRING_START | T . TSTRING_START )
206212 | TI (T .OP , string = "(" | "*" | "-" | "+" | "[" | "{" | "~" | "..." )
207213 ):
208214 return True
@@ -217,7 +223,7 @@ def is_soft_keyword_used(*tokens: TI | None) -> bool:
217223 case (
218224 None | TI (T .NEWLINE ) | TI (T .INDENT ) | TI (string = ":" ),
219225 TI (string = "case" ),
220- TI (T .NUMBER | T .STRING | T .FSTRING_START )
226+ TI (T .NUMBER | T .STRING | T .FSTRING_START | T . TSTRING_START )
221227 | TI (T .OP , string = "(" | "*" | "-" | "[" | "{" )
222228 ):
223229 return True
0 commit comments