checkdoc: Flag formatting mistakes in warnings

* lisp/emacs-lisp/checkdoc.el (checkdoc-message-text-next-string)
(checkdoc-message-text-engine): Flag formatting mistakes in warnings.
(checkdoc--warning-function-re): New variable.
This commit is contained in:
Stefan Kangas 2024-07-07 13:37:55 +02:00
parent 1883603dfc
commit e738c387da
2 changed files with 22 additions and 2 deletions

View file

@ -90,6 +90,11 @@ those versions can't install packages where that line is missing.
This change affects both 'M-x checkdoc' and the corresponding flymake
backend.
---
*** Checkdoc will now flag incorrect formatting in warnings.
This affects calls to 'warn', 'lwarn', 'display-warning', and
'message-box'.
* New Modes and Packages in Emacs 31.1

View file

@ -2547,6 +2547,11 @@ The default boundary is the entire buffer."
(setq e (checkdoc-message-text-engine type)))
e))
(defvar checkdoc--warning-function-re
(rx (or "display-warning" "org-display-warning"
"warn" "lwarn"
"message-box")))
(defun checkdoc-message-text-next-string (end)
"Move cursor to the next checkable message string after point.
Return the message classification.
@ -2559,6 +2564,7 @@ Argument END is the maximum bounds to search in."
(group
(or (seq (* (or wordchar (syntax symbol)))
"error")
(regexp checkdoc--warning-function-re)
(seq (* (or wordchar (syntax symbol)))
(or "y-or-n-p" "yes-or-no-p")
(? "-with-timeout"))
@ -2566,8 +2572,13 @@ Argument END is the maximum bounds to search in."
(+ (any "\n\t ")))
end t))
(let* ((fn (match-string 1))
(type (cond ((string-match "error" fn)
'error)
(type (cond ((string-match "error" fn)
'error)
((string-match (rx bos
(regexp checkdoc--warning-function-re)
eos)
fn)
'warning)
(t 'y-or-n-p))))
(if (string-match "checkdoc-autofix-ask-replace" fn)
(progn (forward-sexp 2)
@ -2645,6 +2656,10 @@ Argument TYPE specifies the type of question, such as `error' or `y-or-n-p'."
(setq type
(cond ((looking-at "(error")
'error)
((looking-at
(rx "(" (regexp checkdoc--warning-function-re)
(syntax whitespace)))
'warning)
(t 'y-or-n-p)))))
(let ((case-fold-search nil))
(or