Function: checkdoc-this-string-valid
checkdoc-this-string-valid is a byte-compiled function defined in
checkdoc.el.gz.
Signature
(checkdoc-this-string-valid &optional TAKE-NOTES)
Documentation
Return a message string if the current doc string is invalid.
Check for style only, such as the first line always being a complete sentence, whitespace restrictions, and making sure there are no hard-coded key-codes such as C-[char] or mouse-[number] in the comment. See the style guide in the Emacs Lisp manual for more details.
With a non-nil TAKE-NOTES, store all errors found in a warnings buffer, otherwise stop after the first error.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/checkdoc.el.gz
;; Profiler says this is not yet faster than just calling assoc
;;(defun checkdoc-word-in-alist-vector (word vector)
;; "Check to see if WORD is in the car of an element of VECTOR.
;;VECTOR must be sorted. The CDR should be a replacement. Since the
;;word list is getting bigger, it is time for a quick bisecting search."
;; (let ((max (length vector)) (min 0) i
;; (found nil) (fw nil))
;; (setq i (/ max 2))
;; (while (and (not found) (/= min max))
;; (setq fw (car (aref vector i)))
;; (cond ((string= word fw) (setq found (cdr (aref vector i))))
;; ((string< word fw) (setq max i))
;; (t (setq min i)))
;; (setq i (/ (+ max min) 2))
;; )
;; found))
;;; Checking engines
;;
(defun checkdoc-this-string-valid (&optional take-notes)
"Return a message string if the current doc string is invalid.
Check for style only, such as the first line always being a complete
sentence, whitespace restrictions, and making sure there are no
hard-coded key-codes such as C-[char] or mouse-[number] in the comment.
See the style guide in the Emacs Lisp manual for more details.
With a non-nil TAKE-NOTES, store all errors found in a warnings
buffer, otherwise stop after the first error."
;; Jump over comments between the last object and the doc string
(while (looking-at "[ \t\n]*;")
(forward-line 1)
(beginning-of-line)
(skip-chars-forward " \n\t"))
(let ((fp (checkdoc-defun-info))
(err nil))
(setq
err
;; * Every command, function, or variable intended for users to know
;; about should have a documentation string.
;;
;; * An internal variable or subroutine of a Lisp program might as well
;; have a documentation string. In earlier Emacs versions, you could
;; save space by using a comment instead of a documentation string,
;; but that is no longer the case.
(if (and (not (nth 1 fp)) ; not a variable
(or (nth 2 fp) ; is interactive
checkdoc-force-docstrings-flag) ;or we always complain
(not (eq (following-char) ?\"))) ; no doc string
;; Sometimes old code has comments where the documentation should
;; be. Let's see if we can find the comment, and offer to turn it
;; into documentation for them.
(let ((have-comment nil)
(comment-start ";")) ; in case it's not default
(condition-case nil
(progn
(forward-sexp -1)
(forward-sexp 1)
(skip-chars-forward "\n \t")
(setq have-comment (looking-at comment-start)))
(error nil))
(if have-comment
(if (or (eq checkdoc-autofix-flag
'automatic-then-never)
(checkdoc-y-or-n-p
"Convert comment to documentation?"))
(save-excursion
;; Our point is at the beginning of the comment!
;; Insert a quote, then remove the comment chars.
(insert "\"")
(let ((docstring-start-point (point)))
(while (looking-at comment-start)
(while (looking-at comment-start)
(delete-char 1))
(if (looking-at "[ \t]+")
(delete-region (match-beginning 0) (match-end 0)))
(forward-line 1)
(beginning-of-line)
(skip-chars-forward " \t")
(if (looking-at comment-start)
(progn
(beginning-of-line)
(zap-to-char 1 ?\;))))
(beginning-of-line)
(forward-char -1)
(insert "\"")
(forward-char -1)
;; quote any double-quote characters in the comment.
(while (search-backward "\"" docstring-start-point t)
(insert "\\"))
(if (eq checkdoc-autofix-flag 'automatic-then-never)
(setq checkdoc-autofix-flag 'never))))
(checkdoc-create-error
"You should convert this comment to documentation"
(point) (line-end-position)))
(when checkdoc--interactive-docstring-flag
(checkdoc-create-error
(if (nth 2 fp)
"All interactive functions should have documentation"
"All variables and subroutines might as well have a \
documentation string")
(point) (+ (point) 1) t))))))
(if (and (not err) (= (following-char) ?\"))
(with-syntax-table checkdoc-syntax-table
(checkdoc-this-string-valid-engine fp take-notes))
err)))