; time-stamp: Reformat some long doc strings for clarity.

* lisp/time-stamp.el (time-stamp-format, time-stamp-pattern): Reformat
doc strings for clarity.
(group time-stamp): is a subgroup of "files", not "data".
The "data" group seems to be for editing non-text files.
* test/lisp/time-stamp-tests.el: Fix tense of some doc strings.
This commit is contained in:
Stephen Gildea 2024-11-01 09:32:27 -07:00
parent 872be2bb5f
commit ffda8dfe84
2 changed files with 69 additions and 66 deletions

View file

@ -5,8 +5,8 @@
;; This file is part of GNU Emacs.
;; Maintainer: Stephen Gildea <stepheng+emacs@gildea.com>
;; Keywords: tools
;; Author: Stephen Gildea <stepheng+emacs@gildea.com>
;; Keywords: files, tools
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
@ -25,20 +25,19 @@
;; A template in a file can be updated with a new time stamp when
;; you save the file. For example:
;; static char *ts = "sdmain.c Time-stamp: <2020-04-18 14:10:21 gildea>";
;; static char *ts = "sdmain.c Time-stamp: <2024-04-18 14:10:21 gildea>";
;; To use time-stamping, add this line to your init file:
;; (add-hook 'before-save-hook 'time-stamp)
;; Now any time-stamp templates in your files will be updated automatically.
;; See the documentation for the functions `time-stamp'
;; and `time-stamp-toggle-active' for details.
;; See the documentation for the function `time-stamp' for details.
;;; Code:
(defgroup time-stamp nil
"Maintain last change time stamps in files edited by Emacs."
:group 'data
:group 'files
:group 'extensions)
@ -47,34 +46,34 @@
This is a string, used verbatim except for character sequences beginning
with %, as follows.
%:A weekday name: `Monday' %#A gives uppercase: `MONDAY'
%3a abbreviated weekday: `Mon' %#a gives uppercase: `MON'
%:B month name: `January' %#B gives uppercase: `JANUARY'
%3b abbreviated month: `Jan' %#b gives uppercase: `JAN'
%02d day of month
%02H 24-hour clock hour
%02I 12-hour clock hour
%02m month number
%02M minute
%#p `am' or `pm' %P gives uppercase: `AM' or `PM'
%02S seconds
%w day number of week, Sunday is 0
%02y 2-digit year %Y 4-digit year
%Z time zone name: `EST' %#Z gives lowercase: `est'
%5z time zone offset: `-0500' (since Emacs 27; see note below)
%:A weekday name: `Monday' %#A gives uppercase: `MONDAY'
%3a abbreviated weekday: `Mon' %#a gives uppercase: `MON'
%:B month name: `January' %#B gives uppercase: `JANUARY'
%3b abbreviated month: `Jan' %#b gives uppercase: `JAN'
%02d day of month
%02H 24-hour clock hour
%02I 12-hour clock hour
%02m month number
%02M minute
%#p `am' or `pm' %P gives uppercase: `AM' or `PM'
%02S seconds
%w day number of week, Sunday is 0
%02y 2-digit year %Y 4-digit year
%Z time zone name: `EST' %#Z gives lowercase: `est'
%5z time zone offset: `-0500' (since Emacs 27; see note below)
Non-date items:
%% a literal percent character: `%'
%f file name without directory %F absolute file name
%l login name %L full name of logged-in user
%q unqualified host name %Q fully-qualified host name
%h mail host name
%% a literal percent character: `%'
%f file name without directory %F absolute file name
%l login name %L full name of logged-in user
%q unqualified host name %Q fully-qualified host name
%h mail host name
Decimal digits between the % and the type character specify the
field width. Strings are truncated on the right.
A leading zero in the field width zero-fills a number.
For example, to get the format used by the `date' command,
For example, to get a common format used by the `date' command,
use \"%3a %3b %2d %02H:%02M:%02S %Z %Y\".
The values of non-numeric formatted items depend on the locale
@ -266,20 +265,22 @@ If you were to change `time-stamp-pattern', `time-stamp-line-limit',
`time-stamp-start', or `time-stamp-end' in your init file, you
would be incompatible with other people's files.
See also `time-stamp-count' and `time-stamp-inserts-lines'.
Examples:
\"-10/\" (sets only `time-stamp-line-limit')
;; time-stamp-pattern: \"-10/\"
(sets only `time-stamp-line-limit')
\"-9/^Last modified: %%$\" (sets `time-stamp-line-limit',
`time-stamp-start' and `time-stamp-end')
// time-stamp-pattern: \"-9/^Last modified: %%$\"
(sets `time-stamp-line-limit', `time-stamp-start' and `time-stamp-end')
\"@set Time-stamp: %:B %1d, %Y$\" (sets `time-stamp-start',
`time-stamp-format' and `time-stamp-end')
@c time-stamp-pattern: \"@set Time-stamp: %:B %1d, %Y$\"
(sets `time-stamp-start', `time-stamp-format' and `time-stamp-end')
\"newcommand{\\\\\\\\timestamp}{%%}\" (sets `time-stamp-start'
and `time-stamp-end')")
%% time-stamp-pattern: \"newcommand{\\\\\\\\timestamp}{%%}\"
(sets `time-stamp-start'and `time-stamp-end')
See also `time-stamp-count' and `time-stamp-inserts-lines'.")
;;;###autoload(put 'time-stamp-pattern 'safe-local-variable 'stringp)
@ -287,8 +288,8 @@ and `time-stamp-end')")
;;;###autoload
(defun time-stamp ()
"Update any time stamp string(s) in the buffer.
This function looks for a time stamp template and updates it with
the current date, time, and/or other info.
Look for a time stamp template and update it with the current date,
time, and/or other info.
The template, which you manually create on one of the first 8 lines
of the file before running this function, by default can look like
@ -297,7 +298,7 @@ one of the following (your choice):
Time-stamp: \" \"
This function writes the current time between the brackets or quotes,
by default formatted like this:
Time-stamp: <2020-08-07 17:10:21 gildea>
Time-stamp: <2024-08-07 17:10:21 gildea>
Although you can run this function manually to update a time stamp
once, usually you want automatic time stamp updating.
@ -311,7 +312,7 @@ To enable automatic time-stamping for only a specific file, add
this line to a local variables list near the end of the file:
eval: (add-hook \\='before-save-hook \\='time-stamp nil t)
If the file has no time-stamp template, this function does nothing.
If the file has no time stamp template, this function does nothing.
You can set `time-stamp-pattern' in a file's local variables list
to customize the information in the time stamp and where it is written.
@ -419,7 +420,7 @@ Returns the end point, which is where `time-stamp' begins the next search."
(cond
((not time-stamp-active)
(if time-stamp-warn-inactive
;; don't signal an error in a write-file-hook
;; don't signal an error in a hook
(progn
(message "Warning: time-stamp-active is off; did not time-stamp buffer.")
(sit-for 1))))
@ -801,6 +802,8 @@ Suggests replacing OLD-FORM with NEW-FORM."
;; - The %_z format always outputs seconds, allowing all added padding
;; to be spaces. Without this rule, there would be no way to
;; request seconds that worked for both 2- and 3-digit hours.
;; (We consider 3-digit hours not because such offsets are in use but
;; instead to guide our design toward consistency and extensibility.)
;; - Conflicting options are rejected, lest users depend
;; on incidental behavior.
;;
@ -843,7 +846,7 @@ Suggests replacing OLD-FORM with NEW-FORM."
colon-count
field-width
offset-secs)
"Formats a time offset according to a %z variation.
"Format a time offset according to a %z variation.
With no flags, the output includes hours and minutes: +-HHMM
unless there is a non-zero seconds part, in which case the seconds

View file

@ -535,7 +535,7 @@
(should (equal (time-stamp-string "%#Z" ref-time1) utc-abbr)))))
(ert-deftest time-stamp-format-time-zone-offset ()
"Tests time-stamp legacy format %z and spot tests of new offset format %5z."
"Test time-stamp legacy format %z and spot-test new offset format %5z."
(with-time-stamp-test-env
(let ((utc-abbr (format-time-string "%#Z" ref-time1 t)))
;; documented 1995-2019, warned since 2019, will change
@ -617,7 +617,7 @@
(should (equal (time-stamp-string "No percent" ref-time1) "No percent"))))
(ert-deftest time-stamp-format-multiple-conversions ()
"Tests that multiple %-conversions are independent."
"Test that multiple %-conversions are independent."
(with-time-stamp-test-env
(let ((Mon (format-time-string "%a" ref-time1 t))
(MON (format-time-string "%^a" ref-time1 t))
@ -719,7 +719,7 @@
;;;; Setup for tests of time offset formatting with %z
(defun formatz (format zone)
"Uses FORMAT to format the offset of ZONE, returning the result.
"Use FORMAT to format the offset of ZONE, returning the result.
FORMAT must be time format \"%z\" or some variation thereof.
ZONE is as the ZONE argument of the `format-time-string' function.
This function is called by 99% of the `time-stamp' \"%z\" unit tests."
@ -733,7 +733,7 @@ This function is called by 99% of the `time-stamp' \"%z\" unit tests."
)))
(defun format-time-offset (format offset-secs)
"Uses FORMAT to format the time zone represented by OFFSET-SECS.
"Use FORMAT to format the time zone represented by OFFSET-SECS.
FORMAT must be time format \"%z\" or some variation thereof.
This function is a wrapper around `time-stamp-formatz-from-parsed-options'
and is called by some low-level `time-stamp' \"%z\" unit tests."
@ -765,20 +765,20 @@ and is called by some low-level `time-stamp' \"%z\" unit tests."
trailing-string)))
(defun fz-make+zone (h &optional m s)
"Creates a non-negative offset."
"Create a non-negative offset."
(declare (pure t))
(let ((m (or m 0))
(s (or s 0)))
(+ (* 3600 h) (* 60 m) s)))
(defun fz-make-zone (h &optional m s)
"Creates a negative offset. The arguments are all non-negative."
"Create a negative offset. The arguments are all non-negative."
(declare (pure t))
(- (fz-make+zone h m s)))
(defmacro formatz-should-equal (zone expect)
"Formats ZONE and compares it to EXPECT.
Uses the free variables `form-string' and `pattern-mod'.
"Format ZONE and compares it to EXPECT.
Use the free variables `form-string' and `pattern-mod'.
The functions in `pattern-mod' are composed left to right."
(declare (debug t))
`(let ((result ,expect))
@ -790,7 +790,7 @@ The functions in `pattern-mod' are composed left to right."
;; for hours, minutes, and seconds.
(defun formatz-hours-exact-helper (form-string pattern-mod)
"Tests format %z with whole hours."
"Test format %z with whole hours."
(formatz-should-equal (fz-make+zone 0) "+00") ;0 sign always +, both digits
(formatz-should-equal (fz-make+zone 10) "+10")
(formatz-should-equal (fz-make-zone 10) "-10")
@ -801,7 +801,7 @@ The functions in `pattern-mod' are composed left to right."
)
(defun formatz-nonzero-minutes-helper (form-string pattern-mod)
"Tests format %z with whole minutes."
"Test format %z with whole minutes."
(formatz-should-equal (fz-make+zone 0 30) "+00:30") ;has hours even though 0
(formatz-should-equal (fz-make-zone 0 30) "-00:30")
(formatz-should-equal (fz-make+zone 0 4) "+00:04")
@ -819,7 +819,7 @@ The functions in `pattern-mod' are composed left to right."
)
(defun formatz-nonzero-seconds-helper (form-string pattern-mod)
"Tests format %z with non-0 seconds."
"Test format %z with non-0 seconds."
;; non-0 seconds are always included
(formatz-should-equal (fz-make+zone 0 0 50) "+00:00:50")
(formatz-should-equal (fz-make-zone 0 0 50) "-00:00:50")
@ -848,7 +848,7 @@ The functions in `pattern-mod' are composed left to right."
)
(defun formatz-hours-big-helper (form-string pattern-mod)
"Tests format %z with hours that don't fit in two digits."
"Test format %z with hours that don't fit in two digits."
(formatz-should-equal (fz-make+zone 101) "+101:00")
(formatz-should-equal (fz-make+zone 123 10) "+123:10")
(formatz-should-equal (fz-make-zone 123 10) "-123:10")
@ -857,7 +857,7 @@ The functions in `pattern-mod' are composed left to right."
)
(defun formatz-seconds-big-helper (form-string pattern-mod)
"Tests format %z with hours greater than 99 and non-zero seconds."
"Test format %z with hours greater than 99 and non-zero seconds."
(formatz-should-equal (fz-make+zone 123 0 30) "+123:00:30")
(formatz-should-equal (fz-make-zone 123 0 30) "-123:00:30")
(formatz-should-equal (fz-make+zone 120 0 4) "+120:00:04")
@ -868,30 +868,30 @@ The functions in `pattern-mod' are composed left to right."
;; use the above test cases for multiple formats.
(defun formatz-mod-del-colons (string)
"Returns STRING with any colons removed."
"Return STRING with any colons removed."
(string-replace ":" "" string))
(defun formatz-mod-add-00 (string)
"Returns STRING with \"00\" appended."
"Return STRING with \"00\" appended."
(concat string "00"))
(defun formatz-mod-add-colon00 (string)
"Returns STRING with \":00\" appended."
"Return STRING with \":00\" appended."
(concat string ":00"))
(defun formatz-mod-pad-r10 (string)
"Returns STRING padded on the right to 10 characters."
"Return STRING padded on the right to 10 characters."
(concat string (make-string (- 10 (length string)) ?\s)))
(defun formatz-mod-pad-r12 (string)
"Returns STRING padded on the right to 12 characters."
"Return STRING padded on the right to 12 characters."
(concat string (make-string (- 12 (length string)) ?\s)))
;; Convenience macro for generating groups of test cases.
(defmacro formatz-generate-tests
(form-strings hour-mod mins-mod secs-mod big-mod secbig-mod)
"Defines tests for time formats FORM-STRINGS.
"Define tests for time formats FORM-STRINGS.
FORM-STRINGS is a list of formats, each \"%z\" or some variation thereof.
Each of the remaining arguments is an unquoted list of the form
@ -925,7 +925,7 @@ the other expected results for hours greater than 99 with non-zero seconds."
ert-test-list
(list
`(ert-deftest ,(intern (concat "formatz-" form-string "-hhmm")) ()
,(concat "Tests time-stamp format " form-string
,(concat "Test time-stamp format " form-string
" with whole hours or minutes.")
(should (equal (formatz ,form-string (fz-make+zone 0))
,(car hour-mod)))
@ -934,13 +934,13 @@ the other expected results for hours greater than 99 with non-zero seconds."
,(car mins-mod)))
(formatz-nonzero-minutes-helper ,form-string ',(cdr mins-mod)))
`(ert-deftest ,(intern (concat "formatz-" form-string "-seconds")) ()
,(concat "Tests time-stamp format " form-string
,(concat "Test time-stamp format " form-string
" with offsets that have non-zero seconds.")
(should (equal (formatz ,form-string (fz-make+zone 0 0 30))
,(car secs-mod)))
(formatz-nonzero-seconds-helper ,form-string ',(cdr secs-mod)))
`(ert-deftest ,(intern (concat "formatz-" form-string "-threedigit")) ()
,(concat "Tests time-stamp format " form-string
,(concat "Test time-stamp format " form-string
" with offsets that are 100 hours or greater.")
(should (equal (formatz ,form-string (fz-make+zone 100))
,(car big-mod)))
@ -981,7 +981,7 @@ the other expected results for hours greater than 99 with non-zero seconds."
;; The legacy exception for %z in time-stamp will need to remain
;; through at least 2024 and Emacs 28.
(ert-deftest formatz-%z-spotcheck ()
"Spot-checks internal implementation of time-stamp format %z."
"Spot-check internal implementation of time-stamp format %z."
(should (equal (format-time-offset "%z" (fz-make+zone 0)) "+0000"))
(should (equal (format-time-offset "%z" (fz-make+zone 0 30)) "+0030"))
(should (equal (format-time-offset "%z" (fz-make+zone 0 0 30)) "+000030"))
@ -1104,7 +1104,7 @@ the other expected results for hours greater than 99 with non-zero seconds."
;;; Illegal %z formats
(ert-deftest formatz-illegal-options ()
"Tests that illegal/nonsensical/ambiguous %z formats don't produce output."
"Test that illegal/nonsensical/ambiguous %z formats don't produce output."
;; multiple options
(should (equal "" (formatz "%_-z" 0)))
(should (equal "" (formatz "%-_z" 0)))