]> git.eshelyaron.com Git - emacs.git/commitdiff
Limit recursion level for tree-sitter imenu functions
authorYuan Fu <casouri@gmail.com>
Mon, 21 Nov 2022 00:56:33 +0000 (16:56 -0800)
committerYuan Fu <casouri@gmail.com>
Mon, 21 Nov 2022 01:04:58 +0000 (17:04 -0800)
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.

lisp/progmodes/c-ts-mode.el
lisp/progmodes/java-ts-mode.el
lisp/progmodes/js.el
lisp/progmodes/json-ts-mode.el
lisp/progmodes/python.el
lisp/textmodes/css-mode.el

index 9fc7e6f67c22bdaa314209f2ce352cbec2edcd73..3b7007bfeebf49c4cf6e4e53c117fecf9c932d52 100644 (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)))
index 6a800d292c85c7ee08aa246d01e1fcd4a8108ef7..62962b7293b2fad87f4c98bd5fbc7d861f49a1f3 100644 (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)
index 4b07c0d12c827df4b2bdff7acde38a0db7993db8..50674a1c039c45f36a66f5de61b83ca35ede337c 100644 (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)))))
index 7e0dd1791143afe043826fa033c8a2f9e85b36bd..c03ff8515043f0daa95ad7a114008003c8139829 100644 (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
index 2f967ebab24300dbb4847f0f7adb05091fbe91d3..c49af223c660711bd479b9031db552c150375d11 100644 (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 ()
index 6915e499bbabdbafb5a94d39a0ae82896aee6de9..97272cb714756b7543209ef4e342e1ecc59d47b0 100644 (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