Skip to content

Commit

Permalink
doc: rework CodingGuidelines with new formatting rules
Browse files Browse the repository at this point in the history
Literal and placeholder formatting is more heavily enforced, with some
asciidoc magic. Basically, the markup is preserved everywhere.

Signed-off-by: Jean-Noël Avila <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
jnavila authored and gitster committed Mar 29, 2024
1 parent 11c821f commit c42ea60
Showing 1 changed file with 85 additions and 68 deletions.
153 changes: 85 additions & 68 deletions Documentation/CodingGuidelines
Original file line number Diff line number Diff line change
Expand Up @@ -641,15 +641,15 @@ Writing Documentation:
- Prefer succinctness and matter-of-factly describing functionality
in the abstract. E.g.

--short:: Emit output in the short-format.
`--short`:: Emit output in the short-format.

and avoid something like these overly verbose alternatives:

--short:: Use this to emit output in the short-format.
--short:: You can use this to get output in the short-format.
--short:: A user who prefers shorter output could....
--short:: Should a person and/or program want shorter output, he
she/they/it can...
`--short`:: Use this to emit output in the short-format.
`--short`:: You can use this to get output in the short-format.
`--short`:: A user who prefers shorter output could....
`--short`:: Should a person and/or program want shorter output, he
she/they/it can...

This practice often eliminates the need to involve human actors in
your description, but it is a good practice regardless of the
Expand All @@ -659,12 +659,12 @@ Writing Documentation:
addressing the hypothetical user, and possibly "we" when
discussing how the program might react to the user. E.g.

You can use this option instead of --xyz, but we might remove
You can use this option instead of `--xyz`, but we might remove
support for it in future versions.

while keeping in mind that you can probably be less verbose, e.g.

Use this instead of --xyz. This option might be removed in future
Use this instead of `--xyz`. This option might be removed in future
versions.

- If you still need to refer to an example person that is
Expand All @@ -682,68 +682,118 @@ Writing Documentation:
The same general rule as for code applies -- imitate the existing
conventions.

A few commented examples follow to provide reference when writing or
modifying command usage strings and synopsis sections in the manual
pages:

Placeholders are spelled in lowercase and enclosed in angle brackets:
<file>
--sort=<key>
--abbrev[=<n>]
Markup:

Literal parts (e.g. use of command-line options, command names,
branch names, URLs, pathnames (files and directories), configuration and
environment variables) must be typeset as verbatim (i.e. wrapped with
backticks):
`--pretty=oneline`
`git rev-list`
`remote.pushDefault`
`http://git.example.com`
`.git/config`
`GIT_DIR`
`HEAD`
`umask`(2)

An environment variable must be prefixed with "$" only when referring to its
value and not when referring to the variable itself, in this case there is
nothing to add except the backticks:
`GIT_DIR` is specified
`$GIT_DIR/hooks/pre-receive`

Word phrases enclosed in `backtick characters` are rendered literally
and will not be further expanded. The use of `backticks` to achieve the
previous rule means that literal examples should not use AsciiDoc
escapes.
Correct:
`--pretty=oneline`
Incorrect:
`\--pretty=oneline`

Placeholders are spelled in lowercase and enclosed in
angle brackets surrounded by underscores:
_<file>_
_<commit>_

If a placeholder has multiple words, they are separated by dashes:
<new-branch-name>
--template=<template-directory>
_<new-branch-name>_
_<template-directory>_

A placeholder is not enclosed in backticks, as it is not a literal.

When needed, use a distinctive identifier for placeholders, usually
made of a qualification and a type:
_<git-dir>_
_<key-id>_

When literal and placeholders are mixed, each markup is applied for
each sub-entity. If they are stuck, a special markup, called
unconstrained formatting is required.
Unconstrained formating for placeholders is __<like-this>__
Unconstrained formatting for literal formatting is ++like this++
`--jobs` _<n>_
++--sort=++__<key>__
__<directory>__++/.git++
++remote.++__<name>__++.mirror++

