From 122bcd7ef24fbf416f339dc093d0bf59bbb1ed5b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 29 Nov 2007 04:23:49 +0000 Subject: (check-declare-locate, check-declare-verify): Handle `external' files. (check-declare-errmsg): New function. (check-declare-verify, check-declare-file, check-declare-directory): Use check-declare-errmsg to report the number of problems. --- lisp/emacs-lisp/check-declare.el | 68 +++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 19 deletions(-) diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el index d98b59d774..5d2ee740e4 100644 --- a/lisp/emacs-lisp/check-declare.el +++ b/lisp/emacs-lisp/check-declare.el @@ -48,22 +48,31 @@ Expands files with a \".c\" extension relative to the Emacs \"src/\" directory. Otherwise, `locate-library' searches for FILE. If that fails, expands FILE relative to BASEFILE's directory part. -The returned file might not exist." - (if (string-equal "c" (file-name-extension file)) - (expand-file-name file (expand-file-name "src" source-directory)) - (let ((tfile (locate-library (file-name-nondirectory file)))) - (if tfile - (progn - (setq tfile (replace-regexp-in-string "\\.elc\\'" ".el" tfile)) - (if (and (not (file-exists-p tfile)) - (file-exists-p (concat tfile ".gz"))) - (concat tfile ".gz") - tfile)) - (setq tfile (expand-file-name file (file-name-directory basefile))) - (if (or (file-exists-p tfile) - (string-match "\\.el\\'" tfile)) - tfile - (concat tfile ".el")))))) +The returned file might not exist. If FILE has an \"ext:\" prefix, so does +the result." + (let ((ext (string-match "^ext:" file)) + tfile) + (if ext + (setq file (substring file 4))) + (setq file + (if (string-equal "c" (file-name-extension file)) + (expand-file-name file (expand-file-name "src" source-directory)) + (if (setq tfile (locate-library (file-name-nondirectory file))) + (progn + (setq tfile + (replace-regexp-in-string "\\.elc\\'" ".el" tfile)) + (if (and (not (file-exists-p tfile)) + (file-exists-p (concat tfile ".gz"))) + (concat tfile ".gz") + tfile)) + (setq tfile (expand-file-name file + (file-name-directory basefile))) + (if (or (file-exists-p tfile) + (string-match "\\.el\\'" tfile)) + tfile + (concat tfile ".el"))))) + (if ext (concat "ext:" file) + file))) (defun check-declare-scan (file) "Scan FILE for `declare-function' calls. @@ -93,6 +102,19 @@ ARGLIST may be absent. This claims that FNFILE defines FN, with ARGLIST." (message "%sdone" m) alist)) +(defun check-declare-errmsg (errlist &optional full) + "Return a string with the number of errors in ERRLIST, if any. +Normally just counts the number of elements in ERRLIST. +With optional argument FULL, sums the number of elements in each element." + (if errlist + (let ((l (length errlist))) + (when full + (setq l 0) + (dolist (e errlist) + (setq l (1+ l)))) + (format "%d problem%s found" l (if (= l 1) "" "s"))) + "OK")) + (autoload 'byte-compile-arglist-signature "bytecomp") (defun check-declare-verify (fnfile fnlist) @@ -104,8 +126,11 @@ found to be true, otherwise a list of errors with elements of the form \(FILE FN TYPE), where TYPE is a string giving details of the error." (let ((m (format "Checking %s..." fnfile)) (cflag (string-equal "c" (file-name-extension fnfile))) + (ext (string-match "^ext:" fnfile)) re fn sig siglist arglist type errlist minargs maxargs) (message "%s" m) + (if ext + (setq fnfile (substring fnfile 4))) (if (file-exists-p fnfile) (with-temp-buffer (insert-file-contents fnfile) @@ -185,7 +210,12 @@ ine-\\(?:derived\\|generic\\|\\(?:global\\(?:ized\\)?-\\)?minor\\)-mode\ "arglist mismatch"))))) (when type (setq errlist (cons (list (car e) (cadr e) type) errlist)))) - (message "%s%s" m (if errlist "problems found" "OK")) + (message "%s%s" m + (if (or re (not ext)) + (check-declare-errmsg errlist) + (prog1 + "skipping external file" + (setq errlist nil)))) errlist)) (defun check-declare-sort (alist) @@ -244,7 +274,7 @@ See `check-declare-directory' for more information." errlist) (message "%s" m) (setq errlist (check-declare-files file)) - (message "%s%s" m (if errlist "problems found" "OK")) + (message "%s%s" m (check-declare-errmsg errlist)) errlist)) ;;;###autoload @@ -267,7 +297,7 @@ described in the documentation of `declare-function'." (message "%s%d found" m2 (length files)) (when files (setq errlist (apply 'check-declare-files files)) - (message "%s%s" m (if errlist "problems found" "OK")) + (message "%s%s" m (check-declare-errmsg errlist t)) errlist))) (provide 'check-declare) -- cgit v1.2.3