GNU bug report logs - #72691
Recursive descent in treesiter parse tree

Previous Next

Package: emacs;

Reported by: Pranshu Sharma <pranshusharma198 <at> gmail.com>

Date: Sun, 18 Aug 2024 07:36:02 UTC

Severity: normal

Done: Eli Zaretskii <eliz <at> gnu.org>

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: Eli Zaretskii <eliz <at> gnu.org>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#72691: closed (Recursive descent in treesiter parse tree)
Date: Sat, 31 Aug 2024 08:14:01 +0000
[Message part 1 (text/plain, inline)]
Your message dated Sat, 31 Aug 2024 11:12:23 +0300
with message-id <86h6b1cdqw.fsf <at> gnu.org>
and subject line Re: bug#72691: Recursive descent in treesiter parse tree
has caused the debbugs.gnu.org bug report #72691,
regarding Recursive descent in treesiter parse tree
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
72691: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=72691
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Pranshu Sharma <pranshusharma198 <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: Recursive descent in treesiter parse tree
Date: Sun, 18 Aug 2024 14:57:10 +1000
[Message part 3 (text/plain, inline)]
Hello all,

I am trying to write a major mode in which all instances of a node in
another matched node. For this, recursion is needed, and for that it is
necessary to store a match in a variable:
Say I want to highlight all instances of (x) that are inside y in the
following parse tree, where bolded means I want to match:
(x) in (q (y (*x*) (l (*x*) (l (*x*) (p))) (x))

"(y) @test
        @test . (_) @font-lock-variable-name-face"
"(y) @test
        (@test . (_) @font-lock-variable-name-face)"
"(y) @test
        (test . (_) @font-lock-variable-name-face)"

All of the above fail, which leads me to think that @test stores the text
instead of the tree. In this case, how would I recursively match all
instances of
[Message part 4 (text/html, inline)]
[Message part 5 (message/rfc822, inline)]
From: Eli Zaretskii <eliz <at> gnu.org>
To: Yuan Fu <casouri <at> gmail.com>
Cc: pranshusharma198 <at> gmail.com, 72691-done <at> debbugs.gnu.org
Subject: Re: bug#72691: Recursive descent in treesiter parse tree
Date: Sat, 31 Aug 2024 11:12:23 +0300
> From: Yuan Fu <casouri <at> gmail.com>
> Date: Mon, 19 Aug 2024 20:38:16 -0700
> Cc: Eli Zaretskii <eliz <at> gnu.org>,
>  72691 <at> debbugs.gnu.org
> 
> 
> 
> > On Aug 18, 2024, at 7:57 AM, Pranshu Sharma <pranshusharma198 <at> gmail.com> wrote:
> > 
> > Ok, I found the solution: you have to capture  witha function and traverse the whole tree recursively
> 
> As you’ve found out, tree-sitter’s query system doesn’t support the feature you want (it’ll be quite expensive to implement, I think). Even if you’ve found a solution, if you want, maybe you can describe your actual use-case and I can check if your solution is the most optimal.

No further comments, so I'm now closing this bug.


This bug report was last modified 265 days ago.

Previous Next


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