unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Sami M'Barek <sami@hamb.se>
To: help-gnu-emacs@gnu.org
Subject: Eglot gopls and organize imports
Date: Wed, 11 Jan 2023 08:32:03 +0100	[thread overview]
Message-ID: <m2v8ldttl8.fsf@hamb.se> (raw)


I’m trying to get the code action of organize imports to work with before-save-hook. Specifically for go-mode.
I’ve been searching around and found a couple of issues later linking to a solution similar to this:

(defun sami/eglot-organize-imports ()
  (call-interactively 'eglot-code-action-organize-imports))
(defun sami/before-saving-go ()
  (add-hook 'before-save-hook #'eglot-format-buffer -10 t)
  (add-hook 'before-save-hook #'sami/eglot-organize-imports nil t))
(add-hook 'go-mode-hook #'sami/before-saving-go)
Problem seems to be, running the function eglot-code-actions and selecting Organize imports works fine, but running the stand-alone function of eglot-code-action-organize-imports does not yield anything.

Test case:
Open emacs with emacs -q for an empty config

(require 'go-mode)
(require 'eglot)
(add-hook 'go-mode-hook #'eglot-ensure)
In any go file, add something like fmt.Println(“hello”) should import the package fmt automatically, deleting or commenting the line does not delete the imported package fmt.  eglot-code-action-organize-imports does not delete the imported package fmt. Running the function eglot-code-actions and selecting Organize imports DOES delete the package fmt from imports.

Here is the client-request and server-response.

[client-request] (id:613) Mon Dec  5 23:43:48 2022:
(:jsonrpc "2.0" :id 613 :method "textDocument/codeAction" :params
	  (:textDocument
	   (:uri "file:///Users/sami/Code/Go/src/sami/something/temp.go")
	   :range
	   (:start
	    (:line 5 :character 6)
	    :end
	    (:line 5 :character 10))
	   :context
	   (:diagnostics
	    []
	    :only
	    ["source.organizeImports"])))
[server-reply] (id:613) Mon Dec  5 23:43:48 2022:
(:jsonrpc "2.0" :result
	  [(:title "Organize Imports" :kind "source.organizeImports" :edit
		   (:documentChanges
		    [(:textDocument
		      (:version 172 :uri "file:///Users/sami/Code/Go/src/sami/something/temp.go")
		      :edits
		      [(:range
			(:start
			 (:line 3 :character 2)
			 :end
			 (:line 3 :character 2))
			:newText "bytes\"\n	\"crypto/tls\"\n	\"encoding/json\"\n	\"")
		       (:range
			(:start
			 (:line 4 :character 2)
			 :end
			 (:line 4 :character 2))
			:newText "go/token\"\n	\"")
		       (:range
			(:start
			 (:line 5 :character 10)
			 :end
			 (:line 5 :character 10))
			:newText "\"\n	\"sami/something/models\"\n	\"sami/something/tool")])]))]
	  :id 613)


Single difference between the usage of eglot-code-action-organize-imports and not is

...
            :only
            ["source.organizeImports"])))
...

emacs-28.2 (emacs-mac, railwaycat/emacsmacport/emacs-mac)
eglot-20221020.1010 (melpa)



                 reply	other threads:[~2023-01-11  7:32 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2v8ldttl8.fsf@hamb.se \
    --to=sami@hamb.se \
    --cc=help-gnu-emacs@gnu.org \
    /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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).