generate-manpage.nix: Make more readable

This commit is contained in:
Eelco Dolstra 2023-03-21 12:11:32 +01:00
parent 3ac3e31c4d
commit 6f62cb3611

View file

@ -7,6 +7,7 @@ let
showCommand = { command, details, filename, toplevel }: showCommand = { command, details, filename, toplevel }:
let let
result = '' result = ''
> **Warning** \ > **Warning** \
> This program is **experimental** and its interface is subject to change. > This program is **experimental** and its interface is subject to change.
@ -25,6 +26,7 @@ let
${maybeOptions} ${maybeOptions}
''; '';
showSynopsis = command: args: showSynopsis = command: args:
let let
showArgument = arg: "*${arg.label}*" + (if arg ? arity then "" else "..."); showArgument = arg: "*${arg.label}*" + (if arg ? arity then "" else "...");
@ -32,6 +34,7 @@ let
in '' in ''
`${command}` [*option*...] ${arguments} `${command}` [*option*...] ${arguments}
''; '';
maybeSubcommands = if details ? commands && details.commands != {} maybeSubcommands = if details ? commands && details.commands != {}
then '' then ''
where *subcommand* is one of the following: where *subcommand* is one of the following:
@ -39,26 +42,35 @@ let
${subcommands} ${subcommands}
'' ''
else ""; else "";
subcommands = if length categories > 1 subcommands = if length categories > 1
then listCategories then listCategories
else listSubcommands details.commands; else listSubcommands details.commands;
categories = sort (x: y: x.id < y.id) (unique (map (cmd: cmd.category) (attrValues details.commands))); categories = sort (x: y: x.id < y.id) (unique (map (cmd: cmd.category) (attrValues details.commands)));
listCategories = concatStrings (map showCategory categories); listCategories = concatStrings (map showCategory categories);
showCategory = cat: '' showCategory = cat: ''
**${toString cat.description}:** **${toString cat.description}:**
${listSubcommands (filterAttrs (n: v: v.category == cat) details.commands)} ${listSubcommands (filterAttrs (n: v: v.category == cat) details.commands)}
''; '';
listSubcommands = cmds: concatStrings (attrValues (mapAttrs showSubcommand cmds)); listSubcommands = cmds: concatStrings (attrValues (mapAttrs showSubcommand cmds));
showSubcommand = name: subcmd: '' showSubcommand = name: subcmd: ''
* [`${command} ${name}`](./${appendName filename name}.md) - ${subcmd.description} * [`${command} ${name}`](./${appendName filename name}.md) - ${subcmd.description}
''; '';
maybeDocumentation = if details ? doc then details.doc else ""; maybeDocumentation = if details ? doc then details.doc else "";
maybeOptions = if details.flags == {} then "" else '' maybeOptions = if details.flags == {} then "" else ''
# Options # Options
${showOptions details.flags toplevel.flags} ${showOptions details.flags toplevel.flags}
''; '';
showOptions = options: commonOptions: showOptions = options: commonOptions:
let let
allOptions = options // commonOptions; allOptions = options // commonOptions;
@ -99,7 +111,7 @@ let
in [ cmd ] ++ concatMap subcommand (attrNames details.commands or {}); in [ cmd ] ++ concatMap subcommand (attrNames details.commands or {});
parsedToplevel = builtins.fromJSON toplevel; parsedToplevel = builtins.fromJSON toplevel;
manpages = processCommand { manpages = processCommand {
command = "nix"; command = "nix";
details = parsedToplevel; details = parsedToplevel;