]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new command 'checkdoc-dired'
authorStefan Kangas <stefan@marxist.se>
Tue, 21 Sep 2021 17:18:50 +0000 (19:18 +0200)
committerStefan Kangas <stefan@marxist.se>
Tue, 21 Sep 2021 18:02:19 +0000 (20:02 +0200)
* lisp/emacs-lisp/checkdoc.el (checkdoc-dired): New command.
(checkdoc--dired-skip-lines-re): New constant.

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

index 00f46b3592b436dc3f42325a3c2a9d702aac6753..d5b6919d6dfb546bb57325423bfb12a057ff8d30 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2811,6 +2811,10 @@ your code to be edited with an Emacs older than version 27.1.
 In addition to verifying the format of the prompt for 'y-or-n-p',
 checkdoc will now check the format of 'yes-or-no-p'.
 
+---
+*** New command 'checkdoc-dired'.
+This can be used to run checkdoc on files from a Dired buffer.
+
 ---
 *** No longer checks for "A-" modifiers.
 Checkdoc recommends usage of command substitutions ("\\[foo-command]")
index 07ae8551917976900a8c68c932a4e8de77ec6217..d79750868786fce4480a7ffc2f2bcbfb75d904dc 100644 (file)
@@ -1070,6 +1070,39 @@ space at the end of each line."
         (if (called-interactively-p 'interactive)
             (message "Checkdoc: done."))))))
 
+(defconst checkdoc--dired-skip-lines-re
+  (rx (or (seq bol
+               (or ";; Generated from Unicode data files by unidat"
+                   ";; This file is automatically generated from"
+                   ";;   Generated by the command "))
+          ".el --- automatically extracted autoloads  -*- lexical-binding: t -*-"
+          ";;; lisp/trampver.el.  Generated from trampver.el.in by configure."))
+  "Regexp that when it matches tells `checkdoc-dired' to skip a file.")
+
+(defun checkdoc-dired (files)
+  "In Dired, run `checkdoc' on marked files.
+Skip anything that doesn't have the Emacs Lisp library file
+extension (\".el\").
+When called from Lisp, FILES is a list of filenames."
+  (interactive
+   (list
+    (delq nil
+          (mapcar
+           ;; skip anything that doesn't look like an Emacs Lisp library
+           (lambda (f) (if (equal (file-name-extension f) "el") f nil))
+           (nreverse (dired-map-over-marks (dired-get-filename) nil)))))
+   dired-mode)
+  (if (null files)
+      (error "No files to run checkdoc on")
+    (save-window-excursion
+      (dolist (fil files)
+        (find-file fil)
+        (unless (and
+                 (goto-char (point-min))
+                 (re-search-forward checkdoc--dired-skip-lines-re nil t))
+          (checkdoc)))))
+  (message "checkdoc-dired: Successfully checked %d files" (length files)))
+
 ;;; Ispell interface for forcing a spell check
 ;;