Limit recursion level for tree-sitter imenu functions

Generating imenu index doesn't require going down to the bottom of the
tree (defun's are usually top-level).  Add limit so we don't go too
far down on very large buffers.

* lisp/progmodes/c-ts-mode.el (c-ts-mode--imenu)
* lisp/progmodes/java-ts-mode.el (java-ts-mode--imenu)
* lisp/progmodes/js.el (js--treesit-imenu)
* lisp/progmodes/json-ts-mode.el (json-ts-mode--imenu)
* lisp/progmodes/python.el (python-imenu-treesit-create-index)
* lisp/textmodes/css-mode.el (css--treesit-imenu): Add limit to
treesit-induce-sparse-tree.
This commit is contained in:
Yuan Fu 2022-11-20 16:56:33 -08:00
parent 625ea08652
commit 32870d2f20
No known key found for this signature in database
GPG key ID: 56E19BC57664A442
6 changed files with 17 additions and 14 deletions

View file

@ -448,11 +448,11 @@ the subtrees."
"Return Imenu alist for the current buffer."
(let* ((node (treesit-buffer-root-node))
(func-tree (treesit-induce-sparse-tree
node "^function_definition$"))
node "^function_definition$" nil 1000))
(var-tree (treesit-induce-sparse-tree
node "^declaration$"))
node "^declaration$" nil 1000))
(struct-tree (treesit-induce-sparse-tree
node "^struct_specifier$"))
node "^struct_specifier$" nil 1000))
(func-index (c-ts-mode--imenu-1 func-tree))
(var-index (c-ts-mode--imenu-1 var-tree))
(struct-index (c-ts-mode--imenu-1 struct-tree)))

View file

@ -246,23 +246,23 @@ the subtrees."
(class-tree
`("Class" . ,(java-ts-mode--imenu-1
(treesit-induce-sparse-tree
node "^class_declaration$"))))
node "^class_declaration$" nil 1000))))
(interface-tree
`("Interface" . ,(java-ts-mode--imenu-1
(treesit-induce-sparse-tree
node "^interface_declaration$"))))
node "^interface_declaration$" nil 1000))))
(enum-tree
`("Enum" . ,(java-ts-mode--imenu-1
(treesit-induce-sparse-tree
node "^enum_declaration$"))))
node "^enum_declaration$" nil 1000))))
(record-tree
`("Record" . ,(java-ts-mode--imenu-1
(treesit-induce-sparse-tree
node "^record_declaration$"))))
node "^record_declaration$" nil 1000))))
(method-tree
`("Method" . ,(java-ts-mode--imenu-1
(treesit-induce-sparse-tree
node "^method_declaration$")))))
node "^method_declaration$" nil 1000)))))
(cl-remove-if
#'null
`(,(when (cdr class-tree) class-tree)

View file

@ -3688,11 +3688,12 @@ definition*\"."
(let* ((node (treesit-buffer-root-node))
(class-tree (treesit-induce-sparse-tree
node (rx (or "class_declaration"
"method_definition"))))
"method_definition"))
nil 1000))
(func-tree (treesit-induce-sparse-tree
node "function_declaration"))
node "function_declaration" nil 1000))
(var-tree (treesit-induce-sparse-tree
node "lexical_declaration")))
node "lexical_declaration" nil 1000)))
`(("Class" . ,(js--treesit-imenu-1 class-tree))
("Varieable" . ,(js--treesit-imenu-1 var-tree))
("Function" . ,(js--treesit-imenu-1 func-tree)))))

View file

@ -115,7 +115,7 @@ the subtrees."
"Return Imenu alist for the current buffer."
(let* ((node (treesit-buffer-root-node))
(tree (treesit-induce-sparse-tree
node "pair")))
node "pair" nil 1000)))
(json-ts-mode--imenu-1 tree)))
;;;###autoload

View file

@ -5492,7 +5492,8 @@ Similar to `python-imenu-create-index' but use tree-sitter."
(rx (seq bol
(or "function" "class")
"_definition"
eol)))))
eol))
nil 1000)))
(python--imenu-treesit-create-index-1 tree)))
(defun python-imenu-treesit-create-flat-index ()

View file

@ -1406,7 +1406,8 @@ the subtrees."
"Return Imenu alist for the current buffer."
(let* ((node (treesit-buffer-root-node))
(tree (treesit-induce-sparse-tree
node (rx (or "rule_set" "media_statement")))))
node (rx (or "rule_set" "media_statement"))
nil 1000)))
(css--treesit-imenu-1 tree)))
;;; Completion