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.
This commit is contained in:
Yuan Fu 2023-02-28 23:51:06 -08:00
parent 7ef9a8210c
commit 4a6db125b9
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -1532,14 +1532,24 @@ Similar to `treesit-indent', but indent a region instead."
(aref meta-vec (+ 1 (* idx meta-len))) nil) (aref meta-vec (+ 1 (* idx meta-len))) nil)
(pcase-let* ((`(,anchor . ,offset) (treesit--indent-1)) (pcase-let* ((`(,anchor . ,offset) (treesit--indent-1))
(marker (aref meta-vec (* idx meta-len)))) (marker (aref meta-vec (* idx meta-len))))
;; Set ANCHOR. (if (not (and anchor offset))
(when anchor ;; 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) (if (markerp marker)
(move-marker marker anchor) (move-marker marker anchor)
(setf (aref meta-vec (* idx meta-len)) (setf (aref meta-vec (* idx meta-len))
(copy-marker anchor t)))) (copy-marker anchor t)))
;; SET OFFSET. ;; SET OFFSET.
(setf (aref meta-vec (+ 1 (* idx meta-len))) offset))) (setf (aref meta-vec (+ 1 (* idx meta-len))) offset))))
(cl-incf idx) (cl-incf idx)
(setq lines-left-to-move (forward-line 1))) (setq lines-left-to-move (forward-line 1)))
;; Now IDX = last valid IDX + 1. ;; Now IDX = last valid IDX + 1.