[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#5126: 23.1; checkdoc-comment-style-hooks stops at first error

From: Kevin Ryde
Subject: bug#5126: 23.1; checkdoc-comment-style-hooks stops at first error
Date: Sat, 05 Dec 2009 09:44:42 +1100
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)

checkdoc-comment-style-hooks is run by checkdoc-file-comments-engine
with run-hook-with-args-until-success, which means if one of the hook
functions returns an error string (as described in the hook's docstring)
then no further functions are run.

I hoped the hook functions would instead run like the builtin checks of

    (setq err (or (some check)

so that all checks are always run, with an error reported if any one of
them reports an error.

Or alternately perhaps I misunderstand the docstring of
checkdoc-comment-style-hooks, and that a "problem discovered" means
something fatal and unrecoverable, or something, and that hook functions
should almost always return nil no matter what they find.

I threw down the few lines below for a hook run which returns the last
true value, but I'm not sure I like it much.  An alternative to picking
out a list of functions from a hook might be a
"run-hook-with-accumulator-function" or even a "map-hook" -- unless that
exists already.

(defun checkdoc-run-hooks-last-true (hookvar)
  "Run hooks in HOOKVAR and return the last true value."
  (let (ret)
    (dolist (func (checkdoc-hook-functions hookvar))
      (setq ret (or (funcall func) ret)))))

(defun checkdoc-hook-functions (hookvar)
  "Return a list of functions HOOKVAR should run.
HOOKVAR can be a single function or list of functions, the return
is always a list.  `t' in a buffer-local value means use the
global `default-value' at that point, and it can likewise be a
function or list."
  (let ((hooks (symbol-value hookvar)))
    (if (and hooks
             ;; same test as run_hook_with_args()
             (or (not (consp hooks))
                 (eq 'lambda (car hooks))))
        (list hooks) ;; single function listified

      ;; expand `t' to global value
      (apply 'append
             (mapcar (lambda (func)
                       (if (eq t func)
                           (let ((global (default-value hookvar)))
                             ;; same test as run_hook_with_args()
                             (if (or (not (consp global))
                                     (eq 'lambda (car global)))
                                 (list global)
                         (list func)))

In GNU Emacs 23.1.1 (i486-pc-linux-gnu, GTK+ Version 2.16.5)
 of 2009-09-14 on raven, modified by Debian
configured using `configure  '--build=i486-linux-gnu' '--host=i486-linux-gnu' 
'--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' 
'--localstatedir=/var/lib' '--infodir=/usr/share/info' 
'--mandir=/usr/share/man' '--with-pop=yes' 
 '--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars' 
'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -g 

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_AU
  value of $XMODIFIERS: nil
  locale-coding-system: iso-latin-1-unix
  default-enable-multibyte-characters: t

reply via email to

[Prev in Thread] Current Thread [Next in Thread]