GNU bug report logs - #74963
Ambiguous treesit named and anonymous nodes in ruby-ts-mode

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Juri Linkov <juri@HIDDEN>; dated Thu, 19 Dec 2024 07:20:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 30 Jan 2025 07:22:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jan 30 02:22:28 2025
Received: from localhost ([127.0.0.1]:44089 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tdOsd-0004hr-N6
	for submit <at> debbugs.gnu.org; Thu, 30 Jan 2025 02:22:28 -0500
Received: from relay8-d.mail.gandi.net ([217.70.183.201]:37679)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <juri@HIDDEN>) id 1tdOsb-0004hU-79
 for 74963 <at> debbugs.gnu.org; Thu, 30 Jan 2025 02:22:26 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id 954E3443F1;
 Thu, 30 Jan 2025 07:22:15 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Yuan Fu <casouri@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <E55A7CB4-0389-4E5B-B7E0-9146F27E35A3@HIDDEN> (Yuan Fu's
 message of "Fri, 17 Jan 2025 23:59:52 -0800")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN> <87ldw5o7cp.fsf@HIDDEN>
 <87ed17i4ve.fsf@HIDDEN>
 <C50D9079-20CC-4D9B-969F-51FB5EB79938@HIDDEN>
 <87seplltn6.fsf@HIDDEN>
 <E55A7CB4-0389-4E5B-B7E0-9146F27E35A3@HIDDEN>
Date: Thu, 30 Jan 2025 09:15:58 +0200
Message-ID: <87msf8zs9d.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-GND-State: clean
X-GND-Score: 0
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdehvddtucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecunecujfgurhephffvvefujghofhffkfgfgggtgfesthekredttderjeenucfhrhhomheplfhurhhiucfnihhnkhhovhcuoehjuhhriheslhhinhhkohhvrdhnvghtqeenucggtffrrghtthgvrhhnpeeiffetjeegheffjeeutdeihfdukeegjeetkeeigfevueehtedvfeegkeekveekudenucfkphepledurdduvdelrdeliedrledtnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledurdduvdelrdeliedrledtpdhhvghlohepmhgrihhlrdhgrghnughirdhnvghtpdhmrghilhhfrhhomhepjhhurhhisehlihhnkhhovhdrnhgvthdpnhgspghrtghpthhtohepvddprhgtphhtthhopeejgeelieefseguvggssghughhsrdhgnhhurdhorhhgpdhrtghpthhtoheptggrshhouhhrihesghhmrghilhdrtghomh
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

>>> Also, I finally added support for ‘and’, ‘named’ and ‘anonymous’. I haven’t test it yet (sorry).
>> 
>> Thanks!  Does it make sense also to add predicates to define
>> whether the node names should be matched completely?
>> Then maybe add two separate predicates for strict and lax matching,
>> e.g. for the same thing as above:
>> 
>>  (sentence
>>   (or (strict ,(rx (or "declaration"
>>                        "enum_specifier"
>>                        "union_specifier")))
>>       (lax ,(rx (or "preproc"
>>                     "statement")))))
>
> Hmm, I don’t know. Seems messy to implement, and we already have
> perfectly good solution: rx with bos or eos.

Ok, will use rx with bos and eos.

I have another question: in c-ts-mode forward-sentence
was intended to stop after a semicolon.  So I tried
to modify the sentence thing to match semicolons
inside the for_statement, e.g.:

  for (i = 0; i < 2; ++i)
=>
  (for_statement for (
   condition: (assignment_expression left: (identifier) operator: = right: (number_literal))
   ;
   body: (binary_expression left: (identifier) operator: < right: (number_literal))
   ;
   (update_expression operator: ++ argument: (identifier))
   )

where semicolons are after field names "condition" and "body".

But can't find a way to specify such field names for the node "for_statement".

Shouldn't treesit-thing-settings allow specifying field names as well?
Or this is achievable only by writing a lambda?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 18 Jan 2025 08:00:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jan 18 03:00:13 2025
Received: from localhost ([127.0.0.1]:39893 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tZ3ka-0005j2-NM
	for submit <at> debbugs.gnu.org; Sat, 18 Jan 2025 03:00:13 -0500
Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]:53532)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <casouri@HIDDEN>) id 1tZ3kY-0005cd-23
 for 74963 <at> debbugs.gnu.org; Sat, 18 Jan 2025 03:00:11 -0500
Received: by mail-pl1-x633.google.com with SMTP id
 d9443c01a7336-21619108a6bso50660185ad.3
 for <74963 <at> debbugs.gnu.org>; Sat, 18 Jan 2025 00:00:10 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1737187204; x=1737792004; darn=debbugs.gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=fACIiAbdA0OmqVRJ5xf9FTIocAQV5G4NEgyTMwn53GM=;
 b=NkyR/XceXCRRBbR5ONP7pi1uduPcdaGSy7v7EE7KwmgBNdOAOO4rMHSuZDO26nFY0G
 Tw2Mz1q+DAQTBtOmsS2mAJ7azVzLqXz8hQYVwvDnNDTjanqIJoedf6hjmi5vdfhhTcEH
 eNAfQ9Wi/pkw6PTsVtyNUcxwkecGvulOTX8mKYO6qmwcr/y2P6rhsq+SMPIHVy6coLrE
 Yn/adZbtEJs7EVFilnhH3hOwXFIC3qgwhC9SbhCwQWucHAU1k+02l8DWb1haNPRmiRjk
 XyhQ3lPY6eDs162fv/sL5SXNHTYYJoejPb8wRnAni9qarRhWEHK4bRCHpOMSFEAvQ/lB
 qXUQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1737187204; x=1737792004;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=fACIiAbdA0OmqVRJ5xf9FTIocAQV5G4NEgyTMwn53GM=;
 b=uS+o87A0zqMj0pGU+DHoX/UL0pcfRniHALuEKaZOTyqvt76a4mX0AKzlSrmSxpThKy
 ZOiwdNd9QtI3fEyFjjV4hpAXdgfDwmOKUn1HPbhvbgHkes3i7d1jquS/JS8LOdVDgDZ8
 6v1iBG5yPPArRGRfll3Ks/foqZPGfab6cEx549DyyIDw2YRygRKOj57hkv9kZFRDUkOy
 y6gzRJkqNQZR8qRLG90l1Lir6Gbf50GqN8Iebxm/MBkXBiE7/qNrLCaXEfs0pf2Djvve
 HbtSybs+xdWJrqEMm34HFO7yCZem2tsXMzyN+j7ORTIoDz+8I8l5VqInSVSh2J7rLidk
 tEqA==
X-Forwarded-Encrypted: i=1;
 AJvYcCUQFT2kz0kykVGTxS1Dz4nZPH9YZLJ85ZROgeufExRwPpXE15+ScNf5xyLPALCMZyK9/GzhnA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YziiYTa1gL4O65Bu/gL8tj5YBSCS/oTY3t8TELyHyguMRyz9S6H
 /vkeH3O/2DvKYaFsHVSX0NE+gbvRTwDV0k4+AIRSES2IKJclyY3RjjFAKdgK
X-Gm-Gg: ASbGncuAX8txj7geshag7BMMiy8OgAD0JIB4GAsGKtclm6hziUg1Dq1tgUUhlUiWtA/
 5f9QitLl9muNh8evf10JfvetDhUJmFnwD0EFERfusEpJ6beaEuRFBRrZ/C/XWsiXE/abvbiA6//
 AI64EOJxqRkqSCPemJna4Nh7i2lIkChgIBkwqx7hu/pVbn31YV2EuNdo++KvS+MZfgAzPYypBkp
 xg7SQpFxoO8D/5qXKvynZhcaC+AY6RclwssUhDDx1P9D0Wjb1JbK/yFZBEWlOqbJVpJ7+nQ/zCv
 PgpX5gOyQ7FwrpKFRA==
X-Google-Smtp-Source: AGHT+IGGVpkFb1jU2sy5CvhKfGTuXIKGKWiF6INwDKJ6IO6ZAVExLbdGgbkvOlzJqsJ8S3DJdOXH/w==
X-Received: by 2002:a17:902:ebcd:b0:212:6187:6a76 with SMTP id
 d9443c01a7336-21c354016c5mr97253005ad.14.1737187203956; 
 Sat, 18 Jan 2025 00:00:03 -0800 (PST)
Received: from smtpclient.apple ([2601:646:8f81:6120:54ae:938b:8aa9:b810])
 by smtp.gmail.com with ESMTPSA id
 d9443c01a7336-21c2ce9ff57sm27156395ad.46.2025.01.18.00.00.02
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Sat, 18 Jan 2025 00:00:03 -0800 (PST)
Content-Type: text/plain;
	charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3776.700.51\))
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
From: Yuan Fu <casouri@HIDDEN>
In-Reply-To: <87seplltn6.fsf@HIDDEN>
Date: Fri, 17 Jan 2025 23:59:52 -0800
Content-Transfer-Encoding: quoted-printable
Message-Id: <E55A7CB4-0389-4E5B-B7E0-9146F27E35A3@HIDDEN>
References: <87plox4mtp.fsf@HIDDEN>
 <87zflac68t.fsf@HIDDEN> <87jzcdlxdp.fsf@HIDDEN>
 <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN> <87ldw5o7cp.fsf@HIDDEN>
 <87ed17i4ve.fsf@HIDDEN>
 <C50D9079-20CC-4D9B-969F-51FB5EB79938@HIDDEN>
 <87seplltn6.fsf@HIDDEN>
To: Juri Linkov <juri@HIDDEN>
X-Mailer: Apple Mail (2.3776.700.51)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)



> On Jan 13, 2025, at 11:52=E2=80=AFPM, Juri Linkov <juri@HIDDEN> =
wrote:
>=20
>>>   (sentence
>>>    ,(rx (or (and bos (or "declaration"
>>>                          "enum_specifier"
>>>                          "union_specifier")
>>>                  eos)
>>>             (or "preproc"
>>>                 "statement"))))
>>=20
>> Looks good. I=E2=80=99ve always used rx, it has the additional =
benefit of being macro expanded at compile time.
>>=20
>> Also, I finally added support for =E2=80=98and=E2=80=99, =E2=80=98named=
=E2=80=99 and =E2=80=98anonymous=E2=80=99. I haven=E2=80=99t test it yet =
(sorry).
>=20
> Thanks!  Does it make sense also to add predicates to define
> whether the node names should be matched completely?
> Then maybe add two separate predicates for strict and lax matching,
> e.g. for the same thing as above:
>=20
>  (sentence
>   (or (strict ,(rx (or "declaration"
>                        "enum_specifier"
>                        "union_specifier")))
>       (lax ,(rx (or "preproc"
>                     "statement")))))

