[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-26 7360178 20/39: Tweak Flymake commands flymake-got
From: |
João Távora |
Subject: |
[Emacs-diffs] emacs-26 7360178 20/39: Tweak Flymake commands flymake-goto-[next/prev]-error |
Date: |
Tue, 3 Oct 2017 10:04:50 -0400 (EDT) |
branch: emacs-26
commit 73601787b45d08cdd5026ea36ff680bd49076950
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
Tweak Flymake commands flymake-goto-[next/prev]-error
Add filters, useful for backends like the upcoming
flymake-elisp-checkdoc backend, for example, which litters everything
with low-priority notes.
Also re-implement wraparound for flymake-goto-next-error. Manual
mentions this, so it's probably a good idea to keep it. Added a new
customization variable flymake-wrap-around to control it.
* lisp/progmodes/flymake.el (flymake-goto-prev-error)
(flymake-goto-next-error): Accept FILTER argument.
(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): Pass FILTER to
flymake-goto-prev-error.
(different-diagnostic-types)
(dummy-backends): Use flymake-wrap-around.
---
lisp/progmodes/flymake.el | 74 ++++++++++++++++++++++++++++--------
test/lisp/progmodes/flymake-tests.el | 6 ++-
2 files changed, 62 insertions(+), 18 deletions(-)
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 242c83c..f136e14 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -112,6 +112,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.")
@@ -687,20 +691,44 @@ non-nil."
(flymake-mode)
(flymake-log :warning "Turned on in `flymake-find-file-hook'")))
-(defun flymake-goto-next-error (&optional n interactive)
- "Go to next, or Nth next, flymake error in buffer."
- (interactive (list 1 t))
+(defun flymake-goto-next-error (&optional n filter interactive)
+ "Go to Nth next flymake error in buffer matching FILTER.
+FILTER is a list of diagnostic types found in
+`flymake-diagnostic-types-alist', or nil, if no filter is to be
+applied.
+
+Interactively, always goes to the next error. Also
+interactively, FILTER is determined by the prefix arg. With no
+prefix arg, don't use a filter, otherwise only consider
+diagnostics of type `:error' and `:warning'."
+ (interactive (list 1
+ (if current-prefix-arg
+ '(:error :warning))
+ t))
(let* ((n (or n 1))
- (ovs (flymake--overlays :filter 'flymake--diagnostic
+ (ovs (flymake--overlays :filter
+ (lambda (ov)
+ (let ((diag (overlay-get
+ ov
+ 'flymake--diagnostic)))
+ (and diag
+ (or (not filter)
+ (memq (flymake--diag-type diag)
+ 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)
+ (and ovs (setcdr (last ovs) ovs)))
+ tail))
(target (nth (1- n) chain)))
(cond (target
(goto-char (overlay-start target))
@@ -709,12 +737,26 @@ non-nil."
(funcall (overlay-get target 'help-echo)
nil nil (point)))))
(interactive
- (user-error "No more flymake errors")))))
+ (user-error "No more flymake errors%s"
+ (if filter
+ (format " of types %s" filter)
+ ""))))))
+
+(defun flymake-goto-prev-error (&optional n filter interactive)
+ "Go to Nth previous flymake error in buffer matching FILTER.
+FILTER is a list of diagnostic types found in
+`flymake-diagnostic-types-alist', or nil, if no filter is to be
+applied.
+
+Interactively, always goes to the previous error. Also
+interactively, FILTER is determined by the prefix arg. With no
+prefix arg, don't use a filter, otherwise only consider
+diagnostics of type `:error' and `:warning'."
+ (interactive (list 1 (if current-prefix-arg
+ '(:error :warning))
+ t))
+ (flymake-goto-next-error (- (or n 1)) filter interactive))
-(defun flymake-goto-prev-error (&optional n interactive)
- "Go to previous, or Nth previous, flymake error in buffer."
- (interactive (list 1 t))
- (flymake-goto-next-error (- (or n 1)) interactive))
(provide 'flymake)
diff --git a/test/lisp/progmodes/flymake-tests.el
b/test/lisp/progmodes/flymake-tests.el
index 921c2f6..fa77a9a 100644
--- a/test/lisp/progmodes/flymake-tests.el
+++ b/test/lisp/progmodes/flymake-tests.el
@@ -129,7 +129,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 t)) ))
+ (let ((flymake-wrap-around nil))
+ (should-error (flymake-goto-next-error nil nil t))) ))
(defmacro flymake-tests--assert-set (set
should
@@ -244,7 +245,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 t))))))
+ (let ((flymake-wrap-around nil))
+ (should-error (flymake-goto-next-error nil nil t)))))))
(provide 'flymake-tests)
- [Emacs-diffs] emacs-26 b2f8b8b 16/39: More Flymake cleanup before advancing to backend redesign, (continued)
- [Emacs-diffs] emacs-26 b2f8b8b 16/39: More Flymake cleanup before advancing to backend redesign, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 22a7372 31/39: Flymake uses proper idle timers, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 87993cd 28/39: Explicitly add a(n empty) keymap for Flymake, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 bb8b663 04/39: Move symbols in flymake-proc.el to separate namespace, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 483f1e8 22/39: A couple of Flymake backends for emacs-lisp-mode, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 5235eaf 25/39: Treat Flymake errors as just another type of diagnostic, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 8118f0f 24/39: Fix three Flymake bugs when checking C header files, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 e0df7b9 21/39: Fancy Flymake mode-line construct displays status, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 cd39edb 26/39: Remove old flymake-display-err-menu-for-current-line, it's useless, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 2e84179 34/39: Tweak Flymake autoloads and dependencies, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 7360178 20/39: Tweak Flymake commands flymake-goto-[next/prev]-error,
João Távora <=
- [Emacs-diffs] emacs-26 1b271ad 27/39: Flymake uses some new fringe bitmaps, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 94a88c1 17/39: New Flymake API variable flymake-diagnostic-functions, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 5d922e5 38/39: Start rewriting Flymake manual, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 fe9dc7a 01/39: Split Flymake into flymake.el into flymake-proc.el (again!), João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 30ea272 35/39: Hook Flymake onto proper checkdoc and byte-compile interfaces, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 5d3f8a8 33/39: Capitalize "Flymake" in docstrings and comments, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 bd8ea88 29/39: Batch of minor Flymake cleanup actions agreed to with Stefan, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 91851c3 30/39: Flymake variable flymake-diagnostic-functions now a special hook, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 f964aa9 37/39: Minimal tweak as an attempt to future-proof Flymake API, João Távora, 2017/10/03
- [Emacs-diffs] emacs-26 602d937 36/39: Integrate Flymake elisp checkers into elisp-mode.el directly, João Távora, 2017/10/03