all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: "João Távora" <joaotavora@gmail.com>
Cc: Eli Zaretskii <eliz@gnu.org>,  "Philip K." <philipk@posteo.net>,
	 Dmitry Gutov <dmitry@gutov.dev>,
	 emacs-devel@gnu.org
Subject: Re: Adding refactoring capabilities to Emacs
Date: Thu, 07 Sep 2023 12:20:10 -0400	[thread overview]
Message-ID: <jwvpm2udlfk.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <CALDnm51nS0R6mnRP9jiHVzAQj8t6cKWWn8C+3mxM5L59HWWeGQ@mail.gmail.com> ("João Távora"'s message of "Thu, 7 Sep 2023 15:39:49 +0100")

> Also, it would be very good if we could have an early backend which is
> *not* LSP.  An obvious candidate is Elisp.  I'd like to know what is
> the minimal effort to write a lisp function based on the new
> macroexpanding tricks that Stefan Monnier developed that says
> precisely where a given symbol is used as a variable in a function.
> As far as I understand,  these techniques are currently being used for
> accurate completion, but they could maybe be used for accurate
> refactorings.

Hmm... the `elisp--local-variables` functionality (beside the
associated security issues and occasional errors) provides only
a (somewhat) reliable list of variables that are in-scope.  So it could
potentially be extended to offer a way to jump to the declaration of
a local variable from a reference to it, but it doesn't know how to find
all (and only) the references to a given variable.

We could extend it to a full code-walker that can distinguish between
identifiers that refer to functions vs variables and which skips "data"
and obeys scope, and thus collect reliably all the references.
But `cconv-analyze-form` is probably a better starting point :-)

Going back from there to the actual source code can be a fair bit more
tricky, but Alan's symbols-with-positions should provide just what we need.

> IMO diff is the lingua franca for communicating changes to source
> code around the world, even in those pretty web interfaces that
> you and many others like.  So it makes full sense to support it
> and to support it well.

+1, tho I think the general framework should be agnostic to the specific
way a change is presented to the user.

>> - I would probably want to bind the originally proposed
>> 'diff-apply-everything' to 'C-c C-c' (e.g. "commit the change to disk"),

Agreed.

>> but that's already taken in diff-mode.

I don't think the current `C-c C-c` binding in `diff-mode` should get in
the way.  That command is available via different bindings already, and
this is a specific use of diff-mode where `diff-apply-everything` makes
a lot of sense (as opposed to `C-x v =` where the changes are usually
already applied anyway so `diff-apply-everything` is rarely what we want).

>> - 'git diff' has a less-frequently used option called '--word-diff'
>> which could reduce the length of the diff in the case I am testing (but
>> I guess diff-mode would have to be updated to support that output). And
>> another way in that direction would be to reduce the size of the diff
>> context (e.g. to 0).

[ Side note: we could also extend diff-mode to do such "rewrite" inside
  Emacs.  Hiding some of the context should be fairly easy, for example.
  Also I've often wished for `diff-refine-hunk` to try and interlace
  the lines so as to minimize the distance between the "before" and
  "after" lines.  ]

> But I wouldn't overthink UI details at this point in the game either.

+1


        Stefan




  reply	other threads:[~2023-09-07 16:20 UTC|newest]

