Skip to content

Commit

Permalink
docs: GNU-style help formatting for option args.
Browse files Browse the repository at this point in the history
Derive `GnuStyleHelpFormatter` from `argparse.HelpFormatter` to format
option-arg pairs in the help message according to GNU style:
https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html.

For example,

```
  -p, --path=PATH      		Help string for a path option
```

instead of the default:

```
  -p PATH, --path PATH 		Help string for a path option
```
  • Loading branch information
badshah400 committed Feb 23, 2024
1 parent b11f895 commit 1c64617
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/tartex/_parse_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,52 @@ def __call__(self, parser, namespace, values, option_string=None):
parser.exit()


class GnuStyleHelpFormatter(argparse.HelpFormatter):

"""
Format help string in GNU style, i.e.
* `-s, --long Help string for long`
for an action that takes no argument
* `-s, --long=LONG Help string for long`
for an action that requires an argument
"""

def _format_action_invocation(self, action):
if not action.option_strings:
default = self._get_default_metavar_for_positional(action)
(metavar,) = self._metavar_formatter(action, default)(1)
return metavar

parts = []

# if the Optional doesn't take a value, format is:
# -s, --long
if action.nargs == 0:
parts.extend(action.option_strings)

# if the Optional takes a value, format is:
# -s, --long=ARGS
else:
default = self._get_default_metavar_for_optional(action)
args_string = self._format_args(action, default)
for option_string in action.option_strings:
if len(option_string.lstrip("-")) == 1: # short form
parts.append(f"{option_string}")
else: # long form
parts.append(f"{option_string}={args_string}")

return ", ".join(parts)


def parse_args(args):
"""Set up argparse options and parse input args accordingly"""
parser = argparse.ArgumentParser(
description=(
"Build a tarball including all source files needed to compile your"
f" LaTeX project (version {__version__})."
),
formatter_class=GnuStyleHelpFormatter,
usage="%(prog)s [options] filename",
)

Expand Down

0 comments on commit 1c64617

Please sign in to comment.