From: "João Távora" <joaotavora@gmail.com>
To: Eshel Yaron <me@eshelyaron.com>
Cc: dmitry@gutov.dev, Philip Kaludercic <philipk@posteo.net>,
60338@debbugs.gnu.org, Eli Zaretskii <eliz@gnu.org>
Subject: bug#60338: [PATCH] Add option to present server changes as diffs
Date: Fri, 1 Sep 2023 23:01:37 +0100 [thread overview]
Message-ID: <CALDnm53__OOiHtRkxQdXa=qUOp8GqRDC7qwDKH05QXTYBSP_1w@mail.gmail.com> (raw)
In-Reply-To: <m1zg25d2ck.fsf@eshelyaron.com>
OK, Eshel
I think I fixed all these issues in the latest
fdf6c164efd0bb467d0d46460161c146e955a48c which I just
pushed to master. Please have a look.
Thanks,
João
On Fri, Sep 1, 2023 at 10:13 PM Eshel Yaron <me@eshelyaron.com> wrote:
>
> João Távora <joaotavora@gmail.com> writes:
>
> > I've finally pushed this to master, after working on mostly on the user
> > confirmation logic. I deprecated `eglot-confirm-server-initiated-edits'
> > (had crap semantics anyway) and replaced it with a shiny new
> > 'eglot-confirm-server-edits', with a simpler name but much more powerful
> > (see its docstring).
> >
> [...]
> >
> > Please have a look, give it some testing, and tell me if I missed
> > anything.
>
> Great stuff! One issue I came across is with unsaved buffers.
> Here's a recipe:
>
> With emacs -Q, set `eglot-confirm-server-edits` to `diff`. In a fresh
> git repository, create a new file `foo.go` and insert the following:
>
> --8<---------------cut here---------------start------------->8---
> package baz
>
> type Foobar interface {}
> --8<---------------cut here---------------end--------------->8---
>
> Now save the file, and do `M-x go-ts-mode` followed by `M-x eglot` to
> connect to an LSP server (`gopls` in my case). Without saving the
> buffer, insert `type Baz interface {}` after the last line:
>
> --8<---------------cut here---------------start------------->8---
> package baz
>
> type Foobar interface {}
> type Baz interface {}
> --8<---------------cut here---------------end--------------->8---
>
> With point on `Baz`, do `M-x eglot-rename RET Spam RET`. Emacs displays
> the following diff in *EGLOT proposed server changes*:
>
> --8<---------------cut here---------------start------------->8---
> diff -u /Users/eshelyaron/tmp/bug/foo.go /var/folders/q1/h0vdt_hx00zgbv3bpyx2vdr00000gp/T/buffer-content-sgzkbC
> --- /Users/eshelyaron/tmp/bug/foo.go 2023-09-01 20:55:02
> +++ /var/folders/q1/h0vdt_hx00zgbv3bpyx2vdr00000gp/T/buffer-content-sgzkbC 2023-09-01 20:55:07
> @@ -1,3 +1,4 @@
> package baz
>
> type Foobar interface {}
> +Spam
> \ No newline at end of file
>
> Diff finished. Fri Sep 1 20:55:08 2023
> --8<---------------cut here---------------end--------------->8---
>
> We clearly get an incorrect patch. It seems like the patch is produced
> by comparing the modified version of the buffer to the visited file,
> instead of comparing it to the current buffer contents.
>
> Another, smaller issue is that while `eglot-rename` is creating the
> patch it prints messages along the lines of:
>
> [eglot] applying 1 edits to `*temp*-207900'
>
> Which feels less appropriate in these settings.
>
> Lastly, I have an improvement suggestion for the `:type` of
> `eglot-confirm-server-edits` to make it nicer to deal with via Custom:
>
> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
> index 8d95019c3ed..afb99e4b9ca 100644
> --- a/lisp/progmodes/eglot.el
> +++ b/lisp/progmodes/eglot.el
> @@ -413,12 +413,17 @@ eglot-confirm-server-edits
> `eglot-code-actions', `eglot-code-action-quickfix', etc. ACTION
> is one of the symbols described above. The value `t' for COMMAND
> is accepted and its ACTION is the default value."
> - :type '(choice (const :tag "Use diff" diff)
> + :type (let ((basic-choices
> + '((const :tag "Use diff" diff)
> (const :tag "Summarize and prompt" summary)
> (const :tag "Maybe use diff" maybe-diff)
> (const :tag "Maybe summarize and prompt" maybe-summary)
> - (const :tag "Don't confirm" nil)
> - (alist :tag "Per-command alist")))
> + (const :tag "Don't confirm" nil))))
> + `(choice ,@basic-choices
> + (alist :tag "Per-command alist"
> + :key-type (choice (function :tag "Command")
> + (const :tag "Default" t))
> + :value-type (choice . ,basic-choices)))))
>
> (defcustom eglot-extend-to-xref nil
> "If non-nil, activate Eglot in cross-referenced non-project files."
--
João Távora
next prev parent reply other threads:[~2023-09-01 22:01 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-26 13:42 bug#60338: [PATCH] Add option to present server changes as diffs Philip Kaludercic
2022-12-29 0:01 ` Yuan Fu
2022-12-29 14:28 ` Philip Kaludercic
2022-12-29 14:36 ` João Távora
2022-12-29 14:39 ` Philip Kaludercic
2022-12-30 13:13 ` João Távora
2022-12-30 15:09 ` Philip Kaludercic
2023-01-04 20:56 ` Felician Nemeth
2023-06-09 7:55 ` Philip Kaludercic
2023-06-11 21:33 ` Philip Kaludercic
2023-06-12 11:56 ` Eli Zaretskii
2023-06-12 12:35 ` Philip Kaludercic
2023-06-12 12:52 ` Eli Zaretskii
2023-06-12 13:29 ` Philip Kaludercic
2023-06-12 13:41 ` Eli Zaretskii
2023-06-13 21:34 ` Philip Kaludercic
2023-06-14 6:00 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-14 11:27 ` Philip Kaludercic
2023-06-18 11:38 ` Philip Kaludercic
2023-06-18 15:18 ` João Távora
2023-06-18 22:37 ` João Távora
2023-06-24 16:53 ` Philip Kaludercic
2023-09-01 0:06 ` João Távora
2023-09-01 5:18 ` Philip Kaludercic
2023-09-01 21:12 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-01 21:19 ` João Távora
2023-09-01 22:01 ` João Távora [this message]
2023-09-02 6:13 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-02 9:55 ` João Távora
2023-09-07 1:00 ` Dmitry Gutov
2023-09-07 6:28 ` Juri Linkov
2023-09-07 12:41 ` Dmitry Gutov
2023-09-07 12:45 ` Dmitry Gutov
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='CALDnm53__OOiHtRkxQdXa=qUOp8GqRDC7qwDKH05QXTYBSP_1w@mail.gmail.com' \
--to=joaotavora@gmail.com \
--cc=60338@debbugs.gnu.org \
--cc=dmitry@gutov.dev \
--cc=eliz@gnu.org \
--cc=me@eshelyaron.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.