From: Yuan Fu Date: Wed, 1 Mar 2023 07:51:06 +0000 (-0800) Subject: Fix treesit-indent-region X-Git-Tag: emacs-29.0.90~284 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4a6db125b9ee5d681aa09d86c9283526f204b274;p=emacs.git Fix treesit-indent-region Fix it for the case where there is no suitable rule for the line. Right now treesit-indent-region would indent the line to column 0. After the change the indentation is not altered. * lisp/treesit.el (treesit-indent-region): Handle the case where ANCHOR or OFFSET is nil specially. --- diff --git a/lisp/treesit.el b/lisp/treesit.el index 052f641abfd..fe9ed399773 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -1532,14 +1532,24 @@ Similar to `treesit-indent', but indent a region instead." (aref meta-vec (+ 1 (* idx meta-len))) nil) (pcase-let* ((`(,anchor . ,offset) (treesit--indent-1)) (marker (aref meta-vec (* idx meta-len)))) - ;; Set ANCHOR. - (when anchor + (if (not (and anchor offset)) + ;; No indent for this line, either... + (if (markerp marker) + (progn + ;; ... Set marker and offset to do a dummy + ;; indent, or... + (back-to-indentation) + (move-marker marker (point)) + (setf (aref meta-vec (+ 1 (* idx meta-len))) 0)) + ;; ...Set anchor to nil so no indent is performed. + (setf (aref meta-vec (* idx meta-len)) nil)) + ;; Set ANCHOR. (if (markerp marker) (move-marker marker anchor) (setf (aref meta-vec (* idx meta-len)) - (copy-marker anchor t)))) - ;; SET OFFSET. - (setf (aref meta-vec (+ 1 (* idx meta-len))) offset))) + (copy-marker anchor t))) + ;; SET OFFSET. + (setf (aref meta-vec (+ 1 (* idx meta-len))) offset)))) (cl-incf idx) (setq lines-left-to-move (forward-line 1))) ;; Now IDX = last valid IDX + 1.