mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #25677: Merge SyntaxError caret positioning from 3.6
This commit is contained in:
		
						commit
						b46edf35f3
					
				
					 5 changed files with 39 additions and 5 deletions
				
			
		|  | @ -10,6 +10,7 @@ | |||
| import os.path | ||||
| import py_compile | ||||
| import subprocess | ||||
| import io | ||||
| 
 | ||||
| import textwrap | ||||
| from test import support | ||||
|  | @ -539,6 +540,38 @@ def test_issue20500_exit_with_exception_value(self): | |||
|             text = stderr.decode('ascii') | ||||
|             self.assertEqual(text, "some text") | ||||
| 
 | ||||
|     def test_syntaxerror_unindented_caret_position(self): | ||||
|         script = "1 + 1 = 2\n" | ||||
|         with support.temp_dir() as script_dir: | ||||
|             script_name = _make_test_script(script_dir, 'script', script) | ||||
|             exitcode, stdout, stderr = assert_python_failure(script_name) | ||||
|             text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read() | ||||
|             # Confirm that the caret is located under the first 1 character | ||||
|             self.assertIn("\n    1 + 1 = 2\n    ^", text) | ||||
| 
 | ||||
|     def test_syntaxerror_indented_caret_position(self): | ||||
|         script = textwrap.dedent("""\ | ||||
|             if True: | ||||
|                 1 + 1 = 2 | ||||
|             """) | ||||
|         with support.temp_dir() as script_dir: | ||||
|             script_name = _make_test_script(script_dir, 'script', script) | ||||
|             exitcode, stdout, stderr = assert_python_failure(script_name) | ||||
|             text = io.TextIOWrapper(io.BytesIO(stderr), 'ascii').read() | ||||
|             # Confirm that the caret is located under the first 1 character | ||||
|             self.assertIn("\n    1 + 1 = 2\n    ^", text) | ||||
| 
 | ||||
|             # Try the same with a form feed at the start of the indented line | ||||
|             script = ( | ||||
|                 "if True:\n" | ||||
|                 "\f    1 + 1 = 2\n" | ||||
|             ) | ||||
|             script_name = _make_test_script(script_dir, "script", script) | ||||
|             exitcode, stdout, stderr = assert_python_failure(script_name) | ||||
|             text = io.TextIOWrapper(io.BytesIO(stderr), "ascii").read() | ||||
|             self.assertNotIn("\f", text) | ||||
|             self.assertIn("\n    1 + 1 = 2\n    ^", text) | ||||
| 
 | ||||
| 
 | ||||
| def test_main(): | ||||
|     support.run_unittest(CmdLineTest) | ||||
|  |  | |||
|  | @ -852,6 +852,7 @@ Julia Lawall | |||
| Chris Lawrence | ||||
| Mark Lawrence | ||||
| Chris Laws | ||||
| Michael Layzell | ||||
| Michael Lazar | ||||
| Brian Leair | ||||
| Mathieu Leduc-Hamel | ||||
|  |  | |||
|  | @ -10,6 +10,9 @@ What's New in Python 3.7.0 alpha 1 | |||
| Core and Builtins | ||||
| ----------------- | ||||
| 
 | ||||
| - Issue #25677: Correct the positioning of the syntax error caret for | ||||
|   indented blocks.  Based on patch by Michael Layzell. | ||||
| 
 | ||||
| - Issue #29000: Fixed bytes formatting of octals with zero padding in alternate | ||||
|   form. | ||||
| 
 | ||||
|  |  | |||
|  | @ -1138,11 +1138,8 @@ err_programtext(FILE *fp, int lineno) | |||
|     } | ||||
|     fclose(fp); | ||||
|     if (i == lineno) { | ||||
|         char *p = linebuf; | ||||
|         PyObject *res; | ||||
|         while (*p == ' ' || *p == '\t' || *p == '\014') | ||||
|             p++; | ||||
|         res = PyUnicode_FromString(p); | ||||
|         res = PyUnicode_FromString(linebuf); | ||||
|         if (res == NULL) | ||||
|             PyErr_Clear(); | ||||
|         return res; | ||||
|  |  | |||
|  | @ -528,7 +528,7 @@ print_error_text(PyObject *f, int offset, PyObject *text_obj) | |||
|             offset -= (int)(nl+1-text); | ||||
|             text = nl+1; | ||||
|         } | ||||
|         while (*text == ' ' || *text == '\t') { | ||||
|         while (*text == ' ' || *text == '\t' || *text == '\f') { | ||||
|             text++; | ||||
|             offset--; | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Martin Panter
						Martin Panter