Subject: Re: bug#71504: 30.0.50; FR: Fix suggestions ("quick fix") for Flymake diagnostics

From: Eshel Yaron <[email-masked]>
Date: Tue, 16 Jul 2024 17:19:47 +0200

Eli Zaretskii <[email-masked]> writes:

>> From: Eshel Yaron <[email-masked]>
>> Cc: [email-masked],  [email-masked]
>> Date: Tue, 16 Jul 2024 11:49:45 +0200
>> 
>> > If this is okay with Spencer, I think this should go to the master
>> > branch, with the following two nits fixed:
>> >
>> >   . the doc string of flymake-make-diagnostic should explicitly tell
>> >     that :fix-function is for backends to be set to the appropriate
>> >     fixup function
>> >   . this is documented in flymake.texi
>> 
>> Thanks, will do.  Note that to apply a fix suggestion, this patch uses
>> function refactor-apply-edits from my library refactor.el.  This is the
>> "general purpose function for applying code changes" I mentioned in a
>> previous message in this thread.  So to land this on master we need to
>> also add (at least a part of) refactor.el.  I'm happy to contribute the
>> library wholesale, FWIW.
>> 
>> You can find the latest version of refactor.el here:
>> 
>> https://git.sr.ht/~eshel/emacs/blob/main/lisp/progmodes/refactor.el
>
> Couldn't refactor-apply-edits be replaced with something that doesn't
> depend on the rest of the library?

Yes, that's certainly doable.  refactor-apply-edits can apply edits in
different ways depending on the value of refactor-apply-edits-function:

1. Apply all edits at once, without further confirmation.
2. Preview changes inline, and query about applying each change in turn.
   (This is like query-replace with inline before/after preview.)
3. Summarize edits in a diff buffer, let the user take it from there.

I guess that for applying fix suggestions for Flymake diagnostics we can
extract just the couple of functions that apply all edits at once.

> I'd prefer not to delay the fixit support in Eglot until we decide
> whether or not to add refactor.el.  Adding refactor.el could then be a
> separate discussion (and I do think having refactoring capabilities in
> Emacs is long overdue).

SGTM.  (I assume you meant Flymake rather than Eglot?)

I'll put together an updated patch once Spencer confirms.

Eshel