Hmm, I don=E2=80=99t know. Seems messy to implement, and we already have =
perfectly good solution: rx with bos or eos.
Yuan=




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 14 Jan 2025 07:55:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jan 14 02:55:45 2025
Received: from localhost ([127.0.0.1]:53819 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tXbm5-0001su-8K
	for submit <at> debbugs.gnu.org; Tue, 14 Jan 2025 02:55:45 -0500
Received: from relay6-d.mail.gandi.net ([217.70.183.198]:57343)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <juri@HIDDEN>) id 1tXbm3-0001sa-8D
 for 74963 <at> debbugs.gnu.org; Tue, 14 Jan 2025 02:55:44 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id CDA0FC000C;
 Tue, 14 Jan 2025 07:55:35 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Yuan Fu <casouri@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <C50D9079-20CC-4D9B-969F-51FB5EB79938@HIDDEN> (Yuan Fu's
 message of "Sun, 12 Jan 2025 23:47:33 -0800")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <87zflac68t.fsf@HIDDEN> <87jzcdlxdp.fsf@HIDDEN>
 <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN> <87ldw5o7cp.fsf@HIDDEN>
 <87ed17i4ve.fsf@HIDDEN>
 <C50D9079-20CC-4D9B-969F-51FB5EB79938@HIDDEN>
Date: Tue, 14 Jan 2025 09:52:13 +0200
Message-ID: <87seplltn6.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -2.5 (--)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.5 (---)

>>    (sentence
>>     ,(rx (or (and bos (or "declaration"
>>                           "enum_specifier"
>>                           "union_specifier")
>>                   eos)
>>              (or "preproc"
>>                  "statement"))))
>
> Looks good. I’ve always used rx, it has the additional benefit of being macro expanded at compile time.
>
> Also, I finally added support for ‘and’, ‘named’ and ‘anonymous’. I haven’t test it yet (sorry).

Thanks!  Does it make sense also to add predicates to define
whether the node names should be matched completely?
Then maybe add two separate predicates for strict and lax matching,
e.g. for the same thing as above:

  (sentence
   (or (strict ,(rx (or "declaration"
                        "enum_specifier"
                        "union_specifier")))
       (lax ,(rx (or "preproc"
                     "statement")))))




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 13 Jan 2025 07:47:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jan 13 02:47:54 2025
Received: from localhost ([127.0.0.1]:50016 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tXFAv-0007z1-OV
	for submit <at> debbugs.gnu.org; Mon, 13 Jan 2025 02:47:54 -0500
Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:53549)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <casouri@HIDDEN>) id 1tXFAu-0007yp-9b
 for 74963 <at> debbugs.gnu.org; Mon, 13 Jan 2025 02:47:52 -0500
Received: by mail-pl1-x62e.google.com with SMTP id
 d9443c01a7336-21619108a6bso66282185ad.3
 for <74963 <at> debbugs.gnu.org>; Sun, 12 Jan 2025 23:47:52 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1736754466; x=1737359266; darn=debbugs.gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=M1DBbQKq2WmApNqXC76nA9b6+HpO2wBOIRGtMGmp924=;
 b=jVD0Qj0MpfLFI+k0QettaspKG56UMvdbCdZqn80x4yf9WNK6YXrtFVwhHkVdpVgeRx
 OTDWNEdEPmgm1wuY821jaSPwzrplnVzgOu7952xvUOle9scAKv3OPfPR5FxY8oVOc3lH
 +vkGZD6txwiHtRv1j0D82I9xaNMTwOSrRfU8Sitia4w7EkjSRoo8JUpC33S4R4a0/24/
 J6rqoNyVrUf1gaePlZLQNyJhY5KQARG8qG/Sspb34RP9BJKb5ni4SknGV9SOEcFEONjk
 5V59dTSf5SAk0zdN4VCkl9xzzU3h+neZc3Rva+7oLybMCzGypHEwqmGSVENabwMtd2KM
 wrog==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1736754466; x=1737359266;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=M1DBbQKq2WmApNqXC76nA9b6+HpO2wBOIRGtMGmp924=;
 b=op0YkBx3yGBtu/4xmal/PZTgH4LNsLBChG7RIILkRZtMZz2h9dq2JfHIzdCC/SYu9v
 TszsZQSafWnxvTXJHYvmCD/5RUYS9dH4UsUN9VCfrBcj0nLIrnDGi2G7NBRCeNmFT9lI
 Peqs+0zk4i/oV7LRH4qNh61cFhIX0xTGf62j/38TGBD6fjJx6p0O9ddAaEVR1GD0KX/y
 6zqVklDYwdMuArcG+FyDBAdLwScxqwdGBcGWcVR9G6vVshEbiDPb00uOLkLz+hmQUBzu
 5Q6gKAvr6+kGHf7nSToqXNHLA+x32vgOnSncSupIuONpqe95FmEUvy+PF+gzpv7/yTR2
 hKIA==
X-Forwarded-Encrypted: i=1;
 AJvYcCXNkwKpEE3N7lkiTJuH2xSpTJRP/yeh2pUE9JhKbkQzfeVoSCvZ5tKw+A1o44nldX66wEriag==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YxkKGjNPuSg2el/LpzZ17484C4W0XLRl0AuRlHeuaUuI/nG68Uz
 fwFG9abXpTnYdOVNori59HPTDtGnInTPxS+oCYP1ZWBsWKEFOiXL
X-Gm-Gg: ASbGncuLNQ6EoaI0gbgsU3x6uiwSwcvsT7JuOltr8x3Fe6Ba0x1hLF3Y/K4dFNaHAfO
 nMERHWSpIq/MacmlDj32XakpzIy3yB2mM4ahglgQ5+0rHxUTPCO2TDOpKKtKdKAznaduI5P4kPx
 tUuIu2rN2QYuobQEbVTTywUETFkW5iXZgwyuijfJuoc4n2IhC7WxqAch3uj/NjF2b83NTiSEEhY
 CJilZZTwLHVlB1cJm95/l1R4Y5gyVE0MkPM83C5lTgq86hbBpbV++cPRNEwQc+mQl2S05lTtJMe
 A977
X-Google-Smtp-Source: AGHT+IGwxhTvFrnTNFGiBNvwZC9XuYV1QpPLROwqigRGPfz8wiHHQDOE/DCKlk9NJbu70nMmUpb8hA==
X-Received: by 2002:a17:903:24e:b0:216:794f:6d7d with SMTP id
 d9443c01a7336-21a83ffc1fcmr316349635ad.48.1736754465994; 
 Sun, 12 Jan 2025 23:47:45 -0800 (PST)
Received: from smtpclient.apple ([2601:646:8f81:6120:c04e:a612:3dd1:a163])
 by smtp.gmail.com with ESMTPSA id
 d9443c01a7336-21a9f219a94sm48594295ad.129.2025.01.12.23.47.44
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Sun, 12 Jan 2025 23:47:44 -0800 (PST)
Content-Type: text/plain;
	charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3776.700.51\))
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
From: Yuan Fu <casouri@HIDDEN>
In-Reply-To: <87ed17i4ve.fsf@HIDDEN>
Date: Sun, 12 Jan 2025 23:47:33 -0800
Content-Transfer-Encoding: quoted-printable
Message-Id: <C50D9079-20CC-4D9B-969F-51FB5EB79938@HIDDEN>
References: <87plox4mtp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN> <87ldw5o7cp.fsf@HIDDEN>
 <87ed17i4ve.fsf@HIDDEN>
To: Juri Linkov <juri@HIDDEN>
X-Mailer: Apple Mail (2.3776.700.51)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)



> On Jan 12, 2025, at 11:31=E2=80=AFPM, Juri Linkov <juri@HIDDEN> =
wrote:
>=20
>> I see that all ts-modes solve this common problem each in its own way
>> (here 'list' indicates a list of strings that should match node =
names):
>>=20
>>  c-ts-mode:    (regexp-opt list 'symbols)
>>  js-ts-mode:   (concat "\\_<" (regexp-opt list t) "\\_>")
>>  java-ts-mode: (rx (or list))
>>  ruby-ts-mode: (rx bol (or list) eol)
>>=20
>> Currently there is no uniform way to handle this frequent need.
>> 'concat' like above looks too ugly, but 'regexp-opt' with the
>> 'symbols' arg produces a strange regexp for matching symbols.
>=20
> I was thinking about adding two functions treesit-regexp-strict
> and treesit-regexp-lax.  But then discovered that some things
> require specifying both strict and lax matches for the same thing.
> For example, take treesit-thing-settings from c-ts-mode:
>=20
>    (sentence
>     ,(regexp-opt '("preproc"
>                    "declaration"
>                    "specifier"
>                    "attributed_statement"
>                    "labeled_statement"
>                    "expression_statement"
>                    "if_statement"
>                    "switch_statement"
>                    "do_statement"
>                    "while_statement"
>                    "for_statement"
>                    "return_statement"
>                    "break_statement"
>                    "continue_statement"
>                    "goto_statement"
>                    "case_statement")))
>=20
> "preproc" can be lax, this is fine to match all preprocessor =
directives.
> But "declaration" should be strict and should not match =
"parameter_declaration".
> Also "specifier" should not match "attribute_specifier" and =
"storage_class_specifier",
> but only "enum_specifier" and "union_specifier" that end with the =
semicolon.
> Also no need to specify all statements separately, it should be =
sufficient
> to use lax match with "statement".
>=20
> The most expressive language to specify all these requirements is the =
rx macro,
> so let's use it in ts-modes.  Here is how the 'sentence' thing will =
look like:
>=20
>    (sentence
>     ,(rx (or (and bos (or "declaration"
>                           "enum_specifier"
>                           "union_specifier")
>                   eos)
>              (or "preproc"
>                  "statement"))))

Looks good. I=E2=80=99ve always used rx, it has the additional benefit =
of being macro expanded at compile time.

Also, I finally added support for =E2=80=98and=E2=80=99, =E2=80=98named=E2=
=80=99 and =E2=80=98anonymous=E2=80=99. I haven=E2=80=99t test it yet =
(sorry).

