summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/progmodes/python.el38
2 files changed, 30 insertions, 13 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 59fe5fff0b8..11dd2d69c04 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2013-12-12 Fabián Ezequiel Gallina <fgallina@gnu.org>
+
+ * progmodes/python.el (python-indent-calculate-indentation): Fix
+ de-denters cornercase. (Bug#15731)
+
2013-12-12 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/nadvice.el: Add `depth' property to manage ordering.
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 33039a4d087..8de1717096f 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -780,19 +780,31 @@ START is the buffer position where the sexp starts."
;; indentation, in the case current line starts with a
;; `python-indent-dedenters' de-indent one level.
(`after-line
- (-
- (save-excursion
- (goto-char context-start)
- (current-indentation))
- (if (or (save-excursion
- (back-to-indentation)
- (looking-at (regexp-opt python-indent-dedenters)))
- (save-excursion
- (python-util-forward-comment -1)
- (python-nav-beginning-of-statement)
- (looking-at (regexp-opt python-indent-block-enders))))
- python-indent-offset
- 0)))
+ (let* ((pair (save-excursion
+ (goto-char context-start)
+ (cons
+ (current-indentation)
+ (python-info-beginning-of-block-p))))
+ (context-indentation (car pair))
+ (after-block-start-p (cdr pair))
+ (adjustment
+ (if (or (save-excursion
+ (back-to-indentation)
+ (and
+ ;; De-indent only when dedenters are not
+ ;; next to a block start. This allows
+ ;; one-liner constructs such as:
+ ;; if condition: print "yay"
+ ;; else: print "wry"
+ (not after-block-start-p)
+ (looking-at (regexp-opt python-indent-dedenters))))
+ (save-excursion
+ (python-util-forward-comment -1)
+ (python-nav-beginning-of-statement)
+ (looking-at (regexp-opt python-indent-block-enders))))
+ python-indent-offset
+ 0)))
+ (- context-indentation adjustment)))
;; When inside of a string, do nothing. just use the current
;; indentation. XXX: perhaps it would be a good idea to
;; invoke standard text indentation here