caveat: ++ unconstrained format is not verbatim and may expand
content. Use Asciidoc escapes inside them.

When a placeholder is cited in text paragraph, it is enclosed in angle
brackets to remind the reader the reference in the synopsis section.
For better visibility, the placeholder is typeset in italics:
The _<file>_ to be added.
Synopsis Syntax

Syntax grammar is formatted neither as literal nor as placeholder.

A few commented examples follow to provide reference when writing or
modifying command usage strings and synopsis sections in the manual
pages:

Possibility of multiple occurrences is indicated by three dots:
<file>...
_<file>_...
(One or more of <file>.)

Optional parts are enclosed in square brackets:
[<file>...]
[_<file>_...]
(Zero or more of <file>.)

--exec-path[=<path>]
++--exec-path++[++=++__<path>__]
(Option with an optional argument. Note that the "=" is inside the
brackets.)

[<patch>...]
[_<patch>_...]
(Zero or more of <patch>. Note that the dots are inside, not
outside the brackets.)

Multiple alternatives are indicated with vertical bars:
[-q | --quiet]
[--utf8 | --no-utf8]
[`-q` | `--quiet`]
[`--utf8` | `--no-utf8`]

Use spacing around "|" token(s), but not immediately after opening or
before closing a [] or () pair:
Do: [-q | --quiet]
Don't: [-q|--quiet]
Do: [`-q` | `--quiet`]
Don't: [`-q`|`--quiet`]

Don't use spacing around "|" tokens when they're used to separate the
alternate arguments of an option:
Do: --track[=(direct|inherit)]
Don't: --track[=(direct | inherit)]
Do: ++--track++[++=++(`direct`|`inherit`)]`
Don't: ++--track++[++=++(`direct` | `inherit`)]

Parentheses are used for grouping:
[(<rev> | <range>)...]
[(_<rev>_ | _<range>_)...]
(Any number of either <rev> or <range>. Parens are needed to make
it clear that "..." pertains to both <rev> and <range>.)

[(-p <parent>)...]
[(`-p` _<parent>_)...]
(Any number of option -p, each with one <parent> argument.)

git remote set-head <name> (-a | -d | <branch>)
`git remote set-head` _<name>_ (`-a` | `-d` | _<branch>_)
(One and only one of "-a", "-d" or "<branch>" _must_ (no square
brackets) be provided.)

And a somewhat more contrived example:
--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
`--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]`
Here "=" is outside the brackets, because "--diff-filter=" is a
valid usage. "*" has its own pair of brackets, because it can
(optionally) be specified only when one or more of the letters is
Expand All @@ -754,39 +804,6 @@ Writing Documentation:
the user would type into a shell and use 'Git' (uppercase first letter)
when talking about the version control system and its properties.

A few commented examples follow to provide reference when writing or
modifying paragraphs or option/command explanations that contain options
or commands:

Literal examples (e.g. use of command-line options, command names,
branch names, URLs, pathnames (files and directories), configuration and
environment variables) must be typeset in monospace (i.e. wrapped with
backticks):
`--pretty=oneline`
`git rev-list`
`remote.pushDefault`
`http://git.example.com`
`.git/config`
`GIT_DIR`
`HEAD`

An environment variable must be prefixed with "$" only when referring to its
value and not when referring to the variable itself, in this case there is
nothing to add except the backticks:
`GIT_DIR` is specified
`$GIT_DIR/hooks/pre-receive`

Word phrases enclosed in `backtick characters` are rendered literally
and will not be further expanded. The use of `backticks` to achieve the
previous rule means that literal examples should not use AsciiDoc
escapes.
Correct:
`--pretty=oneline`
Incorrect:
`\--pretty=oneline`

A placeholder is not enclosed in backticks, as it is not a literal.

If some place in the documentation needs to typeset a command usage
example with inline substitutions, it is fine to use +monospaced and
inline substituted text+ instead of `monospaced literal text`, and with
Expand Down

0 comments on commit c42ea60

Please sign in to comment.