]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix empty pairs in js tree-sitter imenu alist (bug#59945)
authorCharl P. Botha <cpbotha@vxlabs.com>
Sat, 10 Dec 2022 17:09:38 +0000 (19:09 +0200)
committerYuan Fu <casouri@gmail.com>
Wed, 21 Dec 2022 04:50:50 +0000 (20:50 -0800)
The current js--treesit-imenu, used by the JavaScript, TypeScript and
TSX tree-sitter modes, would return empty pairs in the imenu alist if
there were none of that type of symbol.

This would break both the built in imenu and also packages like
consult-imenu.

See https://github.com/minad/consult/issues/697 for the discussion
there.

* lisp/progmodes/js.el (js--treesit-imenu): Don't add nil indexes.

Copyright-paperwork-exempt: yes

lisp/progmodes/js.el

index 8c1ee495c2db4705fc3c0e5845f85be75f6e0b52..1b34c0de418c4d6e7f3ea129b6df8e806b5e48a9 100644 (file)
@@ -3738,9 +3738,14 @@ definition*\"."
                      node "function_declaration" nil 1000))
          (var-tree (treesit-induce-sparse-tree
                     node "lexical_declaration" nil 1000)))
-    `(("Class" . ,(js--treesit-imenu-1 class-tree))
-      ("Variable" . ,(js--treesit-imenu-1 var-tree))
-      ("Function" . ,(js--treesit-imenu-1 func-tree)))))
+    ;; When a sub-tree is empty, we should not return that pair at all.
+    (append
+     (and func-tree
+          `(("Function" . ,(js--treesit-imenu-1 func-tree))))
+     (and var-tree
+          `(("Variable" . ,(js--treesit-imenu-1 var-tree))))
+     (and class-tree
+          `(("Class" . ,(js--treesit-imenu-1 class-tree)))))))
 
 ;;; Main Function