Yuan=




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 13 Jan 2025 07:39:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jan 13 02:39:49 2025
Received: from localhost ([127.0.0.1]:49994 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tXF37-0007b0-He
	for submit <at> debbugs.gnu.org; Mon, 13 Jan 2025 02:39:49 -0500
Received: from relay7-d.mail.gandi.net ([217.70.183.200]:43709)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <juri@HIDDEN>) id 1tXF35-0007aX-8K
 for 74963 <at> debbugs.gnu.org; Mon, 13 Jan 2025 02:39:48 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id 9A2582000D;
 Mon, 13 Jan 2025 07:39:39 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Yuan Fu <casouri@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <87ldw5o7cp.fsf@HIDDEN> (Juri Linkov's message of "Tue, 
 24 Dec 2024 09:41:58 +0200")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN> <87ldw5o7cp.fsf@HIDDEN>
Date: Mon, 13 Jan 2025 09:31:01 +0200
Message-ID: <87ed17i4ve.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

> I see that all ts-modes solve this common problem each in its own way
> (here 'list' indicates a list of strings that should match node names):
>
>   c-ts-mode:    (regexp-opt list 'symbols)
>   js-ts-mode:   (concat "\\_<" (regexp-opt list t) "\\_>")
>   java-ts-mode: (rx (or list))
>   ruby-ts-mode: (rx bol (or list) eol)
>
> Currently there is no uniform way to handle this frequent need.
> 'concat' like above looks too ugly, but 'regexp-opt' with the
> 'symbols' arg produces a strange regexp for matching symbols.

I was thinking about adding two functions treesit-regexp-strict
and treesit-regexp-lax.  But then discovered that some things
require specifying both strict and lax matches for the same thing.
For example, take treesit-thing-settings from c-ts-mode:

    (sentence
     ,(regexp-opt '("preproc"
                    "declaration"
                    "specifier"
                    "attributed_statement"
                    "labeled_statement"
                    "expression_statement"
                    "if_statement"
                    "switch_statement"
                    "do_statement"
                    "while_statement"
                    "for_statement"
                    "return_statement"
                    "break_statement"
                    "continue_statement"
                    "goto_statement"
                    "case_statement")))

"preproc" can be lax, this is fine to match all preprocessor directives.
But "declaration" should be strict and should not match "parameter_declaration".
Also "specifier" should not match "attribute_specifier" and "storage_class_specifier",
but only "enum_specifier" and "union_specifier" that end with the semicolon.
Also no need to specify all statements separately, it should be sufficient
to use lax match with "statement".

The most expressive language to specify all these requirements is the rx macro,
so let's use it in ts-modes.  Here is how the 'sentence' thing will look like:

    (sentence
     ,(rx (or (and bos (or "declaration"
                           "enum_specifier"
                           "union_specifier")
                   eos)
              (or "preproc"
                  "statement"))))




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 27 Dec 2024 07:46:26 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 27 02:46:26 2024
Received: from localhost ([127.0.0.1]:44551 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tR53B-00019S-L1
	for submit <at> debbugs.gnu.org; Fri, 27 Dec 2024 02:46:25 -0500
Received: from relay8-d.mail.gandi.net ([217.70.183.201]:50321)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <juri@HIDDEN>) id 1tR53A-00019D-GX
 for 74963 <at> debbugs.gnu.org; Fri, 27 Dec 2024 02:46:24 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id 3F52D1BF206;
 Fri, 27 Dec 2024 07:45:54 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Dmitry Gutov <dmitry@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <8dc10f82-4400-4924-bb6b-dcd98bcb598d@HIDDEN> (Dmitry Gutov's
 message of "Thu, 26 Dec 2024 03:00:38 +0200")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <87zflac68t.fsf@HIDDEN> <87jzcdlxdp.fsf@HIDDEN>
 <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN>
 <8abcb53c-1636-450d-ac0c-fdf44566ab95@HIDDEN>
 <87cyhg2nyu.fsf@HIDDEN>
 <8dc10f82-4400-4924-bb6b-dcd98bcb598d@HIDDEN>
Date: Fri, 27 Dec 2024 09:42:47 +0200
Message-ID: <87ttaptws8.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: Yuan Fu <casouri@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

>>> Given that we're already calling a predicate every time (in
>>> ruby-ts-mode), we might as well add one more check. See the patch at the
>>> end.
>> Thanks, I tried the patch.  It was broken, so needed to edit manually.
>
> Maybe something regarding whitespace at the end?

Something with whitespace, but not a big problem.

>> Also the new key 'w' doesn't work in diff buffers, need to fix it as well.
>
> The binding for 'diff-kill-ring-save'? Seems to work here, as long as the
> diff buffer is in read-only mode.

Yes, 'W' with 'diff-kill-ring-save'.  Single keys are still a problem
in visited diff files.

