From: Eli Zaretskii <eliz@gnu.org>
To: Juri Linkov <juri@linkov.net>
Cc: mickey@masteringemacs.org, casouri@gmail.com, theo@thornhill.no,
73404@debbugs.gnu.org, monnier@iro.umontreal.ca
Subject: bug#73404: 30.0.50; [forward/kill/etc]-sexp commands do not behave as expected in tree-sitter modes
Date: Sun, 05 Jan 2025 21:54:12 +0200 [thread overview]
Message-ID: <86cyh16nq3.fsf@gnu.org> (raw)
In-Reply-To: <871pxhp24e.fsf@mail.linkov.net> (message from Juri Linkov on Sun, 05 Jan 2025 20:05:53 +0200)
> From: Juri Linkov <juri@linkov.net>
> Cc: casouri@gmail.com, theo@thornhill.no, mickey@masteringemacs.org,
> 73404@debbugs.gnu.org, monnier@iro.umontreal.ca
> Date: Sun, 05 Jan 2025 20:05:53 +0200
>
> >> The command is 'forward-list'. With 'list' it will do in ts-modes
> >> the same that 'forward-list' already does in non-ts modes.
> >
> > Thanks.
> >
> > I tried this now in c-ts-mode, and it seems to behave strangely in
> > some cases.
> >
> > First, AFAICT it supports "lists" enclosed in "(..)", "{..}" and
> > "<..>", but not "[..]". Is that expected? Why don't we support
> > "[..]"?
>
> This looks like a bug. It would be nice if you posted an example.
That's easy:
C-f C-f src/dispnew.c RET
M-x -c-ts-mode RET
C-s [ RET
This brings you to this function:
static void
check_rows (struct frame *f)
{
for (int y = 0; y < f->desired_matrix->nrows; ++y)
if (MATRIX_ROW_ENABLED_P (f->desired_matrix, y))
{
struct glyph_row *row = MATRIX_ROW (f->desired_matrix, y);
for (int x = 0; x < row->used[TEXT_AREA]; ++x)
eassert (row->glyphs[TEXT_AREA][x].frame != 0);
}
}
Move point to any of the [ brackets there and type C-M-n -- you will
be moved to the last ) of the function.
Another example on line 152 in dispnew.c:
struct redisplay_history
{
char trace[512 + 100];
};
Move point to the [ before 512: C-M-n will signal an error.
Any bracket in the file will trigger either the first or the second
behavior.
> > Next, it many times signals an error "No next group", which is less
> > useful than it could be. For example:
> >
> > w32_get_internal_run_time (void)
> > {
> > if (get_process_times_fn)
> > {
> > FILETIME create, exit, kernel, user;
> > HANDLE proc = GetCurrentProcess ();
> > if ((*get_process_times_fn) (proc, &create, &exit, &kernel, &user))
> > {
> > return ltime (total.QuadPart);
> > } ^
> > }
> >
> > return Fcurrent_time ();
> > }
> >
> > If you put point on the semi-colon marked by "^", C-M-n signals an
> > error. Can't we instead move to the next "list" after
> > "Fcurrent_time"?
>
> 'C-M-n' doesn't move to the next statement in c-mode,
> since we need to support backward-compatibility. The key
> that moves to the next statement ignoring nested lists
> in C modes is 'M-e'.
Well, then maybe we could have the more useful behavior as an opt-in
option?
> > Also, it sometimes "misses" what looks like a "list". For example:
> >
> > s_pfn_Open_Process_Token = (OpenProcessToken_Proc)
> > get_proc_addr (hm_advapi32, "OpenProcessToken");
> >
> > If you put point at the beginning of the line, C-M-n moves to the end
> > of the 2nd parenthesized group, not to the end of the first group.
>
> Welcome to the twisty maze of tree-sitter grammars. C-M-n is unable
> to move to the first group because it's inside the node in the AST:
>
> (cast_expression "("
> type: (type_descriptor type: (type_identifier))
> ")"
> value:
> (call_expression function: (identifier)
> arguments:
> (argument_list "(" (identifier) ,
> (string_literal " (string_content) ")
> ")")))
>
> Both the first and the 2nd parenthesized groups are inside the
> "cast_expression" node.
Sorry, I don't follow: the parentheses of the argument list are also
inside a node, and yet we do recognize them. What's the difference?
> > As for terminology: the Emacs user manual calls these "groupings
> > delimited by parentheses (or whatever else serves as delimiters in the
> > language you are working with)", or in short "parenthetical group".
> > Why cannot we keep this terminology? It sounds like it describes its
> > subject as accurate as we can come up with.
>
> So you prefer "group" over "list"?
As a shorthand; the better term is "parenthesized group".
> Then 'forward-list' should move over "group"?
I'm not sure we should rename the commands, given the legacy. But
the doc string should use "group" or "parenthesized group", IMO.
next prev parent reply other threads:[~2025-01-05 19:54 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-21 5:06 bug#73404: 30.0.50; [forward/kill/etc]-sexp commands do not behave as expected in tree-sitter modes Mickey Petersen
2024-09-26 7:42 ` Yuan Fu
2024-09-26 9:56 ` Mickey Petersen
2024-09-26 10:53 ` Eli Zaretskii
2024-09-26 12:13 ` Mickey Petersen
2024-09-26 13:46 ` Eli Zaretskii
2024-09-26 15:21 ` Mickey Petersen
2024-09-26 15:45 ` Eli Zaretskii
2024-09-27 5:43 ` Yuan Fu
2024-09-29 16:56 ` Juri Linkov
2024-10-01 3:57 ` Yuan Fu
2024-10-01 17:49 ` Juri Linkov
2024-10-02 6:14 ` Yuan Fu
2024-12-05 18:52 ` Juri Linkov
2024-12-05 19:53 ` Juri Linkov
2024-12-10 17:20 ` Juri Linkov
2024-12-11 6:31 ` Yuan Fu
2024-12-11 15:12 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-12-11 15:29 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-12-11 16:50 ` Mickey Petersen
2024-12-11 18:27 ` Yuan Fu
2024-12-12 7:17 ` Juri Linkov
2024-12-12 7:40 ` Eli Zaretskii
2024-12-12 7:58 ` Juri Linkov
2024-12-12 8:14 ` Juri Linkov
2024-12-12 16:31 ` Juri Linkov
2024-12-12 17:49 ` Juri Linkov
2024-12-12 19:13 ` Eli Zaretskii
2024-12-13 7:06 ` Juri Linkov
2024-12-14 11:02 ` Eli Zaretskii
2024-12-14 18:14 ` Juri Linkov
2024-12-18 7:37 ` Juri Linkov
2024-12-19 4:04 ` Yuan Fu
2024-12-19 7:14 ` Juri Linkov
2024-12-19 7:18 ` bug#74963: Ambiguous treesit named and anonymous nodes in ruby-ts-mode Juri Linkov
2024-12-24 3:02 ` Yuan Fu
2024-12-24 7:17 ` Juri Linkov
2024-12-24 7:41 ` Juri Linkov
2024-12-25 3:25 ` Dmitry Gutov
2024-12-25 7:52 ` Juri Linkov
2024-12-26 1:00 ` Dmitry Gutov
2024-12-27 7:42 ` Juri Linkov
2024-12-24 17:52 ` Juri Linkov
2024-12-24 21:03 ` Yuan Fu
2024-12-25 7:49 ` Juri Linkov
2024-12-25 9:11 ` Yuan Fu
2024-12-25 17:39 ` Juri Linkov
2024-12-19 7:34 ` bug#73404: 30.0.50; [forward/kill/etc]-sexp commands do not behave as expected in tree-sitter modes Juri Linkov
2024-12-24 19:05 ` Juri Linkov
2024-12-24 21:14 ` Yuan Fu
2024-12-25 7:44 ` Juri Linkov
2024-12-25 8:34 ` Yuan Fu
2024-12-25 17:36 ` Juri Linkov
2024-12-27 7:59 ` Juri Linkov
2024-12-25 17:19 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-12-25 18:01 ` Juri Linkov
2024-12-25 19:29 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-12-27 7:54 ` Juri Linkov
2024-12-29 17:58 ` Juri Linkov
2024-12-30 7:15 ` Juri Linkov
2024-12-30 8:00 ` Yuan Fu
2025-01-04 17:46 ` Juri Linkov
2025-01-04 19:05 ` Eli Zaretskii
2025-01-05 7:32 ` Juri Linkov
2025-01-05 11:46 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-05 12:18 ` Eli Zaretskii
2025-01-05 12:30 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-05 16:59 ` Eli Zaretskii
2025-01-05 18:20 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-05 21:18 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-05 17:59 ` Juri Linkov
2025-01-05 19:50 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-06 7:54 ` Juri Linkov
2025-01-06 14:14 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-06 17:40 ` Juri Linkov
2025-01-06 18:04 ` Yuan Fu
2025-01-06 20:07 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-07 18:05 ` Juri Linkov
2025-01-07 19:19 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-05 13:02 ` Eli Zaretskii
2025-01-05 18:05 ` Juri Linkov
2025-01-05 19:54 ` Eli Zaretskii [this message]
2025-01-06 18:02 ` Juri Linkov
2025-01-06 18:45 ` Eli Zaretskii
2025-01-06 20:19 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-05 7:37 ` Juri Linkov
2025-01-05 14:40 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-05 18:10 ` Juri Linkov
2025-01-06 8:56 ` Yuan Fu
2025-01-07 17:56 ` Juri Linkov
2025-01-07 19:25 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-08 2:27 ` Yuan Fu
2024-12-30 13:40 ` Eli Zaretskii
2024-12-30 18:54 ` Juri Linkov
2024-12-30 19:36 ` Eli Zaretskii
2024-12-30 16:30 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-12-30 18:59 ` Juri Linkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=86cyh16nq3.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=73404@debbugs.gnu.org \
--cc=casouri@gmail.com \
--cc=juri@linkov.net \
--cc=mickey@masteringemacs.org \
--cc=monnier@iro.umontreal.ca \
--cc=theo@thornhill.no \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.