summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/progmodes/python.el6
-rw-r--r--test/ChangeLog5
-rw-r--r--test/automated/python-tests.el15
4 files changed, 30 insertions, 1 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index fe06ac671b7..d13a62a9b2d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,10 @@
2014-11-15 Fabián Ezequiel Gallina <fgallina@gnu.org>
+ * progmodes/python.el (python-indent-calculate-levels): Fix
+ indentation behavior multiline dedenter statement. (Bug#18432)
+
+2014-11-15 Fabián Ezequiel Gallina <fgallina@gnu.org>
+
* progmodes/python.el (python-indent-region): Use
python-indent-line and skip special cases. (Bug#18843)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 5f8d7a29fa6..89b2f1fd081 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -955,7 +955,11 @@ START is the buffer position where the sexp starts."
(defun python-indent-calculate-levels ()
"Calculate `python-indent-levels' and reset `python-indent-current-level'."
- (if (not (python-info-dedenter-statement-p))
+ (if (or (python-info-continuation-line-p)
+ (not (python-info-dedenter-statement-p)))
+ ;; XXX: This asks for a refactor. Even if point is on a
+ ;; dedenter statement, it could be multiline and in that case
+ ;; the continuation lines should be indented with normal rules.
(let* ((indentation (python-indent-calculate-indentation))
(remainder (% indentation python-indent-offset))
(steps (/ (- indentation remainder) python-indent-offset)))
diff --git a/test/ChangeLog b/test/ChangeLog
index 971a4f8f400..4f7f068e796 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,5 +1,10 @@
2014-11-15 Fabián Ezequiel Gallina <fgallina@gnu.org>
+ * automated/python-tests.el (python-indent-dedenters-8): New test
+ for Bug#18432.
+
+2014-11-15 Fabián Ezequiel Gallina <fgallina@gnu.org>
+
* automated/python-tests.el (python-indent-region-1)
(python-indent-region-2, python-indent-region-3)
(python-indent-region-4, python-indent-region-5): New tests.
diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el
index 8c657c38b64..f368f995cae 100644
--- a/test/automated/python-tests.el
+++ b/test/automated/python-tests.el
@@ -711,6 +711,21 @@ if a:
(should (= (python-indent-calculate-indentation) 0))
(should (equal (python-indent-calculate-levels) '(0)))))
+(ert-deftest python-indent-dedenters-8 ()
+ "Test indentation for Bug#18432."
+ (python-tests-with-temp-buffer
+ "
+if (a == 1 or
+ a == 2):
+ pass
+elif (a == 3 or
+a == 4):
+"
+ (python-tests-look-at "a == 4):\n")
+ (should (eq (car (python-indent-context)) 'inside-paren))
+ (should (= (python-indent-calculate-indentation) 6))
+ (should (equal (python-indent-calculate-levels) '(0 4 6)))))
+
(ert-deftest python-indent-electric-colon-1 ()
"Test indentation case from Bug#18228."
(python-tests-with-temp-buffer