unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@linkov.net>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: mickey@masteringemacs.org, Eli Zaretskii <eliz@gnu.org>,
	Theodor Thornhill <theo@thornhill.no>,
	casouri@gmail.com, 73404@debbugs.gnu.org
Subject: bug#73404: 30.0.50; [forward/kill/etc]-sexp commands do not behave as expected in tree-sitter modes
Date: Mon, 06 Jan 2025 19:40:39 +0200	[thread overview]
Message-ID: <87plkzyh60.fsf@mail.linkov.net> (raw)
In-Reply-To: <jwvsepwoxko.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Mon, 06 Jan 2025 09:14:58 -0500")

>>> However, deciding on what makes sense is hard, which is why I'm
>>> suggesting we try to define a "spec". It needn't really be much more
>>> than reference suggestions for mode implementors at first, then maybe
>>> some intersection of features crystallize across all modes.
>>
>> I don't think it's possible to find a spec better than Stefan already
>> defined as an AST node delimited by an opening and a closing "keyword":
>> (...), [...], if...fi, begin...end, ...
>
> IIUC, Theodor was talking more generally than just about "list" operations.
> I think "list" operations are among the clearest case (BTW, I wonder if
> someone has already tried to implement that functionality for Haskell or
> Python,

Recently I looked at python-ts-mode, but then discovered that it
completely misses any use of treesit-thing-settings unlike many
other ts-modes.  Also there is no treesit-thing-settings yet
in the new haskell-ts-mode.

> where the opening and a closing "keywords" are basically newlines).

The main problem with empty opening and closing keywords is that
nodes from different levels all end up at the same position,
and currently treesit prefers a higher-level node.  This means
that the sequence of `C-M-f C-M-b` is not idempotent anymore:
`C-M-b` might jump to the start of a higher-level node.

>> Or when looking at the commands with the 'forward-' prefix:
>>
>>   forward-sexp (C-M-f)
>>   forward-list (C-M-n)
>
> OK, we already talked about these two.  We could probably start drafting
> a kind of guideline.

Also in treesit.el, forward-sexp and forward-list
could share the same implementation.

>>   forward-symbol
>
> This one doesn't look too hard either.
>
>>   forward-sentence (M-e)
>
> This one is trickier.  You just provided a reasonably good start with
> "In languages with statements a sentence corresponds to a statement",
> but there are some non-trivial questions about language without
> statements, about use within comments, about how to handle nesting
> (e.g. statements within statements) and more generally the use of `M-e`
> from outside of statements.

I've checked that `M-e` in text-mode currently doesn't support
sentences in nested lists.  For example, `M-e` jumps inside
the list in:

  Top sentence.  (First inner sentence.  Second inner sentence.)

>>   forward-paragraph (M-})
>
> This one is also tied to filling, so it's important for it to behave
> well w.r.t to comments to allow filling actual text paragraphs
> within comments.

This provides an opportunity to move treesit-specific code
from `prog-fill-reindent-defun` to treesit.el.

> As for its behavior outside of comments ...
>
>>   forward-page (C-x ])
>>   forward-word (M-f)
>
> I think these should be oblivious to the syntax (i.e. line `forward-line`
> and `forward-char`).
>
> Your list missed the "defun" unit of navigation.

Because there is no `forward-defun` ;-)

But strange that "defun" still is defined by `treesit-defun-type-regexp`
instead of a "defun" thing in `treesit-thing-settings`.

> One other potentially useful unit of navigation that depends on the
> syntax would be "list element", which would do something like skip to
> the next/previous separator delimiting elements of the nearest enclosing
> paired delimiters.  For {...;...;...} blocks, this would behave like
> `forward-sentence`, except that when used from within the args of
> a function call like a `foo (..., ..., ...)`, it would jump
> between arguments instead of skipping all the way to the next statement.

Indeed, there is a need to have an additional command to move
between more ATS nodes, besides the list nodes navigated by 'C-M-n'.
But the problem is to find free keys for more commands.





  reply	other threads:[~2025-01-06 17:40 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 [this message]
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
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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87plkzyh60.fsf@mail.linkov.net \
    --to=juri@linkov.net \
    --cc=73404@debbugs.gnu.org \
    --cc=casouri@gmail.com \
    --cc=eliz@gnu.org \
    --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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).