From: Theodor Thornhill via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: "João Távora" <joaotavora@gmail.com>
Cc: 50244-done@debbugs.gnu.org,
Philipp Stephani <p.stephani2@gmail.com>,
Dmitry Gutov <dgutov@yandex.ru>
Subject: bug#50244: 28.0.50; Support project-wide diagnostics reports in flymake.el
Date: Sat, 23 Oct 2021 21:22:08 +0200 [thread overview]
Message-ID: <m18ryjr1gf.fsf@Frende-MacBook.lan> (raw)
In-Reply-To: <87ee9r2xwt.fsf@gmail.com>
Hi João!
(sent this mail some days ago, but the bug was archived, so not sure if
it worked. Trying again. If this is only noise, then I'm sorry, but
hopefully ok considering i found a typo in the old patch :))
I finally did get to test this out a little, and I seem to have hit some
small snags I can't really understand. I'd love some pointers as to how
to continue!
(the patch I currently use is attached at the bottom)
Ok, so what happens is:
- There is no backend set on the list-only-diagnostics as for now, and I
cannot for the life of me see how to set them, as it doesn't look like
eglot itself sets it. Is there some reflection going on here that I
have missed?
- The function in question is riddled with fallbacks and failure
checking. Are we sure we need all that? I see most of the commits
relating to the range checking is from 2018, so they may not be
relevant anymore?
- The diff as supplied appends the list-only-diagnostics just fine to
the flymake buffer, but I believe since the backend isn't set, eglot
doesn't report the proper diagnostics when I visit the file. I have
to make a bogus edit to trigger the eglot-flymake-backend function.
(This could just as well be some unrelated eglot/elmls issue...)
- What would be the best way to get the proper line and column? Now I
simply use the range, but considering there's a lot of error handling
there I guess that is a little risky? I did have a version earlier
using with-temp-buffer and finding the correct positions, but that
seemed more complicated than needed.
I'd love to get your thoughts on this :)
Theodor
diff --git a/eglot.el b/eglot.el
index bf9cf25..47c7b74 100644
--- a/eglot.el
+++ b/eglot.el
@@ -1776,9 +1776,14 @@ COMMAND is a symbol naming the command."
(_server (_method (eql telemetry/event)) &rest _any)
"Handle notification telemetry/event") ;; noop, use events buffer
+(defun eglot--diag-type (severity)
+ (cond ((<= severity 1) 'eglot-error)
+ ((= severity 2) 'eglot-warning)
+ (t 'eglot-note)))
+
(cl-defmethod eglot-handle-notification
(server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics
- &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode'
+ &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode'
"Handle notification publishDiagnostics"
(if-let ((buffer (find-buffer-visiting (eglot--uri-to-path uri))))
(with-current-buffer buffer
@@ -1787,9 +1792,7 @@ COMMAND is a symbol naming the command."
collect (eglot--dbind ((Diagnostic) range message severity source)
diag-spec
(setq message (concat source ": " message))
- (pcase-let
- ((sev severity)
- (`(,beg . ,end) (eglot--range-region range)))
+ (pcase-let ((`(,beg . ,end) (eglot--range-region range)))
;; Fallback to `flymake-diag-region' if server
;; botched the range
(when (= beg end)
@@ -1807,17 +1810,29 @@ COMMAND is a symbol naming the command."
(setq end
(point-at-eol
(1+ (plist-get (plist-get range :end) :line)))))))
- (eglot--make-diag (current-buffer) beg end
- (cond ((<= sev 1) 'eglot-error)
- ((= sev 2) 'eglot-warning)
- (t 'eglot-note))
- message `((eglot-lsp-diag . ,diag-spec)))))
+ (eglot--make-diag
+ (current-buffer) beg end
+ (eglot--diag-type severity)
+ message `((eglot-lsp-diag . ,diag-spec)))))
into diags
finally (cond (eglot--current-flymake-report-fn
(eglot--report-to-flymake diags))
(t
(setq eglot--unreported-diagnostics (cons t diags))))))
- (jsonrpc--debug server "Diagnostics received for unvisited %s" uri)))
+ (cl-loop
+ with path = (expand-file-name (eglot--uri-to-path uri))
+ for diag-spec across diagnostics
+ collect (eglot--dbind ((Diagnostic) range message severity source) diag-spec
+ (setq message (concat source ": " message))
+ (let* ((start (plist-get range :start))
+ (line (1+ (plist-get start :line)))
+ (char (1+ (plist-get start :character))))
+ (eglot--make-diag path (cons line char) nil (eglot--diag-type severity) message)))
+ into diags
+ finally
+ (setq flymake-list-only-diagnostics
+ (assoc-delete-all path flymake-list-only-diagnostics #'string=))
+ (push (cons path diags) flymake-list-only-diagnostics))))
(cl-defun eglot--register-unregister (server things how)
"Helper for `registerCapability'.
next prev parent reply other threads:[~2021-10-23 19:22 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-29 0:53 bug#50244: 28.0.50; Support project-wide diagnostics reports in flymake.el João Távora
2021-08-29 23:27 ` Dmitry Gutov
2021-08-30 7:00 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-08-30 8:46 ` João Távora
2021-09-11 1:08 ` João Távora
2021-09-13 0:08 ` Dmitry Gutov
2021-09-13 6:48 ` João Távora
2021-09-13 18:03 ` João Távora
2021-09-13 19:47 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-09-13 20:04 ` João Távora
2021-09-13 20:21 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-09-14 8:50 ` João Távora
2021-09-14 9:21 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-09-14 11:34 ` João Távora
2021-09-14 12:22 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-10-23 19:22 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2021-10-23 20:22 ` João Távora
2021-10-23 20:50 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-09-13 20:11 ` Dmitry Gutov
2021-09-14 8:20 ` João Távora
2021-09-16 22:27 ` Dmitry Gutov
2021-09-16 23:37 ` João Távora
2021-09-13 20:26 ` Dmitry Gutov
2021-09-13 20:53 ` João Távora
2021-09-13 23:35 ` Dmitry Gutov
2021-09-14 8:43 ` João Távora
2021-09-16 22:19 ` Dmitry Gutov
2021-09-16 23:36 ` João Távora
2021-09-18 1:19 ` Dmitry Gutov
2021-09-18 9:59 ` João Távora
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=m18ryjr1gf.fsf@Frende-MacBook.lan \
--to=bug-gnu-emacs@gnu.org \
--cc=50244-done@debbugs.gnu.org \
--cc=dgutov@yandex.ru \
--cc=joaotavora@gmail.com \
--cc=p.stephani2@gmail.com \
--cc=theo@thornhill.no \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).