From fb1267d90a5c25a29dbdae170ea065e017b05d29 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Thu, 4 Nov 2021 22:07:48 +0100 Subject: [PATCH] Indent lambdas/closures better * lisp/emacs-lisp/pp.el (pp--format-function): Indent lambdas and closures better. --- lisp/emacs-lisp/pp.el | 13 ++++++++++++- test/lisp/emacs-lisp/pp-resources/code-formats.erts | 8 ++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lisp/emacs-lisp/pp.el b/lisp/emacs-lisp/pp.el index ca3f2a270e2..1d7b935b6d9 100644 --- a/lisp/emacs-lisp/pp.el +++ b/lisp/emacs-lisp/pp.el @@ -236,9 +236,20 @@ Ignores leading comment characters." (defun pp--format-function (sexp) (let* ((sym (car sexp)) (edebug (get sym 'edebug-form-spec)) - (indent (get sym 'lisp-indent-function))) + (indent (get sym 'lisp-indent-function)) + (doc (get sym 'doc-string-elt))) (when (eq indent 'defun) (setq indent 2)) + ;; We probably want to keep all the elements before the doc string + ;; on a single line. + (when doc + (setq indent (1- doc))) + ;; Special-case closures -- these shouldn't really exist in actual + ;; source code, so there's no indentation information. But make + ;; them output slightly better. + (when (and (not indent) + (eq sym 'closure)) + (setq indent 0)) (pp--insert "(" sym) (pop sexp) ;; Get the first entries on the first line. diff --git a/test/lisp/emacs-lisp/pp-resources/code-formats.erts b/test/lisp/emacs-lisp/pp-resources/code-formats.erts index 821e326867b..f48e262f69d 100644 --- a/test/lisp/emacs-lisp/pp-resources/code-formats.erts +++ b/test/lisp/emacs-lisp/pp-resources/code-formats.erts @@ -95,3 +95,11 @@ Also add the value to the front of the list in the variable `values'." (values--store-value result) (pp-display-expression result "*Pp Eval Output*"))) =-=-= + +Name: code-formats9 + +=-= +(lambda () + (interactive) + 1) +=-=-= -- 2.39.2