Subject: bug#73404: 30.0.50; [forward/kill/etc]-sexp commands do not behave as expected in tree-sitter modes

From: Juri Linkov <[email-masked]>
Date: Sun, 05 Jan 2025 19:59:31 +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.
>
> One issue I've had when exploring these things earlier is that I don't
> know the "spec" for how navigation in programming languages should work
> in Emacs. I mean, there are lots of examples in the source code, but no
> true specification. Should we possibly try to define some sane defaults
> here, so that it will be simpler to deal with idiosyncrasies of the tree
> sitter parsers? Lisp isn't in my experience the best language to define
> this, as it is just too simple.

Very simple: I'm striving to provide compatibility between ts-modes
with their predecessor non-ts modes.  So the de-facto "spec" is the
existing non-ts modes that provide canonical reference implementation.
This helps the users to more smoothly switch to ts-modes.

> Also, many of the functions are related to word processing, like
> sentence, word, paragraph etc, which aren't really useful in
> programming, imo. What is a sentence in java, lisp, or python, for
> example? Also, maybe sexp is too lisp/ast-like of a term, so much so
> that it is hard to reason about what a sexp is or isn't.

Indeed, sentences and paragraphs are even more fuzzy concepts when applied
to programming languages.  But some modes make sense of these things
nevertheless.  For example, in both c-mode and c-ts-mode 'M-e'
moves to the end of statement that usually end with a semicolon;
so your intuition about these things looks correct.