From c132ab7921c9d04e8054a7792b6de92fe6bc687a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabi=C3=A1n=20Ezequiel=20Gallina?= Date: Wed, 20 Feb 2013 17:41:46 -0300 Subject: [PATCH] * progmodes/python.el (python-info-current-defun): Enhance match-data cluttering prevention. --- lisp/ChangeLog | 5 ++++ lisp/progmodes/python.el | 68 +++++++++++++++++++++++------------------------- 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9fe6fd4f1f9..a3cd719895c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-02-20 Fabián Ezequiel Gallina + + * progmodes/python.el (python-info-current-defun): Enhance + match-data cluttering prevention. + 2013-02-19 Glenn Morris * net/tramp.el (tramp-get-debug-buffer): Ensure outline.el is not diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 1ee95daa0a9..c2739ce80a1 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -2949,42 +2949,40 @@ not inside a defun." (type)) (catch 'exit (while (python-nav-beginning-of-defun 1) - (when (and - (or (not last-indent) - (< (current-indentation) last-indent)) - (or - (and first-run + (when (save-match-data + (and + (or (not last-indent) + (< (current-indentation) last-indent)) + (or + (and first-run + (save-excursion + ;; If this is the first run, we may add + ;; the current defun at point. + (setq first-run nil) + (goto-char starting-pos) + (python-nav-beginning-of-statement) + (beginning-of-line 1) + (looking-at-p + python-nav-beginning-of-defun-regexp))) + (< starting-pos (save-excursion - ;; If this is the first run, we may add - ;; the current defun at point. - (setq first-run nil) - (goto-char starting-pos) - (python-nav-beginning-of-statement) - (beginning-of-line 1) - (looking-at-p - python-nav-beginning-of-defun-regexp))) - (< starting-pos - (save-excursion - (let ((min-indent - (+ (current-indentation) - python-indent-offset))) - (if (< starting-indentation min-indent) - ;; If the starting indentation is not - ;; within the min defun indent make the - ;; check fail. - starting-pos - ;; Else go to the end of defun and add - ;; up the current indentation to the - ;; ending position. - (save-match-data - ;; FIXME: avoid cluttering match-data - ;; where's not wanted. - (python-nav-end-of-defun)) - (+ (point) - (if (>= (current-indentation) min-indent) - (1+ (current-indentation)) - 0)))))))) - (setq last-indent (current-indentation)) + (let ((min-indent + (+ (current-indentation) + python-indent-offset))) + (if (< starting-indentation min-indent) + ;; If the starting indentation is not + ;; within the min defun indent make the + ;; check fail. + starting-pos + ;; Else go to the end of defun and add + ;; up the current indentation to the + ;; ending position. + (python-nav-end-of-defun) + (+ (point) + (if (>= (current-indentation) min-indent) + (1+ (current-indentation)) + 0))))))))) + (save-match-data (setq last-indent (current-indentation))) (if (or (not include-type) type) (setq names (cons (match-string-no-properties 1) names)) (let ((match (split-string (match-string-no-properties 0)))) -- 2.11.4.GIT