emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-29 4a6db125b9e: Fix treesit-indent-region


From: Yuan Fu
Subject: emacs-29 4a6db125b9e: Fix treesit-indent-region
Date: Wed, 1 Mar 2023 03:57:09 -0500 (EST)

branch: emacs-29
commit 4a6db125b9ee5d681aa09d86c9283526f204b274
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>

    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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]