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))
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);
(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
(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))))))