Thread overview: 147+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-19  6:03 Adding refactoring capabilities to Emacs Eli Zaretskii
2023-08-19 10:58 ` Eshel Yaron
2023-08-19 11:18   ` Eli Zaretskii
2023-08-20  1:19 ` Dmitry Gutov
2023-08-20  6:39   ` Eli Zaretskii
2023-08-20  6:42     ` Ihor Radchenko
2023-08-20  8:44   ` Yuri Khan
2023-08-20 22:51     ` Dmitry Gutov
2023-08-29 10:53       ` João Távora
2023-08-29 11:35         ` Dr. Arne Babenhauserheide
2023-08-30  0:52         ` Dmitry Gutov
2023-08-30 18:46           ` Stefan Kangas
2023-08-30 19:59             ` Dmitry Gutov
2023-08-30 20:37           ` João Távora
2023-08-30 21:49             ` Dmitry Gutov
2023-08-30 22:01               ` Stefan Kangas
2023-08-30 22:04                 ` Dmitry Gutov
2023-09-04  6:03                 ` Rudolf Schlatte
2023-09-04 11:04                   ` João Távora
2023-09-04 12:18                     ` Rudolf Schlatte
2023-08-31  5:03               ` Eli Zaretskii
2023-08-31  8:02                 ` João Távora
2023-09-04 15:45                   ` Dmitry Gutov
2023-09-04 23:34                     ` Dmitry Gutov
2023-09-04 17:23               ` Juri Linkov
2023-09-04 17:53                 ` Alfred M. Szmidt
2023-09-05  6:38                   ` Juri Linkov
2023-09-05  7:46                     ` Alfred M. Szmidt
2023-09-04 18:04                 ` Dmitry Gutov
2023-09-05  6:43                   ` Juri Linkov
2023-09-04 20:49                 ` Philip Kaludercic
2023-09-04 17:15   ` Juri Linkov
2023-09-04 18:02     ` Dmitry Gutov
2023-09-05 13:56       ` Alexander Adolf
2023-09-05 14:00         ` Dmitry Gutov
2023-09-06 13:25           ` Alexander Adolf
2023-08-20 13:00 ` sbaugh
2023-09-07 14:39 ` João Távora
2023-09-07 16:20   ` Stefan Monnier [this message]
2023-09-07 16:49     ` João Távora
2023-09-07 17:06       ` Stefan Monnier
2023-09-07 17:24         ` João Távora
2023-09-07 17:54           ` Stefan Monnier
2023-09-07 18:12             ` João Távora
2023-09-07 21:56               ` Stefan Monnier
2023-09-07 23:46         ` Lynn Winebarger
2023-09-07 20:41     ` Dmitry Gutov
2023-09-07 22:03       ` Stefan Monnier
2023-09-07 22:43         ` Dmitry Gutov
2023-09-07 22:18     ` João Távora
2023-09-07 22:39       ` Dmitry Gutov
2023-09-08  6:18         ` Eli Zaretskii
2023-09-08 18:25           ` Dmitry Gutov
2023-09-08 18:35             ` João Távora
2023-09-08 18:38               ` Dmitry Gutov
2023-09-08 18:44                 ` João Távora
2023-09-08 19:29                   ` Dmitry Gutov
2023-09-08 18:57               ` Eli Zaretskii
2023-09-08 19:01                 ` João Távora
2023-09-08  6:55         ` João Távora
2023-09-08 15:42           ` Stefan Monnier
2023-09-08 16:05             ` João Távora
2023-09-08 16:20               ` João Távora
2023-09-25 23:11                 ` Dmitry Gutov
2023-09-25 23:32                   ` Dmitry Gutov
2023-09-26  5:36                   ` Alfred M. Szmidt
2023-09-26  8:06                     ` João Távora
2023-09-26 10:57                       ` Dmitry Gutov
2023-09-26 11:24                         ` João Távora
2023-09-26 11:33                           ` Alfred M. Szmidt
2023-09-26 11:34                           ` Dmitry Gutov
2023-09-26 12:57                             ` João Távora
2023-09-26 13:09                               ` Alfred M. Szmidt
2023-09-26 13:52                                 ` Dmitry Gutov
2023-09-26 13:38                           ` Philip Kaludercic
2023-09-26 14:06                             ` João Távora
2023-09-26 14:31                               ` Dmitry Gutov
2023-09-26 14:51                                 ` João Távora
2023-09-26 14:54                                   ` Dmitry Gutov
2023-09-26 15:17                                     ` João Távora
2023-09-26 15:35                                       ` Alfred M. Szmidt
2023-09-26 15:38                                         ` Dmitry Gutov
2023-09-26 15:47                                           ` Alfred M. Szmidt
2023-09-26 16:01                                             ` Dmitry Gutov
2023-09-26 16:10                                               ` Alfred M. Szmidt
2023-09-29 10:55                                                 ` Eli Zaretskii
2023-09-29 12:36                                                   ` Alfred M. Szmidt
2023-09-29 15:32                                                     ` Eli Zaretskii
2023-09-26 16:31                                               ` Yuri Khan
2023-09-26 17:28                                                 ` Dmitry Gutov
2023-09-29 11:10                                                 ` Eli Zaretskii
2023-09-29 10:49                                             ` Eli Zaretskii
2023-09-29 12:36                                               ` Alfred M. Szmidt
2023-09-26 15:01                                 ` [External] : " Drew Adams
2023-09-26 15:22                                   ` Alfred M. Szmidt
2023-09-29 10:36                                     ` Eli Zaretskii
2023-09-29 12:30                                       ` Robert Pluim
2023-09-29 13:11                                         ` Stefan Monnier
2023-09-29 13:13                                           ` Alfred M. Szmidt
2023-09-29 13:16                                           ` João Távora
2023-09-29 13:19                                             ` João Távora
2023-09-29 15:20                                               ` Stefan Monnier
2023-10-01 12:07                                                 ` Stefan Kangas
2023-10-01 18:43                                                   ` Howard Melman
2023-09-29 15:47                                           ` Drew Adams
2023-09-29 15:30                                         ` Eli Zaretskii
2023-09-26 15:27                                   ` Alfred M. Szmidt
2023-09-29 10:40                                     ` Eli Zaretskii
2023-09-29 12:36                                       ` Alfred M. Szmidt
2023-09-29 15:34                                         ` Eli Zaretskii
2023-09-29 15:40                                           ` Alfred M. Szmidt
2023-09-29 16:22                                             ` Eli Zaretskii
2023-09-29 16:32                                               ` Alfred M. Szmidt
2023-09-29 16:51                                                 ` Eli Zaretskii
2023-09-29 17:32                                                   ` Alfred M. Szmidt
2023-09-29 17:56                                                     ` Eli Zaretskii
2023-09-29 18:02                                                   ` Stefan Monnier
2023-09-26 10:55                     ` Dmitry Gutov
2023-09-26 12:03                       ` Alfred M. Szmidt
2023-09-26 12:11                         ` Dmitry Gutov
2023-09-26 12:20                           ` Alfred M. Szmidt
2023-09-29  6:52                           ` Eli Zaretskii
2023-09-29 10:21                             ` Dmitry Gutov
2023-09-29 15:20                               ` Eli Zaretskii
2023-09-29 17:20                                 ` Dmitry Gutov
2023-09-29 17:36                                   ` Eli Zaretskii
2023-09-29 17:44                                     ` Dmitry Gutov
2023-09-08 18:35               ` Dmitry Gutov
     [not found]                 ` <CALDnm52Wtat24JFu=o6m_eJVamub+1H1BxNd5eELQ2j--7OetA@mail.gmail.com>
     [not found]                   ` <da4cb294-39eb-c4a1-a625-da5ee183170c@gutov.dev>
2023-09-08 18:57                     ` João Távora
2023-09-07 19:06   ` Felician Nemeth
2023-09-07 19:19     ` João Távora
2023-09-07 19:25     ` Ihor Radchenko
2023-09-07 19:28       ` Ihor Radchenko
2023-09-07 22:14         ` João Távora
2023-09-07 20:43     ` Dmitry Gutov
2023-09-07 22:39   ` Dmitry Gutov
2023-09-08 11:10     ` João Távora
2023-09-08 22:35       ` Dmitry Gutov
2023-09-08 23:17         ` João Távora
2023-09-08 12:46   ` Eshel Yaron
2023-09-08 12:52     ` João Távora
2023-09-08 13:18       ` Eshel Yaron
2023-10-01 15:07         ` Extract to new definition (was: Adding refactoring capabilities to Emacs) Eshel Yaron
2023-09-08 13:30       ` [semi off topic] grep-based refactoring [was: Adding refactoring capabilities to Emacs] tomas
2023-09-08 17:53         ` João Távora
2023-09-08 18:24           ` Dmitry Gutov
2023-09-08 18:51             ` tomas

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=jwvpm2udlfk.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=dmitry@gutov.dev \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=joaotavora@gmail.com \
    --cc=philipk@posteo.net \
    /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.