GNU bug report logs - #59945
[PATCH] Fix empty pairs in js tree-sitter imenu alist

Previous Next

Package: emacs;

Reported by: "Charl P. Botha" <cpbotha <at> vxlabs.com>

Date: Sat, 10 Dec 2022 17:46:03 UTC

Severity: normal

Tags: patch

Done: Yuan Fu <casouri <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: "Charl P. Botha" <cpbotha <at> vxlabs.com>
Subject: bug#59945: closed (Re: bug#59945: [PATCH] Fix empty pairs in js
 tree-sitter imenu alist)
Date: Wed, 21 Dec 2022 04:50:03 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#59945: [PATCH] Fix empty pairs in js tree-sitter imenu alist

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 59945 <at> debbugs.gnu.org.

-- 
59945: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=59945
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Yuan Fu <casouri <at> gmail.com>
To: cpbotha <at> vxlabs.com
Cc: Robert Pluim <rpluim <at> gmail.com>, 59945-done <at> debbugs.gnu.org,
 Eli Zaretskii <eliz <at> gnu.org>, 59945 <at> debbugs.gnu.org
Subject: Re: bug#59945: [PATCH] Fix empty pairs in js tree-sitter imenu alist
Date: Tue, 20 Dec 2022 20:48:58 -0800
"Charl P. Botha" <cpbotha <at> vxlabs.com> writes:

> On Fri, Dec 16, 2022, at 16:11, Robert Pluim wrote:
>>>>>>> On Fri, 16 Dec 2022 07:58:46 +0200, "Charl P. Botha" <cpbotha <at> vxlabs.com> said:
>>     Charl> I followed the instructions at
>>     Charl> 
>> https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Patches.html
>>     Charl> which said to use "git format-patch master" and include 
>> either inline
>>     Charl> (which I did) or as a mime attachment.
>>
>> Not quite. You sent the result of 'git format-patch master' as an
>> email, not inline in an email (presumably with 'git send-email'). That
>> shouldnʼt matter, because 'git apply' should work in either case, but
>> attachments are sometimes easier to work with.
>
> Thank you for the correction, Robert! I thought that sending the
> output of `git format-patch master` as a plain-text email was what was
> meant by "inline". I'm sorry about this, I'll stick to attachments in
> the future.

Not really about attachment vs inline. The first patch doesn’t have
author, commit message, etc. I’m fine with either attachment or inline
:-)

> Yuan, can you confirm that the patch I eventually attached is OK?

Thanks! I applied your patch. I made a little change to it so it’s more
idiomatic.

Elisp tip of the day: if you want to make a list of possibly nil objects
and don’t want nil’s in the list, you can use append. Basically change

(list a b c)

to

(append (and xxx (list a)) (and yyy (list b)) (and zzz (list c)))

If the condition aren’t met, eg, (and xxx (list a)) returns nil, append
just appends an empty list.

Yuan

[Message part 3 (message/rfc822, inline)]
From: "Charl P. Botha" <cpbotha <at> vxlabs.com>
To: bug-gnu-emacs <at> gnu.org
Subject: [PATCH] Fix empty pairs in js tree-sitter imenu alist
Date: Sat, 10 Dec 2022 19:17:41 +0200
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 | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 45dfef372cd..6ca260ad8ad 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -3732,10 +3732,17 @@ js--treesit-imenu
          (func-tree (treesit-induce-sparse-tree
                      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)))))
+                    node "lexical_declaration" nil 1000))
+         (imenu-alist nil))
+    ;; when a sub-tree is empty, we should not return that pair at all
+    ;; https://github.com/minad/consult/issues/697#issuecomment-1345302734
+    (when func-tree
+      (setq imenu-alist (cons `("Function" . ,(js--treesit-imenu-1 func-tree)) imenu-alist)))
+    (when var-tree
+      (setq imenu-alist (cons `("Variable" . ,(js--treesit-imenu-1 var-tree)) imenu-alist)))
+    (when class-tree
+      (setq imenu-alist (cons `("Class" . ,(js--treesit-imenu-1 class-tree)) imenu-alist)))
+    imenu-alist))

 ;;; Main Function

--
2.25.1



This bug report was last modified 2 years and 154 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.