From be493ea67acdc9367e29025382b534ec4339302f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Thu, 30 Sep 2021 15:13:52 +0200 Subject: [PATCH] Revert "Fix regressions in cl-flet indentation" This reverts commit c42af5aee74f310bdcd63aac96b1c02ec07a1c50. --- etc/NEWS | 3 -- lisp/emacs-lisp/lisp-mode.el | 53 +++++++----------------------------- 2 files changed, 10 insertions(+), 46 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 8b601c0a2d4..36ad63e0f34 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -3302,9 +3302,6 @@ These forms now indent like this: (* x x))) (bla 42)) -This change also affects 'cl-macrolet', 'cl-flet*' and -'cl-symbol-macrolet'. - * Incompatible Lisp Changes in Emacs 28.1 diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index cd054801bca..7ce857e990b 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -1106,8 +1106,8 @@ is the buffer position of the start of the containing expression." (t normal-indent)))))) -(defun lisp--local-defform-body-p (state) - "Return non-nil when at local definition body according to STATE. +(defun lisp--local-defform-body (state) + "Return non-nil if at local definition body according to STATE. STATE is the `parse-partial-sexp' state for current position." (when-let ((start-of-innermost-containing-list (nth 1 state))) (let* ((parents (nth 9 state)) @@ -1121,42 +1121,11 @@ STATE is the `parse-partial-sexp' state for current position." second-cons-after nil)) (pop second-cons-after) (pop parents)) - (when second-order-parent - (save-excursion - (goto-char (1+ second-order-parent)) - (and (memq (read (current-buffer)) - '( cl-flet cl-labels cl-macrolet cl-flet* - cl-symbol-macrolet)) - ;; Now we must check that we are - ;; in the second element of the flet-like form. - ;; It would be easier if `parse-partial-sexp' also recorded - ;; relative positions of subsexps in supersexps - ;; but it doesn't so we check manually. - ;; - ;; First, we must be looking at list now. - (ignore-errors (when (= (scan-lists (point) 1 0) - (scan-sexps (point) 1)) - ;; Looking at list; descend into it: - (down-list 1) - t)) - ;; In Wishful Lisp, the following form would be - ;; (cl-member start-of-innermost-containing-list - ;; (points-at-beginning-of-lists-at-this-level) - ;; :test #'=) - (cl-loop - with pos = (ignore-errors - ;; The first local definition may be indented - ;; with whitespace following open paren. - (goto-char (scan-lists (point) 1 0)) - (goto-char (scan-lists (point) -1 0)) - (point)) - while pos - do (if (= start-of-innermost-containing-list pos) - (cl-return t) - (setq pos (ignore-errors - (goto-char (scan-lists (point) 2 0)) - (goto-char (scan-lists (point) -1 0)) - (point))))))))))) + (and second-order-parent + (save-excursion + (goto-char (1+ second-order-parent)) + (memq (read (current-buffer)) + '(cl-flet cl-labels))))))) (defun lisp-indent-function (indent-point state) "This function is the normal value of the variable `lisp-indent-function'. @@ -1191,9 +1160,7 @@ Lisp function does not specify a special indentation." (if (and (elt state 2) (not (looking-at "\\sw\\|\\s_"))) ;; car of form doesn't seem to be a symbol - (if (lisp--local-defform-body-p state) - ;; We nevertheless check whether we are in flet-like form - ;; as we presume local function names could be non-symbols. + (if (lisp--local-defform-body state) (lisp-indent-defform state indent-point) (if (not (> (save-excursion (forward-line 1) (point)) calculate-lisp-indent-last-sexp)) @@ -1217,8 +1184,8 @@ Lisp function does not specify a special indentation." (and (null method) (> (length function) 3) (string-match "\\`def" function)) - ;; Check whether we are in flet-like form. - (lisp--local-defform-body-p state)) + ;; Check whether we are in flet or labels. + (lisp--local-defform-body state)) (lisp-indent-defform state indent-point)) ((integerp method) (lisp-indent-specform method state -- 2.39.5