emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master a3c79d4: Fix electric indent bug in python-mode aft


From: Eli Zaretskii
Subject: [Emacs-diffs] master a3c79d4: Fix electric indent bug in python-mode after dedenting colon
Date: Sat, 5 Jan 2019 04:05:38 -0500 (EST)

branch: master
commit a3c79d44ccb4f6503d0a8b02230ff7a41db64ff8
Author: Joel Rosdahl <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Fix electric indent bug in python-mode after dedenting colon
    
    * list/progmodes/python.el (python-indent-post-self-insert-function):
    Use markers instead of positions when reindenting statement(s) after
    inserting electric colon to avoid reindenting too many
    statements (bug#22663).
    
    * test/lisp/progmodes/python-tests.el (python-indent-electric-colon-2):
    Improve test case to also verify the fix of bug#22663.
    
    Copyright-paperwork-exempt: yes
---
 lisp/progmodes/python.el            | 19 ++++++++++---------
 test/lisp/progmodes/python-tests.el |  3 +++
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index ea34e1d..71b2a94 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1334,16 +1334,17 @@ the line will be re-indented automatically if needed."
            (not (equal ?: (char-before (1- (point)))))
            (not (python-syntax-comment-or-string-p)))
       ;; Just re-indent dedenters
-      (let ((dedenter-pos (python-info-dedenter-statement-p))
-            (current-pos (point)))
+      (let ((dedenter-pos (python-info-dedenter-statement-p)))
         (when dedenter-pos
-          (save-excursion
-            (goto-char dedenter-pos)
-            (python-indent-line)
-            (unless (= (line-number-at-pos dedenter-pos)
-                       (line-number-at-pos current-pos))
-              ;; Reindent region if this is a multiline statement
-              (python-indent-region dedenter-pos current-pos)))))))))
+          (let ((start (copy-marker dedenter-pos))
+                (end (point-marker)))
+            (save-excursion
+              (goto-char start)
+              (python-indent-line)
+              (unless (= (line-number-at-pos start)
+                         (line-number-at-pos end))
+                ;; Reindent region if this is a multiline statement
+                (python-indent-region start end))))))))))
 
 
 ;;; Mark
diff --git a/test/lisp/progmodes/python-tests.el 
b/test/lisp/progmodes/python-tests.el
index 34a0519..94c846e 100644
--- a/test/lisp/progmodes/python-tests.el
+++ b/test/lisp/progmodes/python-tests.el
@@ -1161,10 +1161,13 @@ def b()
 if do:
     something()
     else
+outside
 "
    (python-tests-look-at "else")
    (goto-char (line-end-position))
    (python-tests-self-insert ":")
+   (should (= (current-indentation) 0))
+   (python-tests-look-at "outside")
    (should (= (current-indentation) 0))))
 
 (ert-deftest python-indent-electric-colon-3 ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]