mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	[3.13] gh-129093: Fix f-string debug text sometimes getting cut off when expression contains ! (GH-129159) (#129163)
				
					
				
			gh-129093: Fix f-string debug text sometimes getting cut off when expression contains `!` (GH-129159)
(cherry picked from commit 767cf70844)
Co-authored-by: Tomas R <tomas.roun8@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									0ddcb61ffe
								
							
						
					
					
						commit
						a379749217
					
				
					 3 changed files with 21 additions and 3 deletions
				
			
		|  | @ -1758,5 +1758,23 @@ def get_code(s): | ||||||
|         for s in ["", "some string"]: |         for s in ["", "some string"]: | ||||||
|             self.assertEqual(get_code(f"'{s}'"), get_code(f"f'{s}'")) |             self.assertEqual(get_code(f"'{s}'"), get_code(f"f'{s}'")) | ||||||
| 
 | 
 | ||||||
|  |     def test_gh129093(self): | ||||||
|  |         self.assertEqual(f'{1==2=}', '1==2=False') | ||||||
|  |         self.assertEqual(f'{1 == 2=}', '1 == 2=False') | ||||||
|  |         self.assertEqual(f'{1!=2=}', '1!=2=True') | ||||||
|  |         self.assertEqual(f'{1 != 2=}', '1 != 2=True') | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(f'{(1) != 2=}', '(1) != 2=True') | ||||||
|  |         self.assertEqual(f'{(1*2) != (3)=}', '(1*2) != (3)=True') | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(f'{1 != 2 == 3 != 4=}', '1 != 2 == 3 != 4=False') | ||||||
|  |         self.assertEqual(f'{1 == 2 != 3 == 4=}', '1 == 2 != 3 == 4=False') | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(f'{f'{1==2=}'=}', "f'{1==2=}'='1==2=False'") | ||||||
|  |         self.assertEqual(f'{f'{1 == 2=}'=}', "f'{1 == 2=}'='1 == 2=False'") | ||||||
|  |         self.assertEqual(f'{f'{1!=2=}'=}', "f'{1!=2=}'='1!=2=True'") | ||||||
|  |         self.assertEqual(f'{f'{1 != 2=}'=}', "f'{1 != 2=}'='1 != 2=True'") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|  |  | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | Fix f-strings such as ``f'{expr=}'`` sometimes not displaying the full | ||||||
|  | expression when the expression contains ``!=``. | ||||||
|  | @ -212,9 +212,7 @@ _PyLexer_update_fstring_expr(struct tok_state *tok, char cur) | ||||||
|         case '}': |         case '}': | ||||||
|         case '!': |         case '!': | ||||||
|         case ':': |         case ':': | ||||||
|             if (tok_mode->last_expr_end == -1) { |  | ||||||
|             tok_mode->last_expr_end = strlen(tok->start); |             tok_mode->last_expr_end = strlen(tok->start); | ||||||
|             } |  | ||||||
|             break; |             break; | ||||||
|         default: |         default: | ||||||
|             Py_UNREACHABLE(); |             Py_UNREACHABLE(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Miss Islington (bot)
						Miss Islington (bot)