From e738c387dac674092eab4b5b32efd9fb6726dee6 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Sun, 7 Jul 2024 13:37:55 +0200 Subject: [PATCH] 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. --- etc/NEWS | 5 +++++ lisp/emacs-lisp/checkdoc.el | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index ba58fa7b319..0c9eb82518a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -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 diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index 6eb9fc058f6..6355569b16f 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -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