]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-42426: IDLE: Fix reporting offset of the RE error in searchengine (GH-23447)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 22 Nov 2020 05:24:11 +0000 (21:24 -0800)
committerGitHub <noreply@github.com>
Sun, 22 Nov 2020 05:24:11 +0000 (21:24 -0800)
(cherry picked from commit 453bc1da2023d6cbe362637a2e0b06d0521f013c)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Lib/idlelib/NEWS.txt
Lib/idlelib/idle_test/test_searchengine.py
Lib/idlelib/searchengine.py
Misc/NEWS.d/next/IDLE/2020-11-21-17-21-21.bpo-42426.kNnPoC.rst [new file with mode: 0644]

index e4d5422072756826544a76aa3d4acb81fe0d17a1..4107ff7f7e92418c89fc906667be643630cbeab0 100644 (file)
@@ -3,6 +3,8 @@ Released on 2020-12-??
 ======================================
 
 
+bpo-42426: Fix reporting offset of the RE error in searchengine.
+
 bpo-42416: Get docstrings for IDLE calltips more often
 by using inspect.getdoc.
 
index 3d26d62a95a8730b90933e5a7928852cc3802880..f8401ce9380f25aed12f135e7d554d1650864622 100644 (file)
@@ -175,11 +175,13 @@ class SearchEngineTest(unittest.TestCase):
 
         engine.setpat('')
         Equal(engine.getprog(), None)
+        Equal(Mbox.showerror.message,
+              'Error: Empty regular expression')
         engine.setpat('+')
         engine.revar.set(1)
         Equal(engine.getprog(), None)
-        self.assertEqual(Mbox.showerror.message,
-                         'Error: nothing to repeat at position 0\nPattern: +')
+        Equal(Mbox.showerror.message,
+              'Error: nothing to repeat\nPattern: +\nOffset: 0')
 
     def test_report_error(self):
         showerror = Mbox.showerror
index 911e7d4691cac11f45cf7f2fd86d641f147ce90c..a50038e282ba6c1966a44275276c1cd9781dce37 100644 (file)
@@ -84,20 +84,17 @@ class SearchEngine:
             flags = flags | re.IGNORECASE
         try:
             prog = re.compile(pat, flags)
-        except re.error as what:
-            args = what.args
-            msg = args[0]
-            col = args[1] if len(args) >= 2 else -1
-            self.report_error(pat, msg, col)
+        except re.error as e:
+            self.report_error(pat, e.msg, e.pos)
             return None
         return prog
 
-    def report_error(self, pat, msg, col=-1):
+    def report_error(self, pat, msg, col=None):
         # Derived class could override this with something fancier
         msg = "Error: " + str(msg)
         if pat:
             msg = msg + "\nPattern: " + str(pat)
-        if col >= 0:
+        if col is not None:
             msg = msg + "\nOffset: " + str(col)
         tkMessageBox.showerror("Regular expression error",
                                msg, master=self.root)
diff --git a/Misc/NEWS.d/next/IDLE/2020-11-21-17-21-21.bpo-42426.kNnPoC.rst b/Misc/NEWS.d/next/IDLE/2020-11-21-17-21-21.bpo-42426.kNnPoC.rst
new file mode 100644 (file)
index 0000000..0ab7972
--- /dev/null
@@ -0,0 +1 @@
+Fix reporting offset of the RE error in searchengine.