]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle case when diagnostic :character is out of range
authorMichal Krzywkowski <k.michal@zoho.com>
Sat, 8 Sep 2018 22:24:49 +0000 (00:24 +0200)
committerMichal Krzywkowski <k.michal@zoho.com>
Mon, 15 Oct 2018 21:06:28 +0000 (23:06 +0200)
* eglot.el (eglot-handle-notification): Don't error out when
  flymake-diag-region returns nil.

lisp/progmodes/eglot.el

index 8014024ecd8475ccc10c62ca73d1e4a9ccd4c333..b25d8b90df4b6e1c2362704613f87ecc80a109cf 100644 (file)
@@ -1080,14 +1080,21 @@ COMMAND is a symbol naming the command."
                        ((`(,beg . ,end) (eglot--range-region range)))
                      ;; Fallback to `flymake-diag-region' if server
                      ;; botched the range
-                     (if (= beg end)
-                         (let* ((st (plist-get range :start))
-                                (diag-region
-                                 (flymake-diag-region
-                                  (current-buffer) (1+ (plist-get st :line))
-                                  (plist-get st :character))))
-                           (setq beg (car diag-region)
-                                 end (cdr diag-region))))
+                     (when (= beg end)
+                       (if-let* ((st (plist-get range :start))
+                                 (diag-region
+                                  (flymake-diag-region
+                                   (current-buffer) (1+ (plist-get st :line))
+                                   (plist-get st :character))))
+                           (setq beg (car diag-region) end (cdr diag-region))
+                         (eglot--widening
+                          (goto-char (point-min))
+                          (setq beg
+                                (point-at-bol
+                                 (1+ (plist-get (plist-get range :start) :line))))
+                          (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)