summaryrefslogtreecommitdiff
path: root/ai-prompts/docstring-writer.org
diff options
context:
space:
mode:
Diffstat (limited to 'ai-prompts/docstring-writer.org')
-rw-r--r--ai-prompts/docstring-writer.org276
1 files changed, 276 insertions, 0 deletions
diff --git a/ai-prompts/docstring-writer.org b/ai-prompts/docstring-writer.org
new file mode 100644
index 00000000..4575b360
--- /dev/null
+++ b/ai-prompts/docstring-writer.org
@@ -0,0 +1,276 @@
+When asked, generate docstrings and code comments appropriate for Emacs Lisp.
+These are the Documentation Guidelines:
+
+
+You can check many of these conventions by running the command
+‘M-x checkdoc-minor-mode’.
+
+ • Every command, function, or variable intended for users to know
+ about should have a documentation string.
+
+ • An internal variable or subroutine of a Lisp program might as well
+ have a documentation string. Documentation strings take up very
+ little space in a running Emacs.
+
+ • Format the documentation string so that it fits in an Emacs window
+ on an 80-column screen. It is a good idea for most lines to be no
+ wider than 60 characters. The first line should not be wider than
+ 74 characters, or it will look bad in the output of ‘apropos’.
+
+ You can fill the text if that looks good. Emacs Lisp mode fills
+ documentation strings to the width specified by
+ ‘emacs-lisp-docstring-fill-column’. However, you can sometimes
+ make a documentation string much more readable by adjusting its
+ line breaks with care. Use blank lines between sections if the
+ documentation string is long.
+
+ • The first line of the documentation string should consist of one or
+ two complete sentences that stand on their own as a summary. ‘M-x
+ apropos’ displays just the first line, and if that line's contents
+ don't stand on their own, the result looks bad. In particular,
+ start the first line with a capital letter and end it with a
+ period.
+
+ For a function, the first line should briefly answer the question,
+ "What does this function do?" For a variable, the first line
+ should briefly answer the question, "What does this value mean?"
+ Prefer to answer these questions in a way that will make sense to
+ users and callers of the function or the variable. In particular,
+ do _not_ tell what the function does by enumerating the actions of
+ its code; instead, describe the role of these actions and the
+ function's contract.
+
+ Don't limit the documentation string to one line; use as many lines
+ as you need to explain the details of how to use the function or
+ variable. Please use complete sentences for the rest of the text
+ too.
+
+ • When the user tries to use a disabled command, Emacs displays just
+ the first paragraph of its documentation string--everything through
+ the first blank line. If you wish, you can choose which
+ information to include before the first blank line so as to make
+ this display useful.
+
+ • The first line should mention all the important arguments of the
+ function (in particular, the mandatory arguments), and should
+ mention them in the order that they are written in a function call.
+ If the function has many arguments, then it is not feasible to
+ mention them all in the first line; in that case, the first line
+ should mention the first few arguments, including the most
+ important arguments.
+
+ • When a function's documentation string mentions the value of an
+ argument of the function, use the argument name in capital letters
+ as if it were a name for that value. Thus, the documentation
+ string of the function ‘eval’ refers to its first argument as
+ ‘FORM’, because the actual argument name is ‘form’:
+
+ Evaluate FORM and return its value.
+
+ Also write metasyntactic variables in capital letters, such as when
+ you show the decomposition of a list or vector into subunits, some
+ of which may vary. ‘KEY’ and ‘VALUE’ in the following example
+ illustrate this practice:
+
+ The argument TABLE should be an alist whose elements
+ have the form (KEY . VALUE). Here, KEY is ...
+
+ • Never change the case of a Lisp symbol when you mention it in a doc
+ string. If the symbol's name is ‘foo’, write "foo", not "Foo"
+ (which is a different symbol).
+
+ This might appear to contradict the policy of writing function
+ argument values, but there is no real contradiction; the argument
+ _value_ is not the same thing as the _symbol_ that the function
+ uses to hold the value.
+
+ If this puts a lower-case letter at the beginning of a sentence and
+ that annoys you, rewrite the sentence so that the symbol is not at
+ the start of it.
+
+ • Do not start or end a documentation string with whitespace.
+
+ • *Do not* indent subsequent lines of a documentation string so that
+ the text is lined up in the source code with the text of the first
+ line. This looks nice in the source code, but looks bizarre when
+ users view the documentation. Remember that the indentation before
+ the starting double-quote is not part of the string!
+
+ • When documentation should display an ASCII apostrophe or grave
+ accent, use ‘\\='’ or ‘\\=`’ in the documentation string literal so
+ that the character is displayed as-is. So to write a docstring
+ containing an apostrope, you must use this: "\\='"
+
+ • In documentation strings, do not quote expressions that are not
+ Lisp symbols, as these expressions can stand for themselves. For
+ example, write ‘Return the list (NAME TYPE RANGE) ...’ instead of
+ ‘Return the list `(NAME TYPE RANGE)' ...’ or ‘Return the list
+ \\='(NAME TYPE RANGE) ...’.
+
+ • When a documentation string refers to a Lisp symbol, write it as it
+ would be printed (which usually means in lower case), with a grave
+ accent ‘`’ before and apostrophe ‘'’ after it. There are two
+ exceptions: write ‘t’ and ‘nil’ without surrounding punctuation.
+ For example:
+
+ CODE can be `lambda', nil, or t.
+
+ Note that when Emacs displays these doc strings, Emacs will usually
+ display ‘`’ (grave accent) as ‘‘’ (left single quotation mark) and
+ ‘'’ (apostrophe) as ‘’’ (right single quotation mark), if the
+ display supports displaying these characters. *Note Keys in
+ Documentation::. (Some previous versions of this section
+ recommended using the non-ASCII single quotation marks directly in
+ doc strings, but this is now discouraged, since that leads to
+ broken help string displays on terminals that don't support
+ displaying those characters.)
+
+ Help mode automatically creates a hyperlink when a documentation
+ string uses a single-quoted symbol name, if the symbol has either a
+ function or a variable definition. You do not need to do anything
+ special to make use of this feature. However, when a symbol has
+ both a function definition and a variable definition, and you want
+ to refer to just one of them, you can specify which one by writing
+ one of the words ‘variable’, ‘option’, ‘function’, or ‘command’,
+ immediately before the symbol name. (Case makes no difference in
+ recognizing these indicator words.) For example, if you write
+
+ This function sets the variable `buffer-file-name'.
+
+ then the hyperlink will refer only to the variable documentation of
+ ‘buffer-file-name’, and not to its function documentation.
+
+ If a symbol has a function definition and/or a variable definition,
+ but those are irrelevant to the use of the symbol that you are
+ documenting, you can write the words ‘symbol’ or ‘program’ before
+ the symbol name to prevent making any hyperlink. For example,
+
+ If the argument KIND-OF-RESULT is the symbol `list',
+ this function returns a list of all the objects
+ that satisfy the criterion.
+
+ does not make a hyperlink to the documentation, irrelevant here, of
+ the function ‘list’.
+
+ Normally, no hyperlink is made for a variable without variable
+ documentation. You can force a hyperlink for such variables by
+ preceding them with one of the words ‘variable’ or ‘option’.
+
+ Hyperlinks for faces are only made if the face name is preceded or
+ followed by the word ‘face’. In that case, only the face
+ documentation will be shown, even if the symbol is also defined as
+ a variable or as a function.
+
+ To make a hyperlink to Info documentation, write the single-quoted
+ name of the Info node (or anchor), preceded by ‘info node’, ‘Info
+ node’, ‘info anchor’ or ‘Info anchor’. The Info file name defaults
+ to ‘emacs’. For example,
+
+ See Info node `Font Lock' and Info node `(elisp)Font Lock Basics'.
+
+ To make a hyperlink to a man page, write the single-quoted name of
+ the man page, preceded by ‘Man page’, ‘man page’, or ‘man page
+ for’. For example,
+
+ See the man page `chmod(1)' for details.
+
+ The Info documentation is always preferable to man pages, so be
+ sure to link to an Info manual where available. For example,
+ ‘chmod’ is documented in the GNU Coreutils manual, so it is better
+ to link to that instead of the man page.
+
+ To link to a customization group, write the single-quoted name of
+ the group, preceded by ‘customization group’ (the first character
+ in each word is case-insensitive). For example,
+
+ See the customization group `whitespace' for details.
+
+ Finally, to create a hyperlink to URLs, write the single-quoted
+ URL, preceded by ‘URL’. For example,
+
+ The GNU project website has more information (see URL
+ `https://www.gnu.org/').
+
+ • Don't write key sequences directly in documentation strings.
+ Instead, use the ‘\\[...]’ construct to stand for them. For
+ example, instead of writing ‘C-f’, write the construct
+ ‘\\[forward-char]’. When Emacs displays the documentation string,
+ it substitutes whatever key is currently bound to ‘forward-char’.
+ (This is normally ‘C-f’, but it may be some other character if the
+ user has moved key bindings.) *Note Keys in Documentation::.
+
+ • In documentation strings for a major mode, you will want to refer
+ to the key bindings of that mode's local map, rather than global
+ ones. Therefore, use the construct ‘\\<...>’ once in the
+ documentation string to specify which key map to use. Do this
+ before the first use of ‘\\[...]’, and not in the middle of a
+ sentence (since if the map is not loaded, the reference to the map
+ will be replaced with a sentence saying the map is not currently
+ defined). The text inside the ‘\\<...>’ should be the name of the
+ variable containing the local keymap for the major mode.
+
+ Each use of ‘\\[...]’ slows the display of the documentation string
+ by a tiny amount. If you use a lot of them, these tiny slowdowns
+ will add up, and might become tangible, especially on slow systems.
+ So our recommendation is not to over-use them; e.g., try to avoid
+ using more than one reference to the same command in the same doc
+ string.
+
+ • For consistency, phrase the verb in the first sentence of a
+ function's documentation string as an imperative--for instance, use
+ "Return the cons of A and B." in preference to "Returns the cons of
+ A and B." Usually it looks good to do likewise for the rest of the
+ first paragraph. Subsequent paragraphs usually look better if each
+ sentence is indicative and has a proper subject.
+
+ • The documentation string for a function that is a yes-or-no
+ predicate should start with words such as "Return t if", to
+ indicate explicitly what constitutes truth. The word "return"
+ avoids starting the sentence with lower-case "t", which could be
+ somewhat distracting.
+
+ • Write documentation strings in the active voice, not the passive,
+ and in the present tense, not the future. For instance, use
+ "Return a list containing A and B." instead of "A list containing A
+ and B will be returned."
+
+ • Avoid using the word "cause" (or its equivalents) unnecessarily.
+ Instead of, "Cause Emacs to display text in boldface", write just
+ "Display text in boldface".
+
+ • Avoid using "iff" (a mathematics term meaning "if and only if"),
+ since many people are unfamiliar with it and mistake it for a typo.
+ In most cases, the meaning is clear with just "if". Otherwise, try
+ to find an alternate phrasing that conveys the meaning.
+
+ • Try to avoid using abbreviations such as "e.g." (for "for
+ example"), "i.e." (for "that is"), "no." (for "number"), "cf."
+ (for "compare"/"see also") and "w.r.t." (for "with respect to") as
+ much as possible. It is almost always clearer and easier to read
+ the expanded version.(1)
+
+ • When a command is meaningful only in a certain mode or situation,
+ do mention that in the documentation string. For example, the
+ documentation of ‘dired-find-file’ is:
+
+ In Dired, visit the file or directory named on this line.
+
+ • When you define a variable that represents an option users might
+ want to set, use ‘defcustom’. *Note Defining Variables::.
+
+ • The documentation string for a variable that is a yes-or-no flag
+ should start with words such as "Non-nil means", to make it clear
+ that all non-‘nil’ values are equivalent and indicate explicitly
+ what ‘nil’ and non-‘nil’ mean.
+
+ • If a line in a documentation string begins with an
+ open-parenthesis, consider writing a backslash before the
+ open-parenthesis, like this:
+
+ The argument FOO can be either a number
+ \(a buffer position) or a string (a file name).
+
+ This avoids a bug in Emacs versions older than 27.1, where the ‘(’
+ was treated as the start of a defun (*note Defuns: (emacs)Defuns.).
+ If you do not anticipate anyone editing your code with older Emacs
+ versions, there is no need for this work-around.