emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] scratch/flymake-refactor e1b913f 36/52: Re-implement wrapa


From: João Távora
Subject: [Emacs-diffs] scratch/flymake-refactor e1b913f 36/52: Re-implement wraparound for flymake-goto-next-error
Date: Sun, 1 Oct 2017 12:40:49 -0400 (EDT)

branch: scratch/flymake-refactor
commit e1b913f316ffb6faa0a90c4bf81cf1b58793bf24
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Re-implement wraparound for flymake-goto-next-error
    
    Manual mentions this, so it's probably a good idea to keep it.  Added
    a defcustom flymake-wrap-around to control this.
    
    * lisp/progmodes/flymake-ui.el (flymake-wrap-around): New variable.
    (flymake-goto-next-error): Wrap around according to flymake-wrap-around.
    
    * test/lisp/progmodes/flymake-tests.el (different-diagnostic-types)
    (dummy-backends): Use flymake-wrap-around.
---
 lisp/progmodes/flymake-ui.el         | 26 +++++++++++++++++++-------
 test/lisp/progmodes/flymake-tests.el |  6 ++++--
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/lisp/progmodes/flymake-ui.el b/lisp/progmodes/flymake-ui.el
index f39ecf4..4ac9e0a 100644
--- a/lisp/progmodes/flymake-ui.el
+++ b/lisp/progmodes/flymake-ui.el
@@ -115,6 +115,10 @@ See `flymake-error-bitmap' and `flymake-warning-bitmap'."
                        "it is superseded by `warning-minimum-log-level.'"
                         "26.1")
 
+(defcustom flymake-wrap-around t
+  "If non-nil, moving to errors wraps around buffer boundaries."
+  :group 'flymake :type 'boolean)
+
 (defvar-local flymake-timer nil
   "Timer for starting syntax check.")
 
@@ -693,13 +697,21 @@ diagnostics of type `:error' and `:warning'."
                                                     filter)))))
                                  :compare (if (cl-plusp n) #'< #'>)
                                  :key #'overlay-start))
-         (chain (cl-member-if (lambda (ov)
-                                (if (cl-plusp n)
-                                    (> (overlay-start ov)
-                                       (point))
-                                  (< (overlay-start ov)
-                                     (point))))
-                              ovs))
+         (tail (cl-member-if (lambda (ov)
+                               (if (cl-plusp n)
+                                   (> (overlay-start ov)
+                                      (point))
+                                 (< (overlay-start ov)
+                                    (point))))
+                             ovs))
+         (chain (if flymake-wrap-around
+                    (if tail
+                        (progn
+                          (setcdr (last tail) ovs)
+                          tail)
+                      (setcdr (last ovs) ovs)
+                      ovs)
+                  tail))
          (target (nth (1- n) chain)))
     (cond (target
            (goto-char (overlay-start target))
diff --git a/test/lisp/progmodes/flymake-tests.el 
b/test/lisp/progmodes/flymake-tests.el
index 494d1c9..e313846 100644
--- a/test/lisp/progmodes/flymake-tests.el
+++ b/test/lisp/progmodes/flymake-tests.el
@@ -128,7 +128,8 @@ SEVERITY-PREDICATE is used to setup
     (should (eq 'flymake-warning (face-at-point)))
     (flymake-goto-next-error)
     (should (eq 'flymake-error (face-at-point)))
-    (should-error (flymake-goto-next-error nil nil t)) ))
+    (let ((flymake-wrap-around nil))
+      (should-error (flymake-goto-next-error nil nil t))) ))
 
 (defmacro flymake-tests--assert-set (set
                                      should
@@ -243,7 +244,8 @@ SEVERITY-PREDICATE is used to setup
         (should (eq 'flymake-warning (face-at-point))) ; dolor
         (flymake-goto-next-error)
         (should (eq 'flymake-error (face-at-point))) ; prognata
-        (should-error (flymake-goto-next-error nil nil t))))))
+        (let ((flymake-wrap-around nil))
+          (should-error (flymake-goto-next-error nil nil t)))))))
 
 (provide 'flymake-tests)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]