]> git.eshelyaron.com Git - emacs.git/commitdiff
check-declare.el: Use compilation-style warnings
authorOleh Krehel <ohwoeowho@gmail.com>
Fri, 13 Feb 2015 13:59:31 +0000 (14:59 +0100)
committerOleh Krehel <ohwoeowho@gmail.com>
Wed, 25 Feb 2015 11:10:40 +0000 (12:10 +0100)
* lisp/emacs-lisp/check-declare.el (check-declare-warn): Add
  file-line-column info to the warning.

(check-declare-files): Make sure that `check-declare-warning-buffer'
is in `compilation-mode'. Make the order of the errors that same as in
the file. Add code to ensure that `first-error' will work properly.

lisp/ChangeLog
lisp/emacs-lisp/check-declare.el

index 078fc3e3a6b5760114d0c565b12082aaf11acc26..f1dd8db52986d86557eb40b008b6a08fd04b482c 100644 (file)
@@ -1,3 +1,10 @@
+2015-02-25  Oleh Krehel  <ohwoeowho@gmail.com>
+
+       * emacs-lisp/check-declare.el (check-declare-warn): Use
+       compilation-style warnings.
+       (check-declare-files): Make sure that
+       `check-declare-warning-buffer' is in `compilation-mode'.
+
 2015-02-25  Oleh Krehel  <ohwoeowho@gmail.com>
 
        * emacs-lisp/check-declare.el (check-declare-ext-errors): New
index 40ab03d83517aa67b5bbea44437e4195db10e377..c2639729fa9b09e89ef877d82db4bc2c8f5ba505 100644 (file)
@@ -260,12 +260,29 @@ Returned list has elements FNFILE (FILE ...)."
   "Warn that FILE made a false claim about FN in FNFILE.
 TYPE is a string giving the nature of the error.  Warning is displayed in
 `check-declare-warning-buffer'."
-  (display-warning 'check-declare
-                   (format "%s said `%s' was defined in %s: %s"
-                           (file-name-nondirectory file) fn
-                           (file-name-nondirectory fnfile)
-                           type)
-                   nil check-declare-warning-buffer))
+  (let ((warning-prefix-function
+         (lambda (level entry)
+           (let ((line 0)
+                 (col 0))
+             (insert
+              (with-current-buffer (find-file-noselect file)
+                (goto-char (point-min))
+                (when (re-search-forward
+                       (format "(declare-function[ \t\n]+%s" fn) nil t)
+                  (goto-char (match-beginning 0))
+                  (setq line (line-number-at-pos))
+                  (setq col (1+ (current-column))))
+                (format "%s:%d:%d:"
+                        (file-name-nondirectory file)
+                        line col))))
+           entry))
+        (warning-fill-prefix "    "))
+    (display-warning 'check-declare
+                     (format "%s said `%s' was defined in %s: %s"
+                             (file-name-nondirectory file) fn
+                             (file-name-nondirectory fnfile)
+                             type)
+                     nil check-declare-warning-buffer)))
 
 (defun check-declare-files (&rest files)
   "Check veracity of all `declare-function' statements in FILES.
@@ -278,13 +295,20 @@ Return a list of any errors found."
     (dolist (e (check-declare-sort alist))
       (if (setq err (check-declare-verify (car e) (cdr e)))
           (setq errlist (cons (cons (car e) err) errlist))))
+    (setq errlist (nreverse errlist))
     (if (get-buffer check-declare-warning-buffer)
         (kill-buffer check-declare-warning-buffer))
+    (with-current-buffer (get-buffer-create check-declare-warning-buffer)
+      (unless (derived-mode-p 'compilation-mode)
+        (compilation-mode))
+      (let ((inhibit-read-only t))
+        (insert "\f\n"))
+      (compilation-forget-errors))
     ;; Sort back again so that errors are ordered by the files
     ;; containing the declare-function statements.
     (dolist (e (check-declare-sort errlist))
-        (dolist (f (cdr e))
-          (check-declare-warn (car e) (cadr f) (car f) (nth 2 f))))
+      (dolist (f (cdr e))
+        (check-declare-warn (car e) (cadr f) (car f) (nth 2 f))))
     errlist))
 
 ;;;###autoload