>>> Adding the check for "named" fixes the first two cases, but then C-M-f
>>> inside "def" jumps to after "baaz". Could be worked around with a
>>> special case, but I wonder what this difference comes from (haven't
>>> properly debugged yet).
>> I see no problems with your patch.  Everything works nicely.
>
> Hmm, I can't reproduce it either anymore.
>
> Thanks for testing, pushed to master now (unfortunately the commit message
> refers to bug#73404).

Thanks.  Maybe a helper for other ts-modes will be handy:

  (defun treesit-node-named (node)
    (treesit-node-check node 'named))

to be used like this

  (sexp ,(cons
          (treesit-match-nodes strings)
          'treesit-node-named))




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 26 Dec 2024 01:00:51 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 25 20:00:51 2024
Received: from localhost ([127.0.0.1]:39438 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQcF9-00040E-4z
	for submit <at> debbugs.gnu.org; Wed, 25 Dec 2024 20:00:51 -0500
Received: from fhigh-a8-smtp.messagingengine.com ([103.168.172.159]:48061)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <dmitry@HIDDEN>) id 1tQcF7-0003zw-3c
 for 74963 <at> debbugs.gnu.org; Wed, 25 Dec 2024 20:00:50 -0500
Received: from phl-compute-06.internal (phl-compute-06.phl.internal
 [10.202.2.46])
 by mailfhigh.phl.internal (Postfix) with ESMTP id 116351140114;
 Wed, 25 Dec 2024 20:00:43 -0500 (EST)
Received: from phl-mailfrontend-02 ([10.202.2.163])
 by phl-compute-06.internal (MEProxy); Wed, 25 Dec 2024 20:00:43 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gutov.dev; h=cc
 :cc:content-transfer-encoding:content-type:content-type:date
 :date:from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to; s=fm3; t=1735174843;
 x=1735261243; bh=V7mrbDQp69bMq9T7n6sgLE4m/WsFjKutbQ6RC5LW+DY=; b=
 hIZ2eC0tiUr6BYZ87QQNin+UHiK1hd8Xiz4iMLQXyKIH9GJm0GvYYU/fq0Gp4z+/
 rZyOsXvN1GiIr0JczXGaIZRFROLSbWLZrH5iba6bMuLXGjCbWlCjbY/XeP7id7Lz
 B1UPlHSk3Y91oE759Xq1LNlzyi7kBpx1T8M2dchCMXonw21MLSc6wTcahSs/NR2j
 UT4suR5WzsXr0Ca+1LBrbgvxs1ul71RwzhFcA4sCtMYjoWGCc9k66mjRLIlWBZOx
 6myGGPRYaGtIzz9G+S+J4t/FTTlNN7YV6BVrYA5bkab/ZbbkiKGRMwLr3/HGoXZG
 vE6pun4TZ7F6/Jbe9CIuEQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1735174843; x=
 1735261243; bh=V7mrbDQp69bMq9T7n6sgLE4m/WsFjKutbQ6RC5LW+DY=; b=Q
 CfX6OS5kgOJYihbFFYVXLYnt1RKexgZYrg7f8pte98t5jTQmlh7FJwgl2hdTRPMU
 +P8bkCTrgqupNz97O5r/EXEUsYqtBlDhujBgZt1cg2l+czBGbyGs66rT0IweGCgA
 d1TWDavm+68Hfvv/QM6qKLqN4SHfCplAdNWDzfN2V6TxNmvIVMh85NGq+FyWZJVM
 zjNUeZjgSJHSshL2pdTsdZEVtDua63U9UJdg40y66twSIrsVcs3tOaH9t5S9kWfJ
 4i/NHu75p2S7p/Fn7YUGuCJnfNzxjPgXW82wO0aDCgkekGhbjrmQ7vYmqv3taxe3
 m5JecWsmDSNVQ93FEyppw==
X-ME-Sender: <xms:uqpsZz4MEUc3UVDDyUxIPr6uPjU3WEjOYnaE1MG_hLR8XKTEJjcWcg>
 <xme:uqpsZ44GYOh58IzZlbaqPWstk3GPueTHSfv34EEZ-_uBEp7Om51g08BmC6VGFqzmF
 8K2HktKICLaJtqARs0>
X-ME-Received: <xmr:uqpsZ6e2Dl3TF3e-VD0hW8ChRWKZ2maUbexzSsCwTQUHDxSbbum33eQrLyodzXGdfSiR>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddruddujedgfedtucetufdoteggodetrfdotf
 fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu
 rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh
 htshculddquddttddmnecujfgurhepkfffgggfuffvvehfhfgjtgfgsehtjeertddtvdej
 necuhfhrohhmpeffmhhithhrhicuifhuthhovhcuoegumhhithhrhiesghhuthhovhdrug
 gvvheqnecuggftrfgrthhtvghrnhepteduleejgeehtefgheegjeekueehvdevieekueef
 tddvtdevfefhvdevgedujeehnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpe
 hmrghilhhfrhhomhepughmihhtrhihsehguhhtohhvrdguvghvpdhnsggprhgtphhtthho
 peefpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehjuhhriheslhhinhhkohhvrd
 hnvghtpdhrtghpthhtoheptggrshhouhhrihesghhmrghilhdrtghomhdprhgtphhtthho
 peejgeelieefseguvggssghughhsrdhgnhhurdhorhhg
X-ME-Proxy: <xmx:uqpsZ0I7NVCtKudn2CDZEdu4v5Oi4mDKFjwClxx2_ZORYWwRczejGQ>
 <xmx:uqpsZ3JLAxOT8nyU0F-ppAj8pzmsALYeDjpbfABuL412a2tJokGt_A>
 <xmx:uqpsZ9wnLvg_TX7T3H6FKU2lgXXXVpCp7WGkLUA_Oq5Mc99itXjRpQ>
 <xmx:uqpsZzIy5Bwbtq-B4G0QuA9PVb7AlCsihjrV0LfwrWlZC78KNF8byQ>
 <xmx:u6psZ_0sKfUPs6N3k9UlYwQGamPVsaaQykOH9lRThG9G4lL2mvWYOyHS>
Feedback-ID: i07de48aa:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed,
 25 Dec 2024 20:00:40 -0500 (EST)
Message-ID: <8dc10f82-4400-4924-bb6b-dcd98bcb598d@HIDDEN>
Date: Thu, 26 Dec 2024 03:00:38 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
To: Juri Linkov <juri@HIDDEN>
References: <87plox4mtp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN>
 <8abcb53c-1636-450d-ac0c-fdf44566ab95@HIDDEN>
 <87cyhg2nyu.fsf@HIDDEN>
Content-Language: en-US
From: Dmitry Gutov <dmitry@HIDDEN>
In-Reply-To: <87cyhg2nyu.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74963
Cc: Yuan Fu <casouri@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On 25/12/2024 09:52, Juri Linkov wrote:

>> Given that we're already calling a predicate every time (in
>> ruby-ts-mode), we might as well add one more check. See the patch at the
>> end.
> 
> Thanks, I tried the patch.  It was broken, so needed to edit manually.

Maybe something regarding whitespace at the end?

> Also the new key 'w' doesn't work in diff buffers, need to fix it as well.

The binding for 'diff-kill-ring-save'? Seems to work here, as long as 
the diff buffer is in read-only mode.

>> Adding the check for "named" fixes the first two cases, but then C-M-f
>> inside "def" jumps to after "baaz". Could be worked around with a
>> special case, but I wonder what this difference comes from (haven't
>> properly debugged yet).
> 
> I see no problems with your patch.  Everything works nicely.

Hmm, I can't reproduce it either anymore.

Thanks for testing, pushed to master now (unfortunately the commit 
message refers to bug#73404).




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 25 Dec 2024 17:50:50 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 25 12:50:50 2024
Received: from localhost ([127.0.0.1]:38728 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQVX0-0008Lc-3g
	for submit <at> debbugs.gnu.org; Wed, 25 Dec 2024 12:50:50 -0500
Received: from relay5-d.mail.gandi.net ([217.70.183.197]:48295)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <juri@HIDDEN>) id 1tQVWx-0008LH-DI
 for 74963 <at> debbugs.gnu.org; Wed, 25 Dec 2024 12:50:47 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id 7D7DA1C0004;
 Wed, 25 Dec 2024 17:50:17 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Yuan Fu <casouri@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <E14E862C-F992-4E35-BC98-84D0E4988F12@HIDDEN> (Yuan Fu's
 message of "Wed, 25 Dec 2024 01:11:32 -0800")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <87zflac68t.fsf@HIDDEN> <87jzcdlxdp.fsf@HIDDEN>
 <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <875xn9j7d6.fsf@HIDDEN>
 <49EB9C70-DB16-4846-9646-F0C89B2D28D8@HIDDEN>
 <87o7102oar.fsf@HIDDEN>
 <E14E862C-F992-4E35-BC98-84D0E4988F12@HIDDEN>
Date: Wed, 25 Dec 2024 19:39:28 +0200
Message-ID: <87msgjy8lj.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

>> Not sure if a possible flexibility is better than unintended matches.
>> 
>> When the authors of a ts-mode carefully selected a list of named nodes to match,
>> why treesit should try to match some random and unintended anonymous nodes?
>
> I don’t know and can’t prove how much the flexibility is worth, but the
> cost on complexity is real. If everywhere else uses thing predicates as-is,
> but sexp navigation auto-converts thing predicates into named predicate,
> that’s a cognitive burden and a special case that’s guaranteed to trip
> people over.
>
> OTOH, what’s the downside of wrapping the sexp predicate with (and named …),
> if you only want named nodes to match?
>
> I just think the cost outweighs the benefit, if there is any to begin with.

Actually, what I had in mind is not to enable named-only mode by default,
but only to allow the authors of ts-modes to specify this condition.
For example, if it will be possible to write

  (setq-local treesit-thing-settings
              `((typescript
                 (sexp (and named ,(regexp-opt typescript-ts-mode--sexp-nodes 'symbols))))))

this should be fine.  This is similar to how the authors of ts-modes
decide whether to restrict matches to exact names by using
"^...$" with regexp-opt.

BTW, I'm thinking about adding such simple helper:

  (defun treesit-regexp-opt (strings)
    (concat "^" (regexp-opt strings) "$"))

to use like this:

  (setq-local treesit-thing-settings
                `((typescript
                   (sexp (and named ,(treesit-regexp-opt typescript-ts-mode--sexp-nodes))))))




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 25 Dec 2024 09:12:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 25 04:12:53 2024
Received: from localhost ([127.0.0.1]:36184 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQNRk-0000Xd-E8
	for submit <at> debbugs.gnu.org; Wed, 25 Dec 2024 04:12:52 -0500
Received: from mail-pl1-f169.google.com ([209.85.214.169]:57459)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <casouri@HIDDEN>) id 1tQNRi-0000XP-JG
 for 74963 <at> debbugs.gnu.org; Wed, 25 Dec 2024 04:12:51 -0500
Received: by mail-pl1-f169.google.com with SMTP id
 d9443c01a7336-2156e078563so56556045ad.2
 for <74963 <at> debbugs.gnu.org>; Wed, 25 Dec 2024 01:12:50 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1735117904; x=1735722704; darn=debbugs.gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=h4jwJ2sDmw4FZQcttn+BInGZXfUUOC/1YECCYIp+hzE=;
 b=T+vBRfm2LffQl5gBpOJ4TO4z7YPLGxPOu6p2GELE5u8FyTJQWxXYTiLy8Lg6P3pbOV
 V3USPPwvbUbGzsSl8cuIA7/A7S0E0HFhbMW0aDi4inJhhJ6poQhqdkQYf5MOaH7Kpwqz
 aoNRw5gcmYxrqnG5bbB02h3Xb93HxYcYGwulcAQO77P4iJE0oQ13U1Mmm6fd4/6X7LVF
 HQ9N7VbNv1PAJZ6jzBYnViDdW7s2n9j7DpPoxqSah64T6lC3m1GTxqCoW5/G0dWY19Zj
 qaB7g2Xx9/FIyMsDmImWSZ9nYzYa1i+Cqf3+PFmjPfNQfhyovJNxs4eduiLK0yf6KGck
 Ru1Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1735117904; x=1735722704;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=h4jwJ2sDmw4FZQcttn+BInGZXfUUOC/1YECCYIp+hzE=;
 b=XoDGpKvkaJdQaI6xtTvKzK76qtF5fYU2OWiGTOGhjm91k70vZ+25fvzzU4duJKxdsm
 gLVYbbCHYk7MKKjnIYSgh+GY5dMii6/mY4tk28/5FwXuEOxR5xZsFn5DpImSqu+tBO62
 EhYLfwq+1b7OQ8AtWoXw1OJ3vd9pvx8pmP9dv5Uhro+abS71ROaYmGVwm/hnQOfU/Vyj
 tGFsVEYUFW7ZZLew5RJ7tb1DZHMZn3eXxHSdO7yCxkDmMs9fLFYnnLaCtPUpBju0boL6
 8U/BUv2e5ANNLGEFyLsdGqx0Lqazk3lB3HctdouFCrbdJkyHEldGg0SJAWJ6DzCus5aG
 z9bQ==
X-Gm-Message-State: AOJu0YwcOrru96fofeTyRdJ3QEonyfROk3HfufVdcmSdmchz7p9xb4yP
 cXwQ6fHN9Et4C5oZqv9cc1Iklb1FAk9ZMznXSBCt7TZRt2Hw+ATp
X-Gm-Gg: ASbGnctUIVvCtzwSWXkbiY1/0fZ/BSD39jfNgGT1BPyhLMcTHYbt7T+JBHGRnFSxT0F
 D6O2pZHh6/PdE9ft5HZ7Nm0O8v8NcwaZhvPfLa7JJG3N1EsNaFVb5JWwH4xxBcHALfJv2qvpl1f
 CcPo2X8UB1djJUdG0cl+0Qrte1XSAdySFCBd9lP5NFcHzmM2dntpecyJmxiojw+fyzOr7C8PCR8
 b9/d72oRVjf0OpsVOZpQcNrj2y4kbf5q8peZau7UbD1EVaxamWu5eiCv7OVfv4qU4WZzBuafVZg
 s3I=
X-Google-Smtp-Source: AGHT+IFkNUou7Rk5l0Rp1Swb950lByulSSgijnFiBvXw9cV9OuazA2OxxmQtUgJTVOK6fB2kiddSAw==
X-Received: by 2002:a05:6a21:3a85:b0:1e1:b8bf:8e80 with SMTP id
 adf61e73a8af0-1e5e083f145mr29568455637.41.1735117904645; 
 Wed, 25 Dec 2024 01:11:44 -0800 (PST)
Received: from smtpclient.apple ([2601:646:8f81:6120:e179:285e:283:33ae])
 by smtp.gmail.com with ESMTPSA id
 d2e1a72fcca58-72aad8dbab4sm10872713b3a.94.2024.12.25.01.11.43
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 25 Dec 2024 01:11:43 -0800 (PST)
Content-Type: text/plain;
	charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3776.700.51\))
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
From: Yuan Fu <casouri@HIDDEN>
In-Reply-To: <87o7102oar.fsf@HIDDEN>
Date: Wed, 25 Dec 2024 01:11:32 -0800
Content-Transfer-Encoding: quoted-printable
Message-Id: <E14E862C-F992-4E35-BC98-84D0E4988F12@HIDDEN>
References: <87plox4mtp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <875xn9j7d6.fsf@HIDDEN>
 <49EB9C70-DB16-4846-9646-F0C89B2D28D8@HIDDEN>
 <87o7102oar.fsf@HIDDEN>
To: Juri Linkov <juri@HIDDEN>
X-Mailer: Apple Mail (2.3776.700.51)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)



> On Dec 24, 2024, at 11:49=E2=80=AFPM, Juri Linkov <juri@HIDDEN> =
wrote:
>=20
>>> This mismatched "string" in TypeScript is even more
>>> unexpected than "unless" in Ruby.
>>>=20
>>> So probably we need a way to mark all used nodes as named
>>> to avoid such unexpected matches.  Maybe matching anonymous nodes
>>> should be opt-in, and by default match only named nodes.
>>=20
>> IMHO this is just an unfortunate bug that needs to be fixed. I agree =
that
>> this type of bug are hard to avoid, which is a bad thing, but that =
doesn=E2=80=99t
>> mean we should try to alleviate it at any cost. Making predicates =
named by
>> default just adds complexity and inflexibility for not much benefit.
>=20
> Not sure if a possible flexibility is better than unintended matches.
>=20
> When the authors of a ts-mode carefully selected a list of named nodes =
to match,
> why treesit should try to match some random and unintended anonymous =
nodes?

I don=E2=80=99t know and can=E2=80=99t prove how much the flexibility is =
worth, but the cost on complexity is real. If everywhere else uses thing =
predicates as-is, but sexp navigation auto-converts thing predicates =
into named predicate, that=E2=80=99s a cognitive burden and a special =
case that=E2=80=99s guaranteed to trip people over.

OTOH, what=E2=80=99s the downside of wrapping the sexp predicate with =
(and named =E2=80=A6), if you only want named nodes to match?

I just think the cost outweighs the benefit, if there is any to begin =
with.

Yuan=




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 25 Dec 2024 08:11:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 25 03:11:22 2024
Received: from localhost ([127.0.0.1]:36057 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQMUE-0005rg-G3
	for submit <at> debbugs.gnu.org; Wed, 25 Dec 2024 03:11:22 -0500
Received: from relay8-d.mail.gandi.net ([217.70.183.201]:51827)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <juri@HIDDEN>) id 1tQMU9-0005r4-68
 for 74963 <at> debbugs.gnu.org; Wed, 25 Dec 2024 03:11:17 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id E56D71BF204;
 Wed, 25 Dec 2024 08:10:48 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Dmitry Gutov <dmitry@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <8abcb53c-1636-450d-ac0c-fdf44566ab95@HIDDEN> (Dmitry Gutov's
 message of "Wed, 25 Dec 2024 05:25:24 +0200")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN>
 <8abcb53c-1636-450d-ac0c-fdf44566ab95@HIDDEN>
Date: Wed, 25 Dec 2024 09:52:33 +0200
Message-ID: <87cyhg2nyu.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: Yuan Fu <casouri@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

>> While addition of '(and named "unless")' would be appreciated,
>> I see that currently it's possible to do this by proving a predicate
>> like there is 'ruby-ts--sexp-p' in
>> 
>>    (setq-local treesit-thing-settings
>>                `((ruby
>>                   (sexp ,(cons (rx
>>                                 bol
>>                                 (or
>>                                  "class"
>>                                  ...
>>                                  )
>>                                 eol)
>>                                #'ruby-ts--sexp-p))
>> 
>> Then 'ruby-ts--sexp-p' could check for the named node "unless" as well.
>> 
>> But it seems such solution is less efficient than adding '(and named "unless")'.
>
> Given that we're already calling a predicate every time (in 
> ruby-ts-mode), we might as well add one more check. See the patch at the 
> end.

Thanks, I tried the patch.  It was broken, so needed to edit manually.
Also the new key 'w' doesn't work in diff buffers, need to fix it as well.

> Speaking of tricky examples though, here's a definition:
>
>    module Bar
>      class Foo
>        def baz
>        end
>      end
>    end
>
> If you move point inside the keyword "module" or "class", C-M-f wouldn't 
> move forward either as of the latest master. No such problem with "def".
>
> Adding the check for "named" fixes the first two cases, but then C-M-f 
> inside "def" jumps to after "baaz". Could be worked around with a 
> special case, but I wonder what this difference comes from (haven't 
> properly debugged yet).

I see no problems with your patch.  Everything works nicely.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 25 Dec 2024 08:10:57 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 25 03:10:57 2024
Received: from localhost ([127.0.0.1]:36046 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQMTp-0005pr-DB
	for submit <at> debbugs.gnu.org; Wed, 25 Dec 2024 03:10:57 -0500
Received: from relay5-d.mail.gandi.net ([217.70.183.197]:41113)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <juri@HIDDEN>) id 1tQMTl-0005pT-2k
 for 74963 <at> debbugs.gnu.org; Wed, 25 Dec 2024 03:10:53 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id D369A1C0003;
 Wed, 25 Dec 2024 08:10:46 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Yuan Fu <casouri@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <49EB9C70-DB16-4846-9646-F0C89B2D28D8@HIDDEN> (Yuan Fu's
 message of "Tue, 24 Dec 2024 13:03:45 -0800")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <875xn9j7d6.fsf@HIDDEN>
 <49EB9C70-DB16-4846-9646-F0C89B2D28D8@HIDDEN>
Date: Wed, 25 Dec 2024 09:49:24 +0200
Message-ID: <87o7102oar.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

>> This mismatched "string" in TypeScript is even more
>> unexpected than "unless" in Ruby.
>> 
>> So probably we need a way to mark all used nodes as named
>> to avoid such unexpected matches.  Maybe matching anonymous nodes
>> should be opt-in, and by default match only named nodes.
>
> IMHO this is just an unfortunate bug that needs to be fixed. I agree that
> this type of bug are hard to avoid, which is a bad thing, but that doesn’t
> mean we should try to alleviate it at any cost. Making predicates named by
> default just adds complexity and inflexibility for not much benefit.

Not sure if a possible flexibility is better than unintended matches.

When the authors of a ts-mode carefully selected a list of named nodes to match,
why treesit should try to match some random and unintended anonymous nodes?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 25 Dec 2024 03:25:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Dec 24 22:25:39 2024
Received: from localhost ([127.0.0.1]:35671 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQI1j-0000Dm-7Q
	for submit <at> debbugs.gnu.org; Tue, 24 Dec 2024 22:25:39 -0500
Received: from fhigh-a3-smtp.messagingengine.com ([103.168.172.154]:36433)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <dmitry@HIDDEN>) id 1tQI1e-0000DU-O0
 for 74963 <at> debbugs.gnu.org; Tue, 24 Dec 2024 22:25:38 -0500
Received: from phl-compute-11.internal (phl-compute-11.phl.internal
 [10.202.2.51])
 by mailfhigh.phl.internal (Postfix) with ESMTP id C5596114016F;
 Tue, 24 Dec 2024 22:25:28 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-11.internal (MEProxy); Tue, 24 Dec 2024 22:25:28 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gutov.dev; h=cc
 :cc:content-transfer-encoding:content-type:content-type:date
 :date:from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to; s=fm3; t=1735097128;
 x=1735183528; bh=RDMedM13SKUcehccntHhdm3JzKzNwyaWLSZZeWPYGTk=; b=
 K0w/9sTZnoItgN2O4sNnX4ReC8iX8xQ4PnxQgsuY7aOUW7utri81zlmDSJiRCHPo
 EusuzlPI+V1TLaFycpTrL4dg2DtdxVNL6XAd6YgiR2bJ1SM57qPFOPFdeQX8jH1q
 +JiZwl3WZ7hzIrJncrzk9sxG8op2LRXdFp4RLyfzOPI4EXFXYrrZYce3x6W1lcAA
 NWwGR8NbB+NuLnIlEqDrHV5aYTuTjkjUGryO3B+wBcNaNCmPtXwokQHbXYXLbhew
 tzJWSr8o0YFikIipf8xVk9XKxuv29RznUCYC+UsR7z4kboqvm5QnVfBmlvl9BVC5
 R8e1UULlXvaDjh3jR4a/eg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1735097128; x=
 1735183528; bh=RDMedM13SKUcehccntHhdm3JzKzNwyaWLSZZeWPYGTk=; b=m
 C3Xui5WYgmkQ02Bn4e6V3zO130CjFfbwDZbCCNahtrGDS8ZAiiI3Hu1sGyQRiKxZ
 Ar23OEFjZcKhzSiIg3Mw5MfMOzHhs+IApeC70HVv1wcwSOCiWNNUdlhAJQv2qd6f
 RJ6fHwBBBG1PBcm1NZ10X0bDefmUaUiEIGCFHB7rlU8vNo3MIrHDVLTd5yNhcIfW
 TghH3RQm1CjkAISl2a1/HdOZktPktSN/sPIzEGwvgadHXSCSzJbNkNsuMriNJng8
 3Nu3HGeXV+yLflCjomseqQrPth7zVjH2pNlvlzN7NHLwkrF7tT4gTrY4LsCCwlKo
 5G+PgjQU0zY1VVWHnfPnw==
X-ME-Sender: <xms:KHtrZ5AIeRmRcSffHDfK0ya3bQrH-nW6AIU5oZz6RJKnxnYoGu0UTQ>
 <xme:KHtrZ3gh8KL4M6emvkJxN0TUNRXr08VMj4CyDqlB2bMLw3TsCbDVw77-duAN1VaWZ
 O50nGvqMtjBy-FIXiI>
X-ME-Received: <xmr:KHtrZ0loUABkon9VU8bQ_i__QrDppubyn9KvIErzl3i3Q2JJUM32CsxfVqHyEBGyCp10>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudduhedgheejucetufdoteggodetrfdotf
 fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu
 rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh
 htshculddquddttddmnecujfgurhepkfffgggfuffvvehfhfgjtgfgsehtjeertddtvdej
 necuhfhrohhmpeffmhhithhrhicuifhuthhovhcuoegumhhithhrhiesghhuthhovhdrug
 gvvheqnecuggftrfgrthhtvghrnhepteduleejgeehtefgheegjeekueehvdevieekueef
 tddvtdevfefhvdevgedujeehnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpe
 hmrghilhhfrhhomhepughmihhtrhihsehguhhtohhvrdguvghvpdhnsggprhgtphhtthho
 peefpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehjuhhriheslhhinhhkohhvrd
 hnvghtpdhrtghpthhtoheptggrshhouhhrihesghhmrghilhdrtghomhdprhgtphhtthho
 peejgeelieefseguvggssghughhsrdhgnhhurdhorhhg
X-ME-Proxy: <xmx:KHtrZzxpHRbjvHa-Krb3OyRYBo_JGlyeiCQab4qBN9ScwFgfKfLMYg>
 <xmx:KHtrZ-R6pR4HpbQu1Ov5w1C4tOwuFkgFkZoHKQiIVzGBzrolbnZJaw>
 <xmx:KHtrZ2bH9Ds_3iPsd35dlYcvih9BDKo-wrxhoy8GD_2RAH2XKPigjA>
 <xmx:KHtrZ_QbBCv4LToISVHNeU8sp_7XgU6BZONSgeDnCFDoiUkvzC3lZw>
 <xmx:KHtrZ8dzzNNLlQplyEf_GQsVaqgI5k6QABD8up4-Pl4Eh_yzYR5q1ijP>
Feedback-ID: i07de48aa:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue,
 24 Dec 2024 22:25:27 -0500 (EST)
Message-ID: <8abcb53c-1636-450d-ac0c-fdf44566ab95@HIDDEN>
Date: Wed, 25 Dec 2024 05:25:24 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
To: Juri Linkov <juri@HIDDEN>, Yuan Fu <casouri@HIDDEN>
References: <87plox4mtp.fsf@HIDDEN>
 <ACA8B25C-87C2-4BD8-BDE8-7810A0817A75@HIDDEN>
 <86ikueiekp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN>
Content-Language: en-US
From: Dmitry Gutov <dmitry@HIDDEN>
In-Reply-To: <87ttatpnii.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74963
Cc: 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi Juri,

On 24/12/2024 09:17, Juri Linkov wrote:
> While addition of '(and named "unless")' would be appreciated,
> I see that currently it's possible to do this by proving a predicate
> like there is 'ruby-ts--sexp-p' in
> 
>    (setq-local treesit-thing-settings
>                `((ruby
>                   (sexp ,(cons (rx
>                                 bol
>                                 (or
>                                  "class"
>                                  ...
>                                  )
>                                 eol)
>                                #'ruby-ts--sexp-p))
> 
> Then 'ruby-ts--sexp-p' could check for the named node "unless" as well.
> 
> But it seems such solution is less efficient than adding '(and named "unless")'.

Given that we're already calling a predicate every time (in 
ruby-ts-mode), we might as well add one more check. See the patch at the 
end.

Speaking of tricky examples though, here's a definition:

   module Bar
     class Foo
       def baz
       end
     end
   end

If you move point inside the keyword "module" or "class", C-M-f wouldn't 
move forward either as of the latest master. No such problem with "def".

Adding the check for "named" fixes the first two cases, but then C-M-f 
inside "def" jumps to after "baaz". Could be worked around with a 
special case, but I wonder what this difference comes from (haven't 
properly debugged yet).

diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el
index 4ef0cb18eae..4b15c6cbf27 100644
--- a/lisp/progmodes/ruby-ts-mode.el
+++ b/lisp/progmodes/ruby-ts-mode.el
@@ -1120,6 +1120,10 @@ ruby-ts--sexp-p
        (equal (treesit-node-type (treesit-node-child node 0))
               "(")))

+(defun ruby-ts--sexp-list-p (node)
+  (when (treesit-node-check node 'named)
+    (ruby-ts--sexp-p node)))
+
  (defvar-keymap ruby-ts-mode-map
    :doc "Keymap used in Ruby mode"
    :parent prog-mode-map
@@ -1235,7 +1239,7 @@ ruby-ts-mode
                             "array"
                             "hash")
                            eol)
-                         #'ruby-ts--sexp-p))
+                         #'ruby-ts--sexp-list-p))
                   (text ,(lambda (node)
                            (or (member (treesit-node-type node)
                                        '("comment" "string_content" 
"heredoc_content"))





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 24 Dec 2024 21:04:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Dec 24 16:04:59 2024
Received: from localhost ([127.0.0.1]:34832 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQC5L-00072D-Ci
	for submit <at> debbugs.gnu.org; Tue, 24 Dec 2024 16:04:59 -0500
Received: from mail-pl1-f172.google.com ([209.85.214.172]:57605)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <casouri@HIDDEN>) id 1tQC5J-000725-D8
 for 74963 <at> debbugs.gnu.org; Tue, 24 Dec 2024 16:04:58 -0500
Received: by mail-pl1-f172.google.com with SMTP id
 d9443c01a7336-21628b3fe7dso54169385ad.3
 for <74963 <at> debbugs.gnu.org>; Tue, 24 Dec 2024 13:04:57 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1735074237; x=1735679037; darn=debbugs.gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=pw+CT7yyoTg/NEj1lCxzBu99hJh9zssiDact1hlttTQ=;
 b=hZvo+0swoQG0fl5k9DLE+pc52jVqO+C5kka7O6WojDz+2/K1Lk09dIqMwlKbtys16o
 m+2mpAynsuU/lUvMuIvszVKoVin4l+GKFWPyBepglwXHuni6xnJT28F9WHYymohUaWaB
 3bX+qlUEy5AyzhD6Fz8Pe0mPZ3E6HzdK2dVC6yXQThKBz9UVxBQoNbdK3ze3fUaGpdqD
 Ce+/dUIMGGKmuMm4kkxVqm3RgIcCDkWAsx0Zm18l3utn8otT4fsD8XAf7fBRbShrdFQM
 0dG0gCdgDTB/wBwRbSPZ9iSMhYrHHfN7cL1VaAjAt/nBBYeGQxqjeycK3hVzdvhC530z
 bRjg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1735074237; x=1735679037;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=pw+CT7yyoTg/NEj1lCxzBu99hJh9zssiDact1hlttTQ=;
 b=jArNPFXUrtBeRrMoSGjvVSIwcjKgWZx69o2V2o5eaM1nf7Nip1dwLKIRUq+Z87/I29
 rxwynxRvRuJXJdhykiNggycz11gYucSnmWVUS6xF/Bnzzu5u4AIzPI07lY6IbOYPxHw9
 4vgnSV6xe9QB46Is6SwWpG4sLcZlCBO9/6P3iHdmFUyCVLbC808jFeuRnEhlkuxLfIMP
 qVxJTWR3safDSH3slcM5wPvgsFVcgpZHlkzP8SzwzJRr18rX3JYZLSIPGbjrZlfK+EFF
 PlKUwxjA82dgxMKJyF0p+mtuMrhoOymffZuDvmbi4/1d8f2/8Tm5Ovrum3FkirOiZG7k
 4xnQ==
X-Gm-Message-State: AOJu0YxfJReTjH/IhPldgtNoRrSoeOK2VDce3/K3gs8/xqrboKyU3vzh
 dRwdHC/zODyTZqU2CFqNDjDvPzX4TbLIqflR/zhE8jap/ELr+RhxKsCGmQ==
X-Gm-Gg: ASbGnctao82MF+gZDm35zEvcW+rS67ASUB/wJ5DoGBSesFSG4i8GV6DRmsL3kpepzzj
 drelg+MeM5vd3omK5gq/5TnsxOmusnhZj+v9Ksa+WYsTF3kO1uCnl9m8bW8mCDAdDWgB2bRbbZF
 8jdLDXD8RwsPZh7lt6VrMDFYU+pRBezs/o5qdyVV3JxLp1HGnXWEYM2F26f0518v+Ori/G+I2Gi
 USY9Dt/Awa0e1r0KupUBQRJPwxv084w/Amx+IrT1AWA8/MVJOmecWvfGbMA/1BHHsK8PyK6nm6T
 KYRg
X-Google-Smtp-Source: AGHT+IEXRVl1/c6rtgmRhnjND/1xr3KQcni+1fbShz26POjem7KxVKqm7XFlS95V9feZbjI+iyhEQg==
X-Received: by 2002:a05:6a20:9144:b0:1e0:d1db:4d8a with SMTP id
 adf61e73a8af0-1e5e047801cmr28967664637.10.1735074236792; 
 Tue, 24 Dec 2024 13:03:56 -0800 (PST)
Received: from smtpclient.apple ([2601:646:8f81:6120:1d98:6810:9846:b152])
 by smtp.gmail.com with ESMTPSA id
 d2e1a72fcca58-72aad84ee4csm10069982b3a.82.2024.12.24.13.03.55
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Tue, 24 Dec 2024 13:03:56 -0800 (PST)
Content-Type: text/plain;
	charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3776.700.51\))
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
From: Yuan Fu <casouri@HIDDEN>
In-Reply-To: <875xn9j7d6.fsf@HIDDEN>
Date: Tue, 24 Dec 2024 13:03:45 -0800
Content-Transfer-Encoding: quoted-printable
Message-Id: <49EB9C70-DB16-4846-9646-F0C89B2D28D8@HIDDEN>
References: <87plox4mtp.fsf@HIDDEN>
 <ACA8B25C-87C2-4BD8-BDE8-7810A0817A75@HIDDEN>
 <86ikueiekp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <875xn9j7d6.fsf@HIDDEN>
To: Juri Linkov <juri@HIDDEN>
X-Mailer: Apple Mail (2.3776.700.51)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)



> On Dec 24, 2024, at 9:52=E2=80=AFAM, Juri Linkov <juri@HIDDEN> =
wrote:
>=20
>> I=E2=80=99ll go with the (and named =E2=80=9Cunless=E2=80=9D) route =
because after thinking
>> about it more, =E2=80=9C(unless)=E2=80=9D will be hard to work with =
because the string
>> predicate is actually a regexp.
>=20
> Is it possible to mark all node names specified in =
treesit-thing-settings
> as named?
>=20
> I just discovered a new problem:
>=20
> 1. With typescript-ts-mode on the following snippet:
>=20
> type NodeInfo =3D
>  | (BaseNode & {
>      subtypes: BaseNode[];
>    })
>  | (BaseNode & {
>      fields: { [name: string]: ChildNode };
>      children: ChildNode[];
>    });
>=20
> You can move point inside "string" and type C-M-f or C-M-b.
> But point doesn't move.
>=20
> This is because treesit-thing-settings defines a named node "string".
> But anonymous node has the same name "string":
>=20
>           (index_signature [ name: (identifier) :
>            index_type: (predefined_type string)
>=20
> and (treesit-node-at (point)) returns
> #<treesit-node "string" in 111-117>
>=20
> This mismatched "string" in TypeScript is even more
> unexpected than "unless" in Ruby.
>=20
> So probably we need a way to mark all used nodes as named
> to avoid such unexpected matches.  Maybe matching anonymous nodes
> should be opt-in, and by default match only named nodes.

IMHO this is just an unfortunate bug that needs to be fixed. I agree =
that this type of bug are hard to avoid, which is a bad thing, but that =
doesn=E2=80=99t mean we should try to  alleviate it at any cost. Making =
predicates named by default just adds complexity and inflexibility for =
not much benefit.

Yuan=




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 24 Dec 2024 17:54:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Dec 24 12:54:58 2024
Received: from localhost ([127.0.0.1]:34137 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQ97R-0005mS-W9
	for submit <at> debbugs.gnu.org; Tue, 24 Dec 2024 12:54:58 -0500
Received: from relay6-d.mail.gandi.net ([217.70.183.198]:38947)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <juri@HIDDEN>) id 1tQ97P-0005m3-5v
 for 74963 <at> debbugs.gnu.org; Tue, 24 Dec 2024 12:54:56 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id 3C5C8C0003;
 Tue, 24 Dec 2024 17:54:47 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Yuan Fu <casouri@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN> (Yuan Fu's
 message of "Mon, 23 Dec 2024 19:02:28 -0800")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <ACA8B25C-87C2-4BD8-BDE8-7810A0817A75@HIDDEN>
 <86ikueiekp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
Date: Tue, 24 Dec 2024 19:52:53 +0200
Message-ID: <875xn9j7d6.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

> I’ll go with the (and named “unless”) route because after thinking
> about it more, “(unless)” will be hard to work with because the string
> predicate is actually a regexp.

Is it possible to mark all node names specified in treesit-thing-settings
as named?

I just discovered a new problem:

1. With typescript-ts-mode on the following snippet:

type NodeInfo =
  | (BaseNode & {
      subtypes: BaseNode[];
    })
  | (BaseNode & {
      fields: { [name: string]: ChildNode };
      children: ChildNode[];
    });

You can move point inside "string" and type C-M-f or C-M-b.
But point doesn't move.

This is because treesit-thing-settings defines a named node "string".
But anonymous node has the same name "string":

           (index_signature [ name: (identifier) :
            index_type: (predefined_type string)

and (treesit-node-at (point)) returns
#<treesit-node "string" in 111-117>

This mismatched "string" in TypeScript is even more
unexpected than "unless" in Ruby.

So probably we need a way to mark all used nodes as named
to avoid such unexpected matches.  Maybe matching anonymous nodes
should be opt-in, and by default match only named nodes.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 24 Dec 2024 07:43:43 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Dec 24 02:43:43 2024
Received: from localhost ([127.0.0.1]:59195 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tPzZv-0008A4-42
	for submit <at> debbugs.gnu.org; Tue, 24 Dec 2024 02:43:43 -0500
Received: from relay1-d.mail.gandi.net ([217.70.183.193]:40395)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <juri@HIDDEN>) id 1tPzZs-00089d-K1
 for 74963 <at> debbugs.gnu.org; Tue, 24 Dec 2024 02:43:41 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id 41414240005;
 Tue, 24 Dec 2024 07:43:29 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Yuan Fu <casouri@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <87ttatpnii.fsf@HIDDEN> (Juri Linkov's message of "Tue, 
 24 Dec 2024 09:17:33 +0200")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <86ikueiekp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
 <87ttatpnii.fsf@HIDDEN>
Date: Tue, 24 Dec 2024 09:41:58 +0200
Message-ID: <87ldw5o7cp.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

>   (setq-local treesit-thing-settings
>               `((ruby
>                  (sexp ,(cons (rx
>                                bol
>                                (or
>                                 "class"
>                                 ...
>                                 )
>                                eol)
>                               #'ruby-ts--sexp-p))

BTW, I just fixed a bug in typescript-ts-mode
where "string_fragment" was mismatched by "string",
because its regexp-opt matched node names too widely,
so needed to enclose in regexp anchors.

I see that all ts-modes solve this common problem each in its own way
(here 'list' indicates a list of strings that should match node names):

  c-ts-mode:    (regexp-opt list 'symbols)
  js-ts-mode:   (concat "\\_<" (regexp-opt list t) "\\_>")
  java-ts-mode: (rx (or list))
  ruby-ts-mode: (rx bol (or list) eol)

Currently there is no uniform way to handle this frequent need.
'concat' like above looks too ugly, but 'regexp-opt' with the
'symbols' arg produces a strange regexp for matching symbols.

Maybe better would be create a new argument for 'regexp-opt', e.g.:

  (regexp-opt list 'complete)

that will expand to:

  (concat "^" list "$")




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 24 Dec 2024 07:18:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Dec 24 02:18:20 2024
Received: from localhost ([127.0.0.1]:59155 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tPzBM-0006xt-3n
	for submit <at> debbugs.gnu.org; Tue, 24 Dec 2024 02:18:20 -0500
Received: from relay5-d.mail.gandi.net ([217.70.183.197]:37647)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <juri@HIDDEN>) id 1tPzBK-0006xV-DO
 for 74963 <at> debbugs.gnu.org; Tue, 24 Dec 2024 02:18:19 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id 198A41C0004;
 Tue, 24 Dec 2024 07:17:50 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Yuan Fu <casouri@HIDDEN>
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
In-Reply-To: <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN> (Yuan Fu's
 message of "Mon, 23 Dec 2024 19:02:28 -0800")
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <ACA8B25C-87C2-4BD8-BDE8-7810A0817A75@HIDDEN>
 <86ikueiekp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
 <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
Date: Tue, 24 Dec 2024 09:17:33 +0200
Message-ID: <87ttatpnii.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

>>> A better solution IMO is to add some way to distinguish between named and
>>> anonymous nodes. I can think of two ways, either add “and” and
>>> “named/anonymous” predicate, so (and named “unless”) only matches the named
>>> “unless” node; or we add a special syntax such that “(unless)” only matches
>>> named nodes, and “\”unless\”” only matches anonymous nodes.
>> 
>> Either predicate or a special syntax is welcome.
>> 
>> This would be more handy than writing a lambda with implicit calls
>> of treesit-node-check.
>
> I’ll go with the (and named “unless”) route because after thinking
> about it more, “(unless)” will be hard to work with because the string
> predicate is actually a regexp.

Thanks.  While addition of '(and named "unless")' would be appreciated,
I see that currently it's possible to do this by proving a predicate
like there is 'ruby-ts--sexp-p' in

  (setq-local treesit-thing-settings
              `((ruby
                 (sexp ,(cons (rx
                               bol
                               (or
                                "class"
                                ...
                                )
                               eol)
                              #'ruby-ts--sexp-p))

Then 'ruby-ts--sexp-p' could check for the named node "unless" as well.

But it seems such solution is less efficient than adding '(and named "unless")'.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at 74963 <at> debbugs.gnu.org:


Received: (at 74963) by debbugs.gnu.org; 24 Dec 2024 03:03:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Dec 23 22:03:45 2024
Received: from localhost ([127.0.0.1]:58816 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tPvCy-0003QM-Kn
	for submit <at> debbugs.gnu.org; Mon, 23 Dec 2024 22:03:45 -0500
Received: from mail-pl1-f172.google.com ([209.85.214.172]:44395)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <casouri@HIDDEN>) id 1tPvCw-0003QB-Cx
 for 74963 <at> debbugs.gnu.org; Mon, 23 Dec 2024 22:03:43 -0500
Received: by mail-pl1-f172.google.com with SMTP id
 d9443c01a7336-2164b662090so41361875ad.1
 for <74963 <at> debbugs.gnu.org>; Mon, 23 Dec 2024 19:03:42 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1735009362; x=1735614162; darn=debbugs.gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=wYDaIglBLzpyky0WSJcJC5BpoMhaHwuwidy490i9sVg=;
 b=N7dgwjO1DkA7nLGEOsLGA3aMoLvJqSd3nNMhDTzQMAvz4wg9GfuCsdiyGC1h+GOkOE
 kOHrPcb2z162x5JtX0ovlLXLbL2qMAd6U8u7jtunltt6kNdU2xHJYUc3D+DJoVzwnP/k
 IyfHOPr3ufMQ0B1DQhG1TdTn4kD50wI8GTcjhjF5BbkKFNOpOWTl6tMKaskknjZvQelB
 ZIQWivvGkKEF7v4dguMWJXc5mpLG3J1WKTHZ9GTW90pqLV58Ad931bYXfU35zOjlKZYf
 nnENSfNzgWK1p0MQz0qE9GRTyOQ6KEPP2VEqlclE5mLxjTPfpYlRjdGImEbvnvY1TziN
 bi5Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1735009362; x=1735614162;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=wYDaIglBLzpyky0WSJcJC5BpoMhaHwuwidy490i9sVg=;
 b=boneZFEgYwoUDvSdktRX3N+y9eaJ9EaPF3zEORc0UWVE89N3Gio6TYLJsCJSheyLWi
 BHM04VndLZYrjXQa+Gy0xd3lyoXRfUV1LKT0VNl4DKgISQNIAeZJ4/y/64Is+/AEQC/S
 4+5bhC5UfHzMPtiVwCl+DDeJ9guVO58tn046GQqHvrYv8Kb03Y9t7XecvYG8SwXPNaV4
 m0nzkUmFUV2FuASSQbf8f3JIEyfaplGpq84UTJtt9FayUmalBXTd4Wt9xA2l+cHMkgyq
 LM0Cu8tA3QjoMCkRRJ2FnRaLcOLFuzTuRAgKBzTovF7kcc4WwE1HuhNYTniFbe+HkV6B
 j81A==
X-Gm-Message-State: AOJu0YzHsBSs73rO3aiSZHo+mvP+3woRAJe3oPn4dpXl3Qpo+dnI7cvm
 L0AnjMq7bKPoUS3gHc20zRopPuzZ3GLowuta1cl3kh50y9oJyAjl
X-Gm-Gg: ASbGncu6cJADL4yawyxer3AY2fxDFRB1mzUUcrA9gbUgpXEfQxnaTamqEBnP1Q2CVzw
 I3UcFCjnJQhUlrfVa+fXijroshMrjYpIO3wZXvLwZV2WBKzVmnrewvuTu9KA3Gxpl3iOLhzi3ME
 9RAXUI/KKBXNy3sBMPn4B5NCG8+uNHOinQ7HT06gE8nHiGK21ADlQf3OGB7Qk2FPgKdv2+Dkskx
 /7rzmfQcm+kDkCmgCKi4HmREmTEUuyCrSU6w4A66OVCIV3n81uDJaedh8s+QhbK0LfrogZzto1B
 1ysw
X-Google-Smtp-Source: AGHT+IFDZd2wC1jpBMpmnvzTO5jmMoks73Oh2oCO23bJ8BqHKvLzR3XJPyUn1+A3S9wY6YtbnU5vMg==
X-Received: by 2002:a17:903:32c2:b0:215:7b06:90ca with SMTP id
 d9443c01a7336-219e6ea248emr189077125ad.17.1735009360631; 
 Mon, 23 Dec 2024 19:02:40 -0800 (PST)
Received: from smtpclient.apple ([2601:646:8f81:6120:1d98:6810:9846:b152])
 by smtp.gmail.com with ESMTPSA id
 d9443c01a7336-219dc9f625csm78441365ad.208.2024.12.23.19.02.39
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 23 Dec 2024 19:02:40 -0800 (PST)
Content-Type: text/plain;
	charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3776.700.51\))
Subject: Re: bug#74963: Ambiguous treesit named and anonymous nodes in
 ruby-ts-mode
From: Yuan Fu <casouri@HIDDEN>
In-Reply-To: <87ttb0rwni.fsf_-_@HIDDEN>
Date: Mon, 23 Dec 2024 19:02:28 -0800
Content-Transfer-Encoding: quoted-printable
Message-Id: <4DFCFBC8-A353-48F2-8257-D6CFB155A030@HIDDEN>
References: <87plox4mtp.fsf@HIDDEN>
 <877cay1lqt.fsf@HIDDEN> <86frpma06f.fsf@HIDDEN>
 <ACA8B25C-87C2-4BD8-BDE8-7810A0817A75@HIDDEN>
 <86ikueiekp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
 <87ttb0rwni.fsf_-_@HIDDEN>
To: Juri Linkov <juri@HIDDEN>
X-Mailer: Apple Mail (2.3776.700.51)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74963
Cc: Dmitry Gutov <dmitry@HIDDEN>, 74963 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)



> On Dec 18, 2024, at 11:18=E2=80=AFPM, Juri Linkov <juri@HIDDEN> =
wrote:
>=20
> [This is a separate bug report from bug#73404]
>=20
>>> While testing treesit-forward-sexp-list, I discovered that
>>> thing-navigation functions are not restricted to named nodes.
>>>=20
>>> I wonder if there a reason to find anonymous nodes as things?
>>=20
>> We should rather ask is there any reason to not find anonymous nodes
>> as things? Even ruby-ts-mode defines a bunch of anonymous nodes as
>> sexp, no? In any case, excluding anonymous nodes from things =
doesn=E2=80=99t
>> sound right.
>=20
> Indeed, there are many anonymous nodes used in ruby-ts-mode.
>=20
>>> The problem was found with the node "unless" in Ruby:
>>>=20
>>> unless cond
>>>   a +=3D 1
>>> else
>>>   b -=3D 1
>>> end
>>>=20
>>> Here the named node 'unless' has exactly the same name
>>> as the anonymous node with the text "unless":
>>>=20
>>> (unless "unless" condition: (identifier)
>>=20
>> I feel like Ruby=E2=80=99s grammar should call the named node =
something else,
>> like unless_statement.
>=20
> Agreed, the problem is that nodes defined in Ruby=E2=80=99s grammar
> are too ambiguous.  There are more such nodes with the same name
> for named and anonymous: "if", "while", "until", etc.
>=20
>>> Finding anonymous nodes breaks forward-sexp when point is on =
"unless":
>>>=20
>>> un-!-less cond
>>>   a +=3D 1
>>> else
>>>   b -=3D 1
>>> end
>>>=20
>>> because (treesit-thing-at (point) 'sexp t) finds
>>>=20
>>> #<treesit-node "unless" in 156-162>
>>>=20
>>> instead of
>>>=20
>>> #<treesit-node unless in 156-203>
>>>=20
>>> Also this breaks backward-sexp and backward-up-list
>>> because treesit--thing-sibling finds
>>> the anonymous node "unless" as a previous sibling
>>> instead of the named node 'unless' as a parent.
>>>=20
>>> Would the right solution be to check if the found thing
>>> is a named node?  With something like:
>>>=20
>>> diff --git a/lisp/treesit.el b/lisp/treesit.el
>>> index 18200acf53f..9ad879ee40c 100644
>>> --- a/lisp/treesit.el
>>> +++ b/lisp/treesit.el
>>> @@ -2711,6 +2774,7 @@ treesit--thing-sibling
>>>                     (lambda (n) (>=3D (treesit-node-start n) pos))))
>>>         (iter-pred (lambda (node)
>>>                      (and (treesit-node-match-p node thing t)
>>> +                           (treesit-node-check node 'named)
>>>                           (funcall pos-pred node))))
>>>         (sibling nil))
>>>    (when cursor
>>> @@ -2760,6 +2824,7 @@ treesit-thing-at
>>>  (let* ((cursor (treesit-node-at pos))
>>>         (iter-pred (lambda (node)
>>>                      (and (treesit-node-match-p node thing t)
>>> +                           (treesit-node-check node 'named)
>>>                           (if strict
>>>                               (< (treesit-node-start node) pos)
>>>                             (<=3D (treesit-node-start node) pos))
>>=20
>> A better solution IMO is to add some way to distinguish between named =
and
>> anonymous nodes. I can think of two ways, either add =E2=80=9Cand=E2=80=
=9D and
>> =E2=80=9Cnamed/anonymous=E2=80=9D predicate, so (and named =
=E2=80=9Cunless=E2=80=9D) only matches the named
>> =E2=80=9Cunless=E2=80=9D node; or we add a special syntax such that =
=E2=80=9C(unless)=E2=80=9D only matches
>> named nodes, and =E2=80=9C\=E2=80=9Dunless\=E2=80=9D=E2=80=9D only =
matches anonymous nodes.
>=20
> Either predicate or a special syntax is welcome.
>=20
> This would be more handy than writing a lambda with implicit calls
> of treesit-node-check.

I=E2=80=99ll go with the (and named =E2=80=9Cunless=E2=80=9D) route =
because after thinking about it more, =E2=80=9C(unless)=E2=80=9D will be =
hard to work with because the string predicate is actually a regexp.

Yuan=




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 19 Dec 2024 07:20:01 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 19 02:20:01 2024
Received: from localhost ([127.0.0.1]:37229 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tOApF-0006su-0Y
	for submit <at> debbugs.gnu.org; Thu, 19 Dec 2024 02:20:01 -0500
Received: from lists.gnu.org ([209.51.188.17]:53546)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <juri@HIDDEN>) id 1tOAp7-0006sW-0J
 for submit <at> debbugs.gnu.org; Thu, 19 Dec 2024 02:19:53 -0500
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 <juri@HIDDEN>) id 1tOAp6-0004T5-Nf
 for bug-gnu-emacs@HIDDEN; Thu, 19 Dec 2024 02:19:52 -0500
Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <juri@HIDDEN>) id 1tOAp4-0001nE-2j
 for bug-gnu-emacs@HIDDEN; Thu, 19 Dec 2024 02:19:51 -0500
Received: by mail.gandi.net (Postfix) with ESMTPSA id AB75AE0003
 for <bug-gnu-emacs@HIDDEN>; Thu, 19 Dec 2024 07:19:46 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: Ambiguous treesit named and anonymous nodes in ruby-ts-mode
Organization: LINKOV.NET
References: <87plox4mtp.fsf@HIDDEN>
 <877cay1lqt.fsf@HIDDEN> <86frpma06f.fsf@HIDDEN>
 <ACA8B25C-87C2-4BD8-BDE8-7810A0817A75@HIDDEN>
 <86ikueiekp.fsf@HIDDEN>
 <AD87175F-6F83-4D7D-9A00-B2B96CEC7072@HIDDEN>
 <86ed4zg1cc.fsf@HIDDEN> <87zflac68t.fsf@HIDDEN>
 <87jzcdlxdp.fsf@HIDDEN> <87o71jocgs.fsf@HIDDEN>
 <C7CEC936-A192-495E-83FC-367136B27831@HIDDEN>
 <jwvh67az24n.fsf-monnier+emacs@HIDDEN>
 <5192B278-66C0-48AE-B881-E57CCBB6B501@HIDDEN>
 <87frmtbc9z.fsf@HIDDEN> <86bjxh1h86.fsf@HIDDEN>
 <87y10l8h6k.fsf@HIDDEN> <87ldwl8g60.fsf@HIDDEN>
 <87wmg53rdj.fsf@HIDDEN> <87a5d0n651.fsf@HIDDEN>
 <87zfktphks.fsf@HIDDEN>
 <A92A6225-255F-4A2B-857D-6DCFDFBCF024@HIDDEN>
X-Debbugs-Cc: Yuan Fu <casouri@HIDDEN>,  Dmitry Gutov <dmitry@HIDDEN>
Date: Thu, 19 Dec 2024 09:18:37 +0200
Message-ID: <87ttb0rwni.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-GND-Sasl: juri@HIDDEN
Received-SPF: pass client-ip=2001:4b98:dc4:8::224;
 envelope-from=juri@HIDDEN; helo=relay4-d.mail.gandi.net
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.6 (-)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.6 (--)

[This is a separate bug report from bug#73404]

>> While testing treesit-forward-sexp-list, I discovered that
>> thing-navigation functions are not restricted to named nodes.
>> 
>> I wonder if there a reason to find anonymous nodes as things?
>
> We should rather ask is there any reason to not find anonymous nodes
> as things? Even ruby-ts-mode defines a bunch of anonymous nodes as
> sexp, no? In any case, excluding anonymous nodes from things doesn’t
> sound right.

Indeed, there are many anonymous nodes used in ruby-ts-mode.

>> The problem was found with the node "unless" in Ruby:
>> 
>>  unless cond
>>    a += 1
>>  else
>>    b -= 1
>>  end
>> 
>> Here the named node 'unless' has exactly the same name
>> as the anonymous node with the text "unless":
>> 
>>  (unless "unless" condition: (identifier)
>
> I feel like Ruby’s grammar should call the named node something else,
> like unless_statement.

Agreed, the problem is that nodes defined in Ruby’s grammar
are too ambiguous.  There are more such nodes with the same name
for named and anonymous: "if", "while", "until", etc.

>> Finding anonymous nodes breaks forward-sexp when point is on "unless":
>> 
>>  un-!-less cond
>>    a += 1
>>  else
>>    b -= 1
>>  end
>> 
>> because (treesit-thing-at (point) 'sexp t) finds
>> 
>>  #<treesit-node "unless" in 156-162>
>> 
>> instead of
>> 
>>  #<treesit-node unless in 156-203>
>> 
>> Also this breaks backward-sexp and backward-up-list
>> because treesit--thing-sibling finds
>> the anonymous node "unless" as a previous sibling
>> instead of the named node 'unless' as a parent.
>> 
>> Would the right solution be to check if the found thing
>> is a named node?  With something like:
>> 
>> diff --git a/lisp/treesit.el b/lisp/treesit.el
>> index 18200acf53f..9ad879ee40c 100644
>> --- a/lisp/treesit.el
>> +++ b/lisp/treesit.el
>> @@ -2711,6 +2774,7 @@ treesit--thing-sibling
>>                      (lambda (n) (>= (treesit-node-start n) pos))))
>>          (iter-pred (lambda (node)
>>                       (and (treesit-node-match-p node thing t)
>> +                           (treesit-node-check node 'named)
>>                            (funcall pos-pred node))))
>>          (sibling nil))
>>     (when cursor
>> @@ -2760,6 +2824,7 @@ treesit-thing-at
>>   (let* ((cursor (treesit-node-at pos))
>>          (iter-pred (lambda (node)
>>                       (and (treesit-node-match-p node thing t)
>> +                           (treesit-node-check node 'named)
>>                            (if strict
>>                                (< (treesit-node-start node) pos)
>>                              (<= (treesit-node-start node) pos))
>
> A better solution IMO is to add some way to distinguish between named and
> anonymous nodes. I can think of two ways, either add “and” and
> “named/anonymous” predicate, so (and named “unless”) only matches the named
> “unless” node; or we add a special syntax such that “(unless)” only matches
> named nodes, and “\”unless\”” only matches anonymous nodes.

Either predicate or a special syntax is welcome.

This would be more handy than writing a lambda with implicit calls
of treesit-node-check.




Acknowledgement sent to Juri Linkov <juri@HIDDEN>:
New bug report received and forwarded. Copy sent to casouri@HIDDEN, dmitry@HIDDEN, bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to casouri@HIDDEN, dmitry@HIDDEN, bug-gnu-emacs@HIDDEN:
bug#74963; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Thu, 30 Jan 2025 07:30:01 UTC

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