summaryrefslogtreecommitdiff
path: root/lisp/progmodes
diff options
context:
space:
mode:
authorFabián Ezequiel Gallina <fgallina@gnu.org>2012-12-31 17:58:57 -0300
committerFabián Ezequiel Gallina <fgallina@gnu.org>2012-12-31 17:58:57 -0300
commit6861432ebdc503bbf0f8886679d169c16060626b (patch)
treec0cb33275d2f49bc8680ce32a5be361a107dfa0f /lisp/progmodes
parent08f592198a56f227b7ba5269910578990f722932 (diff)
downloademacs-6861432ebdc503bbf0f8886679d169c16060626b.tar.gz
* progmodes/python.el (python-nav-end-of-statement): Rewrite in
order to improve efficiency (Based on Daniel Colascione's <dancol@dancol.org> patch). Fixes: debbugs:13182
Diffstat (limited to 'lisp/progmodes')
-rw-r--r--lisp/progmodes/python.el29
1 files changed, 20 insertions, 9 deletions
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 90e0d604217..c168b3813ff 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1177,16 +1177,27 @@ Returns nil if point is not in a def or class."
(forward-line -1))))
(point-marker))
-(defun python-nav-end-of-statement ()
- "Move to end of current statement."
+(defun python-nav-end-of-statement (&optional noend)
+ "Move to end of current statement.
+Optional argument NOEND is internal and makes the logic to not
+jump to the end of line when moving forward searching for the end
+of the statement."
(interactive "^")
- (while (and (goto-char (line-end-position))
- (not (eobp))
- (when (or
- (python-info-line-ends-backslash-p)
- (python-syntax-context 'string)
- (python-syntax-context 'paren))
- (forward-line 1))))
+ (let (string-start bs-pos)
+ (while (and (or noend (goto-char (line-end-position)))
+ (not (eobp))
+ (cond ((setq string-start (python-syntax-context 'string))
+ (goto-char string-start)
+ (python-nav-end-of-statement t))
+ ((python-syntax-context 'paren)
+ ;; The statement won't end before we've escaped
+ ;; at least one level of parenthesis.
+ (condition-case err
+ (goto-char (scan-lists (point) 1 -1))
+ (scan-error (goto-char (nth 3 err)))))
+ ((setq bs-pos (python-info-line-ends-backslash-p))
+ (goto-char bs-pos)
+ (forward-line 1))))))
(point-marker))
(defun python-nav-backward-statement (&optional arg)