[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] scratch/flymake-refactor 87191ab 51/52: Hook Flymake onto
From: |
João Távora |
Subject: |
[Emacs-diffs] scratch/flymake-refactor 87191ab 51/52: Hook Flymake onto proper checkdoc and byte-compile interfaces |
Date: |
Sun, 1 Oct 2017 12:40:52 -0400 (EDT) |
branch: scratch/flymake-refactor
commit 87191abad3ea88a6745fa4acf9308171bffe2f8c
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
Hook Flymake onto proper checkdoc and byte-compile interfaces
The interfaces in bytecomp.el and checkdoc.el are mostly boilerplate,
with little knowledge of actual internals or thought given to the
usefulness of said interfaces in contexts other than Flymake's.
* lisp/emacs-lisp/bytecomp.el
(byte-compile-log-warning-function): New variable.
(byte-compile-log-warning): Use it.
(byte-compile--log-warning-for-byte-compile): New function.
* lisp/emacs-lisp/checkdoc.el
(checkdoc-create-error-function): New variable.
(checkdoc-create-error): Use it.
(checkdoc--create-error-for-checkdoc): New function.xo
* lisp/progmodes/flymake-elisp.el (flymake-elisp--checkdoc-1):
Use checkdoc-create-error-function.
(flymake-elisp--batch-byte-compile): Use
byte-compile-log-warning-function.
---
lisp/emacs-lisp/bytecomp.el | 22 ++++++++++++++++++++++
lisp/emacs-lisp/checkdoc.el | 19 ++++++++++++++++---
lisp/progmodes/flymake-elisp.el | 38 +++++++++++++++++++-------------------
3 files changed, 57 insertions(+), 22 deletions(-)
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 9e14c91..09e70f0 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -1183,7 +1183,29 @@ Each function's symbol gets added to
`byte-compile-noruntime-functions'."
(compilation-forget-errors)
pt))))
+(defvar byte-compile-log-warning-function
+ #'byte-compile--log-warning-for-byte-compile
+ "Function called when encountering a warning or error.
+Called with arguments (STRING POSITION FILL LEVEL). STRING is a
+message describing the problem. POSITION is a buffer position
+where the problem was detected. FILL is a prefix as in
+`warning-fill-prefix'. LEVEL is the level of the
+problem (`:warning' or `:error'). POSITION, FILL and LEVEL may be
+nil.")
+
(defun byte-compile-log-warning (string &optional fill level)
+ "Log a byte-compilation warning.
+STRING, FILL and LEVEL are as described in
+`byte-compile-log-warning-function', which see."
+ (funcall byte-compile-log-warning-function
+ string byte-compile-last-position
+ fill
+ level))
+
+(defun byte-compile--log-warning-for-byte-compile (string &optional
+ _position
+ fill
+ level)
"Log a message STRING in `byte-compile-log-buffer'.
Also log the current function and file if not already done. If
FILL is non-nil, set `warning-fill-prefix' to four spaces. LEVEL
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index 1d6fdfa..a63a93c 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -1146,14 +1146,27 @@ Prefix argument is the same as for `checkdoc-defun'"
;; features and behaviors, so we need some ways of specifying
;; them, and making them easier to use in the wacked-out interfaces
;; people are requesting
-(defun checkdoc-create-error (text start end &optional unfixable)
- "Used to create the return error text returned from all engines.
+(defvar checkdoc-create-error-function #'checkdoc--create-error-for-checkdoc
+ "Function called when Checkdoc encounters an error.
+Should accept as arguments (TEXT START END &optional UNFIXABLE).
+
TEXT is the descriptive text of the error. START and END define the region
it is sensible to highlight when describing the problem.
Optional argument UNFIXABLE means that the error has no auto-fix available.
A list of the form (TEXT START END UNFIXABLE) is returned if we are not
-generating a buffered list of errors."
+generating a buffered list of errors.")
+
+(defun checkdoc-create-error (text start end &optional unfixable)
+ "Used to create the return error text returned from all engines.
+TEXT, START, END and UNFIXABLE conform to
+`checkdoc-create-error-function', which see."
+ (funcall checkdoc-create-error-function text start end unfixable))
+
+(defun checkdoc--create-error-for-checkdoc (text start end &optional unfixable)
+ "Create an error for Checkdoc.
+TEXT, START, END and UNFIXABLE conform to
+`checkdoc-create-error-function', which see."
(if checkdoc-generate-compile-warnings-flag
(progn (checkdoc-error start text)
nil)
diff --git a/lisp/progmodes/flymake-elisp.el b/lisp/progmodes/flymake-elisp.el
index b42767c..b433dc2 100644
--- a/lisp/progmodes/flymake-elisp.el
+++ b/lisp/progmodes/flymake-elisp.el
@@ -32,18 +32,18 @@
(defun flymake-elisp--checkdoc-1 ()
"Do actual work for `flymake-elisp-checkdoc'."
(let (collected)
- (cl-letf (((symbol-function 'checkdoc-create-error)
- (lambda (text start end &optional unfixable)
- (push (list text start end unfixable) collected)
- nil)))
- (let* ((checkdoc-autofix-flag nil)
- (checkdoc-generate-compile-warnings-flag nil)
- (buf (generate-new-buffer " *checkdoc-temp*"))
- (checkdoc-diagnostic-buffer buf))
- (unwind-protect
- (save-excursion
- (checkdoc-current-buffer t))
- (kill-buffer buf))))
+ (let* ((checkdoc-create-error-function
+ (lambda (text start end &optional unfixable)
+ (push (list text start end unfixable) collected)
+ nil))
+ (checkdoc-autofix-flag nil)
+ (checkdoc-generate-compile-warnings-flag nil)
+ (buf (generate-new-buffer " *checkdoc-temp*"))
+ (checkdoc-diagnostic-buffer buf))
+ (unwind-protect
+ (save-excursion
+ (checkdoc-current-buffer t))
+ (kill-buffer buf)))
collected))
;;;###autoload
@@ -165,14 +165,14 @@ Runs in a batch-mode Emacs. Interactively use variable
(byte-compile-dest-file-function
(lambda (source)
(setq dummy-elc-file (make-temp-file (file-name-nondirectory
source)))))
- (collected))
+ (collected)
+ (byte-compile-log-warning-function
+ (lambda (string &optional position fill level)
+ (push (list string position fill level)
+ collected)
+ t)))
(unwind-protect
- (cl-letf (((symbol-function 'byte-compile-log-warning)
- (lambda (string &optional fill level)
- (push (list string byte-compile-last-position fill level)
- collected)
- t)))
- (byte-compile-file file))
+ (byte-compile-file file)
(ignore-errors
(delete-file dummy-elc-file)
(kill-buffer byte-compile-log-buffer)))
- [Emacs-diffs] scratch/flymake-refactor 9329265 40/52: Treat flymake errors as just another type of diagnostic, (continued)
- [Emacs-diffs] scratch/flymake-refactor 9329265 40/52: Treat flymake errors as just another type of diagnostic, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 38c7d4f 41/52: Remove old flymake-display-err-menu-for-current-line, it's useless, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 7a22358 34/52: A couple of new flymake backends for emacs-lisp-mode, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 9d93d46 42/52: New flymake fringe bitmaps, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 4e2cbaa 32/52: Fancy mode-line construct for flymake-mode, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 54ec5eb 47/52: Improve use of flymake-no-changes-timeout, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 95c126c 46/52: flymake-diagnostic-types-alist now uses flymake-category, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 1d58e32 39/52: Fix flymake-wrap-around for buffers with no errors, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 1116aa7 43/52: * lisp/progmodes/flymake-ui.el (flymake-mode-map): Bind "M-n" and "M-p", João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 7d3d3d3 38/52: Fix flymake problems when checking C header files, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 87191ab 51/52: Hook Flymake onto proper checkdoc and byte-compile interfaces,
João Távora <=
- [Emacs-diffs] scratch/flymake-refactor 3b6c736 37/52: Start rewriting flymake manual, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 51533c3 49/52: Capitalize "Flymake" in docstrings and comments, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor fea31e2 07/52: Rename many flymake-proc.el symbols with internal "--" prefixes, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 0b46ab8 45/52: Make flymake-diagnostic-functions a special hook, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 51a2b7b 52/52: Integrate elisp checkers into elisp-mode.el directly, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 26f1e0c 27/52: Replace flymake-backends with flymake-diagnostic-functions, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 6bf3a42 06/52: Move symbols in flymake-proc.el to separate namespace, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 22c4b9b 44/52: First batch of minor flymake cleanup agreed to with Stefan, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor b327de6 48/52: Flymake backends can report multiple times per check, João Távora, 2017/10/01
- [Emacs-diffs] scratch/flymake-refactor 7f46f95 50/52: Resolve some dependency yuckiness in flymake.el, João Távora, 2017/10/01