Function: lisp-indent-region
lisp-indent-region is a byte-compiled function defined in
lisp-mode.el.gz.
Signature
(lisp-indent-region START END)
Documentation
Indent region as Lisp code, efficiently.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/lisp-mode.el.gz
(defun lisp-indent-region (start end)
"Indent region as Lisp code, efficiently."
(save-excursion
(setq end (copy-marker end))
(goto-char start)
(beginning-of-line)
;; The default `indent-region-line-by-line' doesn't hold a running
;; parse state, which forces each indent call to reparse from the
;; beginning. That has O(n^2) complexity.
(let* ((parse-state (lisp-indent-initial-state))
(pr (unless (minibufferp)
(make-progress-reporter "Indenting region..." (point) end))))
(let ((ppss (lisp-indent-state-ppss parse-state)))
(unless (or (and (bolp) (eolp)) (nth 3 ppss))
(lisp-indent-line (calculate-lisp-indent ppss))))
(let ((indent nil))
(while (progn (setq indent (lisp-indent-calc-next parse-state))
(< (point) end))
(unless (or (and (bolp) (eolp)) (not indent))
(lisp-indent-line indent))
(and pr (progress-reporter-update pr (point)))))
(and pr (progress-reporter-done pr))
(move-marker end nil))))