From 5c8b4de5869acb0f895867797d8c7758b2cd1b21 Mon Sep 17 00:00:00 2001 From: Cheryl Sabella Date: Mon, 24 Dec 2018 17:17:59 -0500 Subject: [PATCH 1/4] bpo-34055: IDLE: Fix shell smart indent after error --- Lib/idlelib/pyshell.py | 1 + Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst | 1 + 2 files changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py index 81a97ef6d6bcc51..3b214aaa7a65765 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -883,6 +883,7 @@ def __init__(self, flist=None): # indentwidth must be 8 when using tabs. See note in EditorWindow: self.indentwidth = 8 + self.context_use_ps1 = True self.sys_ps1 = sys.ps1 if hasattr(sys, 'ps1') else '>>> ' self.prompt_last_line = self.sys_ps1.split('\n')[-1] self.prompt = self.sys_ps1 # Changes when debug active diff --git a/Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst b/Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst new file mode 100644 index 000000000000000..fd0ae32aa668c8f --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst @@ -0,0 +1 @@ +IDLE Shell: Fix printing smart indent on every line From 973b0367abfaa8cf6166bd6ab550988714b994fe Mon Sep 17 00:00:00 2001 From: Cheryl Sabella Date: Tue, 25 Dec 2018 15:57:00 -0500 Subject: [PATCH 2/4] Replace context_use_ps1 with prompt_last_line --- Lib/idlelib/editor.py | 7 +------ Lib/idlelib/hyperparser.py | 2 +- Lib/idlelib/idle_test/test_autocomplete.py | 2 +- Lib/idlelib/idle_test/test_hyperparser.py | 6 +++--- Lib/idlelib/idle_test/test_parenmatch.py | 2 +- Lib/idlelib/pyshell.py | 1 - 6 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py index d92b32b2400443b..c5c99cb501b4615 100644 --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -228,10 +228,6 @@ def __init__(self, flist=None, filename=None, key=None, root=None): self.indentwidth = self.tabwidth self.set_notabs_indentwidth() - # If context_use_ps1 is true, parsing searches back for a ps1 line; - # else searches for a popular (if, def, ...) Python stmt. - self.context_use_ps1 = False - # When searching backwards for a reliable place to begin parsing, # first start num_context_lines[0] lines back, then # num_context_lines[1] lines back if that didn't work, and so on. @@ -1335,14 +1331,13 @@ def newline_and_indent_event(self, event): # open/close first need to find the last stmt lno = index2line(text.index('insert')) y = pyparse.Parser(self.indentwidth, self.tabwidth) - if not self.context_use_ps1: + if not self.prompt_last_line: for context in self.num_context_lines: startat = max(lno - context, 1) startatindex = repr(startat) + ".0" rawtext = text.get(startatindex, "insert") y.set_code(rawtext) bod = y.find_good_parse_start( - self.context_use_ps1, self._build_char_in_string_func(startatindex)) if bod is not None or startat == 1: break diff --git a/Lib/idlelib/hyperparser.py b/Lib/idlelib/hyperparser.py index 7e7e0ae80247546..77baca782b3fdc0 100644 --- a/Lib/idlelib/hyperparser.py +++ b/Lib/idlelib/hyperparser.py @@ -35,7 +35,7 @@ def index2line(index): return int(float(index)) lno = index2line(text.index(index)) - if not editwin.context_use_ps1: + if not editwin.prompt_last_line: for context in editwin.num_context_lines: startat = max(lno - context, 1) startatindex = repr(startat) + ".0" diff --git a/Lib/idlelib/idle_test/test_autocomplete.py b/Lib/idlelib/idle_test/test_autocomplete.py index d7ee00af94b4daa..ea9d7b1892e3218 100644 --- a/Lib/idlelib/idle_test/test_autocomplete.py +++ b/Lib/idlelib/idle_test/test_autocomplete.py @@ -16,7 +16,7 @@ def __init__(self, root, text): self.text = text self.indentwidth = 8 self.tabwidth = 8 - self.context_use_ps1 = True + self.prompt_last_line = '>>>' class AutoCompleteTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_hyperparser.py b/Lib/idlelib/idle_test/test_hyperparser.py index 8dbfc63779d3806..343843c4166e97d 100644 --- a/Lib/idlelib/idle_test/test_hyperparser.py +++ b/Lib/idlelib/idle_test/test_hyperparser.py @@ -11,7 +11,7 @@ def __init__(self, text): self.text = text self.indentwidth = 8 self.tabwidth = 8 - self.context_use_ps1 = True + self.prompt_last_line = '>>>' self.num_context_lines = 50, 500, 1000 _build_char_in_string_func = EditorWindow._build_char_in_string_func @@ -53,7 +53,7 @@ def setUp(self): def tearDown(self): self.text.delete('1.0', 'end') - self.editwin.context_use_ps1 = True + self.editwin.prompt_last_line = '>>>' def get_parser(self, index): """ @@ -71,7 +71,7 @@ def test_init(self): self.assertIn('precedes', str(ve.exception)) # test without ps1 - self.editwin.context_use_ps1 = False + self.editwin.prompt_last_line = '' # number of lines lesser than 50 p = self.get_parser('end') diff --git a/Lib/idlelib/idle_test/test_parenmatch.py b/Lib/idlelib/idle_test/test_parenmatch.py index f58819abf112119..d86f70a6fb495f4 100644 --- a/Lib/idlelib/idle_test/test_parenmatch.py +++ b/Lib/idlelib/idle_test/test_parenmatch.py @@ -17,7 +17,7 @@ def __init__(self, text): self.text = text self.indentwidth = 8 self.tabwidth = 8 - self.context_use_ps1 = True + self.prompt_last_line = '>>>' class ParenMatchTest(unittest.TestCase): diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py index 3b214aaa7a65765..81a97ef6d6bcc51 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -883,7 +883,6 @@ def __init__(self, flist=None): # indentwidth must be 8 when using tabs. See note in EditorWindow: self.indentwidth = 8 - self.context_use_ps1 = True self.sys_ps1 = sys.ps1 if hasattr(sys, 'ps1') else '>>> ' self.prompt_last_line = self.sys_ps1.split('\n')[-1] self.prompt = self.sys_ps1 # Changes when debug active From c2b30935dfe920ea46ad8364624523a11f8d2371 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 29 Dec 2018 00:21:59 -0500 Subject: [PATCH 3/4] Remove setting in PyShell. --- Lib/idlelib/pyshell.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py index b6172fd6b9bba64..81a97ef6d6bcc51 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -882,7 +882,7 @@ def __init__(self, flist=None): self.usetabs = True # indentwidth must be 8 when using tabs. See note in EditorWindow: self.indentwidth = 8 - self.context_use_ps1 = True + self.sys_ps1 = sys.ps1 if hasattr(sys, 'ps1') else '>>> ' self.prompt_last_line = self.sys_ps1.split('\n')[-1] self.prompt = self.sys_ps1 # Changes when debug active From ede41883f3304547889e4769ccc7541e7c1331b8 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sun, 2 Jun 2019 14:13:54 -0400 Subject: [PATCH 4/4] Final changes. --- Lib/idlelib/NEWS.txt | 3 +++ Lib/idlelib/idle_test/test_autocomplete.py | 2 +- Lib/idlelib/idle_test/test_parenmatch.py | 2 +- Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst | 1 - Misc/NEWS.d/next/IDLE/2019-06-02-14-10-52.bpo-35610.0w_v6Y.rst | 2 ++ 5 files changed, 7 insertions(+), 3 deletions(-) delete mode 100644 Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst create mode 100644 Misc/NEWS.d/next/IDLE/2019-06-02-14-10-52.bpo-35610.0w_v6Y.rst diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index b260d4e5ef1bd82..982af77672517c7 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,6 +3,9 @@ Released on 2019-10-20? ====================================== +bpo-35610: Replace now redundant editor.context_use_ps1 with +.prompt_last_line. This finishes change started in bpo-31858. + bpo-32411: Stop sorting dict created with desired line order. bpo-37038: Make idlelib.run runnable; add test clause. diff --git a/Lib/idlelib/idle_test/test_autocomplete.py b/Lib/idlelib/idle_test/test_autocomplete.py index e87221bae093d60..6181b29ec250cc6 100644 --- a/Lib/idlelib/idle_test/test_autocomplete.py +++ b/Lib/idlelib/idle_test/test_autocomplete.py @@ -19,7 +19,7 @@ def __init__(self, root, text): self.text = text self.indentwidth = 8 self.tabwidth = 8 - self.prompt_last_line = '>>>' + self.prompt_last_line = '>>>' # Currently not used by autocomplete. class AutoCompleteTest(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_parenmatch.py b/Lib/idlelib/idle_test/test_parenmatch.py index d86f70a6fb495f4..4a41d8433d54836 100644 --- a/Lib/idlelib/idle_test/test_parenmatch.py +++ b/Lib/idlelib/idle_test/test_parenmatch.py @@ -17,7 +17,7 @@ def __init__(self, text): self.text = text self.indentwidth = 8 self.tabwidth = 8 - self.prompt_last_line = '>>>' + self.prompt_last_line = '>>>' # Currently not used by parenmatch. class ParenMatchTest(unittest.TestCase): diff --git a/Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst b/Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst deleted file mode 100644 index fd0ae32aa668c8f..000000000000000 --- a/Misc/NEWS.d/next/IDLE/2018-12-24-17-17-21.bpo-34055.zDC3Va.rst +++ /dev/null @@ -1 +0,0 @@ -IDLE Shell: Fix printing smart indent on every line diff --git a/Misc/NEWS.d/next/IDLE/2019-06-02-14-10-52.bpo-35610.0w_v6Y.rst b/Misc/NEWS.d/next/IDLE/2019-06-02-14-10-52.bpo-35610.0w_v6Y.rst new file mode 100644 index 000000000000000..0042ab70497a3b2 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2019-06-02-14-10-52.bpo-35610.0w_v6Y.rst @@ -0,0 +1,2 @@ +Replace now redundant .context_use_ps1 with .prompt_last_line. This finishes +change started in bpo-31858.