emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Plug treesit.el into other emacs constructs


From: Stefan Monnier
Subject: Re: Plug treesit.el into other emacs constructs
Date: Wed, 14 Dec 2022 14:25:19 -0500
User-agent: Gnus/5.13 (Gnus v5.13)

>>In this case, yes.  But in other cases it will move at different levels
>>of the tree.  E.g.:
>>
>>   int x = f (b + 4, c * 7 - z * 2, d, e);
>>
>>It will sometimes move over the whole instruction, and other times over
>>just a single variable or over a whole argument or over just a "factor".
>>This depends on where point is when `forward/backward-sexp` is called.
>
> Yeah. I think this example shows what I find unintuitive. If point is right
> before the first comma, and we transpose-sexps, it could end up swapping
> 4 for c * 7 - z * 2, which would rarely make sense in this context.

If so, that would be a bug in `transpose-sexp`, agreed.
I'm talking here about `forward/backward-sexp`.
The two are linked, but we shouldn't use one to justify a bug in the other.

`Forward-sexp` from

    int x = f (b + 4|, c * 7 - z * 2, d, e);

should work by delimiting the two things to swap *plus* the thing
in-between, and in this case it should be:

    int x = f (<b + 4>, <c * 7 - z * 2>, d, e);

Notice how it needs to figure out the ", ".  Once this is figured out,
it's easy to use `forward/backward-sexp` to find the other 2 boundaries
(if you want to re-use the `forward/backward-sexp`, like the code
currently does):

Use `forward-sexp` from

    int x = f (b + 4|, c * 7 - z * 2, d, e);

and `backward-sexp` from

    int x = f (b + 4, |c * 7 - z * 2, d, e);

> Swapping b + 4 with c * 7 - z * 2 would make sense here,  imo.
> I believe this is not how you see it? 

Looks like I wasn't clear enough.  I do agree with you on this, and SMIE
agrees with you as well, if you try `M-C-t` on the above code in
tuareg-mode.


        Stefan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]