From 4a6db125b9ee5d681aa09d86c9283526f204b274 Mon Sep 17 00:00:00 2001 From: Yuan Fu Date: Tue, 28 Feb 2023 23:51:06 -0800 Subject: [PATCH] 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. --- lisp/treesit.el | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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. -- 2.39.5