From: Stefan Kangas Date: Tue, 21 Sep 2021 17:18:50 +0000 (+0200) Subject: Add new command 'checkdoc-dired' X-Git-Tag: emacs-28.0.90~764 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1c73c0b33a9b10cdae1316ad9e0ba861af454b66;p=emacs.git Add new command 'checkdoc-dired' * lisp/emacs-lisp/checkdoc.el (checkdoc-dired): New command. (checkdoc--dired-skip-lines-re): New constant. --- diff --git a/etc/NEWS b/etc/NEWS index 00f46b3592b..d5b6919d6df 100644 --- 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]") diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index 07ae8551917..d7975086878 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -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 ;;