]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix treesit.el tests
authorYuan Fu <casouri@gmail.com>
Sat, 18 Jan 2025 02:24:45 +0000 (18:24 -0800)
committerEshel Yaron <me@eshelyaron.com>
Sat, 18 Jan 2025 22:03:13 +0000 (23:03 +0100)
* lisp/treesit.el (treesit--imenu-merge-entries):
(Ftreesit_parser_set_included_ranges): Warn in the docstring
that the function is destructive/owns the argument.
* test/src/treesit-tests.el (treesit-range-fixup-after-edit):
(treesit-imenu): Fix tests.

(cherry picked from commit fae424aba97163738f6666ebec1351ceff4b5b2b)

lisp/treesit.el
src/treesit.c
test/src/treesit-tests.el

index b6f429e407f44f87cae27d881dd57c3f4733d242..b94ecd0f26784690bd213c58bf91e1152ec1c9f6 100644 (file)
@@ -3325,7 +3325,9 @@ ENTRY.  MARKER marks the start of each tree-sitter node."
 
 ENTRIES is a list of (CATEGORY . SUB-ENTRIES...).  Merge them so there's
 no duplicate CATEGORY.  CATEGORY's are strings.  The merge is stable,
-meaning the order of elements are kept."
+meaning the order of elements are kept.
+
+This function is destructive, meaning ENTRIES will be modified."
   (let ((return-entries nil))
     (dolist (entry entries)
       (let* ((category (car entry))
index 5de75219907d5ad3a88d78b2d687f5b65d9e2fa5..2f06de67ad8a72337cbd6b860acc8b659eccd981 100644 (file)
@@ -1946,7 +1946,10 @@ which the parser should operate.  Regions must not overlap, and the
 regions should come in order in the list.  Signal
 `treesit-set-range-error' if the argument is invalid, or something
 else went wrong.  If RANGES is nil, the PARSER is to parse the whole
-buffer.  */)
+buffer.
+
+DO NOT modify RANGES after passing it to this function, as RANGES is
+saved to PARSER internally.  */)
   (Lisp_Object parser, Lisp_Object ranges)
 {
   treesit_check_parser (parser);
index 89c48e33161fa00e5af58ddd9c1f99bfd5ae9f8b..699b42df6b7ca97290a84fdc95dd48917d63da33 100644 (file)
@@ -697,58 +697,60 @@ visible_end.)"
   (with-temp-buffer
     (let ((parser (treesit-parser-create 'json)))
       (insert "11111111111111111111")
-      (treesit-parser-set-included-ranges parser '((1 . 20)))
+      (treesit-parser-set-included-ranges parser (copy-tree '((1 . 20))))
       (treesit-parser-root-node parser)
       (should (equal (treesit-parser-included-ranges parser)
-                     '((1 . 20))))
+                     (copy-tree '((1 . 20)))))
 
       (narrow-to-region 5 15)
       (should (equal (treesit-parser-included-ranges parser)
-                     '((5 . 15))))
+                     (copy-tree '((5 . 15)))))
 
       (widen)
       ;; Trickier ranges
       ;; 11111111111111111111
       ;; [    ]      [      ]
       ;;    {  narrow   }
-      (treesit-parser-set-included-ranges parser '((1 . 7) (10 . 15)))
+      (treesit-parser-set-included-ranges
+       parser (copy-tree '((1 . 7) (10 . 15))))
       (should (equal (treesit-parser-included-ranges parser)
-                     '((1 . 7) (10 . 15))))
+                     (copy-tree '((1 . 7) (10 . 15)))))
       (narrow-to-region 5 13)
       (should (equal (treesit-parser-included-ranges parser)
-                     '((5 . 7) (10 . 13))))
+                     (copy-tree '((5 . 7) (10 . 13)))))
 
       ;; Narrow in front, and discard the last one.
       (widen)
       (treesit-parser-set-included-ranges
-       parser '((4 . 10) (12 . 14) (16 . 20)))
+       parser (copy-tree '((4 . 10) (12 . 14) (16 . 20))))
       ;; 11111111111111111111
       ;;    [    ] [  ]  [  ]
       ;; {     } narrow
       (narrow-to-region 1 8)
       (should (equal (treesit-parser-included-ranges parser)
-                     '((4 . 8))))
+                     (copy-tree '((4 . 8)))))
 
       ;; Narrow in back, and discard the first one.
       (widen)
       (treesit-parser-set-included-ranges
-       parser '((1 . 5) (7 . 9) (11 . 17)))
+       parser (copy-tree '((1 . 5) (7 . 9) (11 . 17))))
       ;; 11111111111111111111
       ;; [  ] [  ]  [    ]
       ;;              {     } narrow
       (narrow-to-region 15 20)
       (should (equal (treesit-parser-included-ranges parser)
-                     '((15 . 17))))
+                     (copy-tree '((15 . 17)))))
 
       ;; No overlap
       (widen)
-      (treesit-parser-set-included-ranges parser '((15 . 20)))
+      (treesit-parser-set-included-ranges
+       parser (copy-tree '((15 . 20))))
       ;; 11111111111111111111
       ;;    [           ]
       ;;              {     } narrow
       (narrow-to-region 1 10)
       (should (equal (treesit-parser-included-ranges parser)
-                     '((1 . 1)))))))
+                     (copy-tree '((1 . 1))))))))
 
 ;;; Multiple language
 
@@ -1275,11 +1277,11 @@ This tests bug#60355."
 (ert-deftest treesit-imenu ()
   "Test imenu functions."
   (should (equal (treesit--imenu-merge-entries
-                  '(("Function" . (f1 f2))
-                    ("Function" . (f3 f4 f5))
-                    ("Class" . (c1 c2 c3))
-                    ("Variables" . (v1 v2))
-                    ("Class" . (c4))))
+                  (copy-tree '(("Function" . (f1 f2))
+                               ("Function" . (f3 f4 f5))
+                               ("Class" . (c1 c2 c3))
+                               ("Variables" . (v1 v2))
+                               ("Class" . (c4)))))
                  '(("Function" . (f1 f2 f3 f4 f5))
                    ("Class" . (c1 c2 c3 c4))
                    ("Variables" . (v1 v2))))))