]> git.eshelyaron.com Git - emacs.git/commitdiff
checkdoc: Relax footer line check for recent Emacs
authorStefan Kangas <stefankangas@gmail.com>
Sat, 6 Jul 2024 15:36:30 +0000 (17:36 +0200)
committerEshel Yaron <me@eshelyaron.com>
Sun, 7 Jul 2024 13:16:58 +0000 (15:16 +0200)
* lisp/emacs-lisp/checkdoc.el (checkdoc-file-comments-engine):
Don't require a footer line unless 'lm-package-needs-footer-line'
returns true.

(cherry picked from commit d826240fa56230ef1561d5b4807284ce98a8c6b6)

etc/NEWS
lisp/emacs-lisp/checkdoc.el

index 3d2b86cfb6aad8abec69f8b315ba74df72562a7d..ba58fa7b319f203c9a265202a1bdd848da718bfd 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -70,6 +70,26 @@ Advanced" node in the EWW manual.
 By customizing 'shr-image-zoom-levels', you can change the list of zoom
 levels that SHR cycles through when calling 'shr-zoom-image'.
 
+** Emacs Lisp mode
+
+---
+*** Checkdoc no longer warns about missing footer lines in some cases.
+Emacs Lisp libraries have traditionally ended with a footer line
+(sometimes referred to as "terminating comment").  Their purpose was to
+easily detect files that had been truncated in transit on ancient and
+less reliable connections:
+
+    ;; some-cool-package.el ends here
+
+'checkdoc' will no longer warn if that line is missing for packages that
+explicitly only support Emacs 30.1 or later, as specified in the
+"Package-Requires" header.  The reason for keeping the warning for
+packages that support earlier versions of Emacs is that package.el in
+those versions can't install packages where that line is missing.
+
+This change affects both 'M-x checkdoc' and the corresponding flymake
+backend.
+
 \f
 * New Modes and Packages in Emacs 31.1
 
index b0c812f9533a197286679f649d6dbce679ebb4b3..bdb4896a6d1f8e8bbcdffff9f776735c74bbb22a 100644 (file)
@@ -2516,21 +2516,30 @@ Code:, and others referenced in the style guide."
         ;; * Library footer
        (save-excursion
          (goto-char (point-max))
-         (if (not (re-search-backward
-                    ;; This should match the requirement in
-                    ;; `package-buffer-info'.
-                    (concat "^;;; " (regexp-quote (concat fn fe)) " ends here")
-                   nil t))
-              (if (checkdoc-y-or-n-p "No identifiable footer!  Add one?")
-                 (progn
-                   (goto-char (point-max))
-                   (insert "\n(provide '" fn ")\n\n;;; " fn fe " ends here\n"))
-               (checkdoc-create-error
-                (format "The footer should be: (provide '%s)\\n;;; %s%s ends here"
-                        fn fn fe)
-                 ;; The buffer may be empty.
-                (max (point-min) (1- (point-max)))
-                 (point-max)))))
+          (let* ((footer-line (lm-package-needs-footer-line)))
+            (if (not (re-search-backward
+                      ;; This should match the requirement in
+                      ;; `package-buffer-info'.
+                      (if footer-line
+                          (concat "^;;; " (regexp-quote (concat fn fe)) " ends here")
+                        (concat "\n(provide '" fn ")\n"))
+                      nil t))
+                (if (checkdoc-y-or-n-p (if footer-line
+                                   "No identifiable footer!  Add one?"
+                                 "No `provide' statement!  Add one?"))
+                    (progn
+                      (goto-char (point-max))
+                      (insert (if footer-line
+                                  (concat "\n(provide '" fn ")\n\n;;; " fn fe " ends here\n")
+                                (concat "\n(provide '" fn ")\n"))))
+                  (checkdoc-create-error
+                   (if footer-line
+                       (format "The footer should be: (provide '%s)\\n;;; %s%s ends here"
+                               fn fn fe)
+                     (format "The footer should be: (provide '%s)\\n" fn))
+                   ;; The buffer may be empty.
+                   (max (point-min) (1- (point-max)))
+                   (point-max))))))
        err))
       ;; The below checks will not return errors if the user says NO