[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-26 7a1133f: Misc. minor adjustments to Flymake
From: |
João Távora |
Subject: |
[Emacs-diffs] emacs-26 7a1133f: Misc. minor adjustments to Flymake |
Date: |
Wed, 4 Oct 2017 22:10:26 -0400 (EDT) |
branch: emacs-26
commit 7a1133f1ff002943ce32b5a05a7261bba520288c
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
Misc. minor adjustments to Flymake
- Add a half-decent minor-mode menu;
- Fix "waiting for backends" mode line message;
- Adjust the flymake-diag-region API;
- Autoload the flymake-log macro;
- Auto-disable the legacy backend in more situations;
- Fix a couple of warnings in legacy backend.
* lisp/progmodes/flymake-proc.el
(flymake-proc--diagnostics-for-pattern): Use new
flymake-diag-region.
* lisp/progmodes/flymake-proc.el
(flymake-proc-legacy-flymake): Do error when no
buffer-file-name or not writable.
(flymake-proc-legacy-flymake)
(flymake-proc-simple-cleanup): Don't reference flymake-last-change-time
* lisp/progmodes/flymake.el (flymake-diag-region):
Autoload. Take buffer as first argument.
* lisp/progmodes/flymake.el (flymake-switch-to-log-buffer):
New command.
(flymake-menu): Add a simple menu.
(flymake--mode-line-format): Use menu. Fix message. Switch to
log buffer when clicking exceptional warnings.
---
lisp/progmodes/flymake-proc.el | 38 +++++++--------
lisp/progmodes/flymake.el | 103 ++++++++++++++++++++++++-----------------
2 files changed, 80 insertions(+), 61 deletions(-)
diff --git a/lisp/progmodes/flymake-proc.el b/lisp/progmodes/flymake-proc.el
index 47ec27f..d088197 100644
--- a/lisp/progmodes/flymake-proc.el
+++ b/lisp/progmodes/flymake-proc.el
@@ -522,13 +522,13 @@ Create parent directories as needed."
for buffer = (and full-file
(find-buffer-visiting full-file))
if (and (eq buffer (process-buffer proc)) message)
- collect (with-current-buffer buffer
- (pcase-let ((`(,beg . ,end)
- (flymake-diag-region line-number col-number)))
- (flymake-make-diagnostic
- buffer beg end
- (guess-type flymake-proc-diagnostic-type-pred message)
- message)))
+ collect (pcase-let ((`(,beg . ,end)
+ (flymake-diag-region buffer line-number
col-number)))
+ (flymake-make-diagnostic
+ buffer beg end
+ (with-current-buffer buffer
+ (guess-type flymake-proc-diagnostic-type-pred message))
+ message))
else
do (flymake-log 2 "Reference to file %s is out of scope" fname))
(error
@@ -742,16 +742,18 @@ can also be executed interactively independently of
"There's already a Flymake process running in this buffer")
(kill-process proc))))
(when
- ;; A number of situations make us not want to error right away
- ;; (and disable ourselves), in case the situation changes in
- ;; the near future.
- (and buffer-file-name
- ;; Since we write temp files in current dir, there's no point
- ;; trying if the directory is read-only (bug#8954).
- (file-writable-p (file-name-directory buffer-file-name))
- (or (not flymake-proc-compilation-prevents-syntax-check)
+ ;; This particular situation make us not want to error right
+ ;; away (and disable ourselves), in case the situation changes
+ ;; in the near future.
+ (and (or (not flymake-proc-compilation-prevents-syntax-check)
(not (flymake-proc--compilation-is-running))))
- (let ((init-f (flymake-proc--get-init-function buffer-file-name)))
+ (let ((init-f
+ (and
+ buffer-file-name
+ ;; Since we write temp files in current dir, there's no point
+ ;; trying if the directory is read-only (bug#8954).
+ (file-writable-p (file-name-directory buffer-file-name))
+ (flymake-proc--get-init-function buffer-file-name))))
(unless init-f (error "Can find a suitable init function"))
(flymake-proc--clear-buildfile-cache)
(flymake-proc--clear-project-include-dirs-cache)
@@ -768,7 +770,6 @@ can also be executed interactively independently of
(flymake-log 0 "init function %s for %s failed, cleaning up"
init-f buffer-file-name))
(t
- (setq flymake-last-change-time nil)
(setq proc
(let ((default-directory (or dir default-directory)))
(when dir
@@ -878,8 +879,7 @@ can also be executed interactively independently of
(defun flymake-proc-simple-cleanup ()
"Do cleanup after `flymake-proc-init-create-temp-buffer-copy'.
Delete temp file."
- (flymake-proc--safe-delete-file flymake-proc--temp-source-file-name)
- (setq flymake-last-change-time nil))
+ (flymake-proc--safe-delete-file flymake-proc--temp-source-file-name))
(defun flymake-proc-get-real-file-name (file-name-from-err-msg)
"Translate file name from error message to \"real\" file name.
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 0b28dc3..acc0637 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -180,6 +180,11 @@ If nil, never start checking buffer automatically like
this."
level)
"*Flymake log*")))
+(defun flymake-switch-to-log-buffer ()
+ "Go to the *Flymake log* buffer."
+ (interactive)
+ (switch-to-buffer "*Flymake log*"))
+
;;;###autoload
(defmacro flymake-log (level msg &rest args)
"Log, at level LEVEL, the message MSG formatted with ARGS.
@@ -282,41 +287,43 @@ verify FILTER, a function, and sort them by COMPARE
(using KEY)."
(define-obsolete-face-alias 'flymake-warnline 'flymake-warning "26.1")
(define-obsolete-face-alias 'flymake-errline 'flymake-error "26.1")
-(defun flymake-diag-region (line &optional col)
- "Compute region (BEG . END) corresponding to LINE and COL.
-If COL is nil, return a region just for LINE.
-Return nil if the region is invalid."
+;;;###autoload
+(defun flymake-diag-region (buffer line &optional col)
+ "Compute BUFFER's region (BEG . END) corresponding to LINE and COL.
+If COL is nil, return a region just for LINE. Return nil if the
+region is invalid."
(condition-case-unless-debug _err
- (let ((line (min (max line 1)
- (line-number-at-pos (point-max) 'absolute))))
- (save-excursion
- (goto-char (point-min))
- (forward-line (1- line))
- (cl-flet ((fallback-bol
- () (progn (back-to-indentation) (point)))
- (fallback-eol
- (beg)
- (progn
- (end-of-line)
- (skip-chars-backward " \t\f\t\n" beg)
- (if (eq (point) beg)
- (line-beginning-position 2)
- (point)))))
- (if (and col (cl-plusp col))
- (let* ((beg (progn (forward-char (1- col))
- (point)))
- (sexp-end (ignore-errors (end-of-thing 'sexp)))
- (end (or (and sexp-end
- (not (= sexp-end beg))
- sexp-end)
- (ignore-errors (goto-char (1+ beg)))))
- (safe-end (or end
- (fallback-eol beg))))
- (cons (if end beg (fallback-bol))
- safe-end))
- (let* ((beg (fallback-bol))
- (end (fallback-eol beg)))
- (cons beg end))))))
+ (with-current-buffer buffer
+ (let ((line (min (max line 1)
+ (line-number-at-pos (point-max) 'absolute))))
+ (save-excursion
+ (goto-char (point-min))
+ (forward-line (1- line))
+ (cl-flet ((fallback-bol
+ () (progn (back-to-indentation) (point)))
+ (fallback-eol
+ (beg)
+ (progn
+ (end-of-line)
+ (skip-chars-backward " \t\f\t\n" beg)
+ (if (eq (point) beg)
+ (line-beginning-position 2)
+ (point)))))
+ (if (and col (cl-plusp col))
+ (let* ((beg (progn (forward-char (1- col))
+ (point)))
+ (sexp-end (ignore-errors (end-of-thing 'sexp)))
+ (end (or (and sexp-end
+ (not (= sexp-end beg))
+ sexp-end)
+ (ignore-errors (goto-char (1+ beg)))))
+ (safe-end (or end
+ (fallback-eol beg))))
+ (cons (if end beg (fallback-bol))
+ safe-end))
+ (let* ((beg (fallback-bol))
+ (end (fallback-eol beg)))
+ (cons beg end)))))))
(error (flymake-error "Invalid region line=%s col=%s" line col))))
(defvar flymake-diagnostic-functions nil
@@ -872,8 +879,17 @@ applied."
(flymake-goto-next-error (- (or n 1)) filter interactive))
-;;; Mode-line fanciness
+;;; Mode-line and menu
;;;
+(easy-menu-define flymake-menu flymake-mode-map "Flymake"
+ `("Flymake"
+ [ "Go to next error" flymake-goto-next-error t ]
+ [ "Go to previous error" flymake-goto-prev-error t ]
+ [ "Check now" flymake-start t ]
+ [ "Go to log buffer" flymake-switch-to-log-buffer t ]
+ "--"
+ [ "Turn off Flymake" flymake-mode t ]))
+
(defvar flymake--mode-line-format `(:eval (flymake--mode-line-format)))
(put 'flymake--mode-line-format 'risky-local-variable t)
@@ -903,18 +919,16 @@ applied."
"mouse-1: go to log buffer ")
keymap
,(let ((map (make-sparse-keymap)))
- (define-key map [mode-line mouse-1]
- (lambda (_event)
- (interactive "e")
- (switch-to-buffer "*Flymake log*")))
+ (define-key map [mode-line down-mouse-1]
+ flymake-menu)
map))
,@(pcase-let ((`(,ind ,face ,explain)
(cond ((null known)
`("?" mode-line "No known backends"))
(some-waiting
`("Wait" compilation-mode-line-run
- ,(format "Waiting for %s running backends"
- (length running))))
+ ,(format "Waiting for %s running backend(s)"
+ (length some-waiting))))
(all-disabled
`("!" compilation-mode-line-run
"All backends disabled"))
@@ -924,7 +938,12 @@ applied."
`((":"
(:propertize ,ind
face ,face
- help-echo ,explain)))))
+ help-echo ,explain
+ keymap
+ ,(let ((map (make-sparse-keymap)))
+ (define-key map [mode-line mouse-1]
+ 'flymake-switch-to-log-buffer)
+ map))))))
,@(unless (or all-disabled
(null known))
(cl-loop
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-26 7a1133f: Misc. minor adjustments to Flymake,
João Távora <=