From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Wilhelm Kirschbaum Newsgroups: gmane.emacs.bugs Subject: bug#58711: Treesit hangs when calling treesit-search-forward Date: Mon, 14 Nov 2022 12:03:11 +0200 Message-ID: References: <895A3C87-507A-4FC5-8BAE-B138B35CD40C@gmail.com> <46B629C0-1413-41CE-BDA8-CE14C12B4449@gmail.com> <3054006.Zh9iicr411@melissa.local> <106B8822-FE37-4590-BC77-5FB24FB0758C@gmail.com> <82A013FB-9A94-4E57-9FD2-AF8E892241A9@gmail.com> <7B22DC5E-CCC6-4981-AC61-7774FE2846AA@gmail.com> <7333D25E-DFC5-4720-867F-1FFFE3B0B12B@gmail.com> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="000000000000856f7705ed6b59ae" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="14574"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 58711@debbugs.gnu.org To: Yuan Fu Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Nov 15 01:11:37 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oujY8-0003WI-A0 for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 15 Nov 2022 01:11:36 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ouiol-0000lO-8p; Mon, 14 Nov 2022 18:24:43 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ouifw-00049x-29 for bug-gnu-emacs@gnu.org; Mon, 14 Nov 2022 18:15:41 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ouWJu-0000fz-9c for bug-gnu-emacs@gnu.org; Mon, 14 Nov 2022 05:04:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ouWJu-0004uF-4V for bug-gnu-emacs@gnu.org; Mon, 14 Nov 2022 05:04:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Wilhelm Kirschbaum Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 14 Nov 2022 10:04:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 58711 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo Original-Received: via spool by 58711-submit@debbugs.gnu.org id=B58711.166842021118815 (code B ref 58711); Mon, 14 Nov 2022 10:04:02 +0000 Original-Received: (at 58711) by debbugs.gnu.org; 14 Nov 2022 10:03:31 +0000 Original-Received: from localhost ([127.0.0.1]:48951 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ouWJP-0004tP-8k for submit@debbugs.gnu.org; Mon, 14 Nov 2022 05:03:31 -0500 Original-Received: from mail-lj1-f182.google.com ([209.85.208.182]:33319) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ouWJN-0004tA-6e for 58711@debbugs.gnu.org; Mon, 14 Nov 2022 05:03:30 -0500 Original-Received: by mail-lj1-f182.google.com with SMTP id t10so12492818ljj.0 for <58711@debbugs.gnu.org>; Mon, 14 Nov 2022 02:03:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=floatpays.co.za; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=KylFJugXLyOWbfMiQf6KCmc2tcEj8z51ibhXTLa4IqY=; b=YZkNMVsPsAEu/dPuHjWa0mEnx+q2Ec4TH4HNCvzmLKvarHoRrrZ6towMHq8msAed8C CHtI7VVHTpvfjGflM7pKx1kXeDms2mPwArXTa9bpPDkZ7a+Nlvs3WhxpI80CPyvVhYbP K+Gd1SGrMSNlWWlM6pYcHY45q9FbZJ+fep+BU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KylFJugXLyOWbfMiQf6KCmc2tcEj8z51ibhXTLa4IqY=; b=Nh+y9xzC5T/x7i7N8wdKRnG//kQlA2kJzKRbhlGMCUjPrhxJzKo98qAAQkdQzA+4hN ogHwGfuoNjEcnICKG50b7wZL+u6wmtM6ZVLzj1Je1Sfc+XMt6s+7+wHWO3jvd7GYj74G p8pJuY8jopKr5O9rRZVJM3bfo/OA9vMKozwuYEfD3ngOyMOXiY5BufqbufIxrk+bgGji nUwLM5Not5o5PpbKz0Tn9Pbx0i8jGwtoeeq2q8hvTATK98O/CgNg51ga0edLQE9jPy7P zy3Jz6HZ+eHLwEfml+vSfowvgzXSWAKNaDlsqFPYt/NylhpmQLW/1jCoZr8V9mCYGBPE sYQg== X-Gm-Message-State: ANoB5pnQ7W7+yscwYnsXh0BIGO9ZoNC0Q9CxeNeSUfGrVEm8pO+ZLcdR Cu+sNPQSwANEY1D4QQzZXq6Cy1Cx1G22KtVM6KmSuw== X-Google-Smtp-Source: AA0mqf49ed78UAGhhOZV3P2r1weYtOZISo8kVqbNSXmNSZbB05hcTAYWzAP2en5dyBvoIBQjvoiT97OajT4RkFkEomA= X-Received: by 2002:a05:651c:1988:b0:278:f1a5:a365 with SMTP id bx8-20020a05651c198800b00278f1a5a365mr2630793ljb.29.1668420202747; Mon, 14 Nov 2022 02:03:22 -0800 (PST) In-Reply-To: <7333D25E-DFC5-4720-867F-1FFFE3B0B12B@gmail.com> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:247847 Archived-At: --000000000000856f7705ed6b59ae Content-Type: text/plain; charset="UTF-8" Thank you, the treesit-parent-while is better. On Mon, 14 Nov 2022 at 10:45, Yuan Fu wrote: > > > > On Nov 13, 2022, at 10:32 PM, Wilhelm Kirschbaum < > wilhelm@floatpays.co.za> wrote: > > > > This works for me for all cases I managed to test: > > > > ( I have to keep track of the EOL and BOL to ensure that we don't jump > to parents or children. ) > > > > (defun heex--treesit-largest-node-at-point (&optional node) > > "Find the largest node at point or from specified NODE." > > (save-excursion > > (forward-comment (point-max)) > > (let ((node-list > > (cl-loop for node = (or node (treesit-node-at (point))) > > then (treesit-node-parent node) > > while (and node (not (equal (treesit-node-type node) > "fragment"))) > > if (eq (treesit-node-start node) > > (point)) > > collect node))) > > (car (last node-list))))) > > For largest node at point, you can probably use something like > > (treesit-parent-while (or node (treesit-node-at (point))) > (lambda (n) (eq (treesit-node-start n) (point)))) > > Yuan --000000000000856f7705ed6b59ae Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thank you, the treesit-parent-while is better.
On Mon, = 14 Nov 2022 at 10:45, Yuan Fu <caso= uri@gmail.com> wrote:


> On Nov 13, 2022, at 10:32 PM, Wilhelm Kirschbaum <wilhelm@floatpays.co.za>= wrote:
>
> This works for me for all cases I managed to test:
>
> ( I have to keep track of the EOL and BOL to ensure that we don't = jump to parents or children. )
>
> (defun heex--treesit-largest-node-at-point (&optional node)
>=C2=A0 =C2=A0"Find the largest node at point or from specified NOD= E."
>=C2=A0 =C2=A0(save-excursion
>=C2=A0 =C2=A0 =C2=A0(forward-comment (point-max))
>=C2=A0 =C2=A0 =C2=A0(let ((node-list
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-loop for node =3D (or nod= e (treesit-node-at (point)))
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0then (treesit-node-parent node)
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0while (and node (not (equal (treesit-node-type node) "fragment&q= uot;)))
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0if (eq (treesit-node-start node)
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 (point))
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0collect node)))
>=C2=A0 =C2=A0 =C2=A0 =C2=A0(car (last node-list)))))

For largest node at point, you can probably use something like

(treesit-parent-while (or node (treesit-node-at (point)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (lambda (n) (eq (treesit-node-start n) (point))))

Yuan
--000000000000856f7705ed6b59ae--