Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Description strings for subcommands #214

Open
suntong opened this issue Feb 10, 2023 · 3 comments · May be fixed by #228
Open

Description strings for subcommands #214

suntong opened this issue Feb 10, 2023 · 3 comments · May be fixed by #228

Comments

@suntong
Copy link

suntong commented Feb 10, 2023

A descriptive message can be added at the top of the help text by implementing a Description function that returns a string.

./s-subcommands -h
this program does this and that
Usage: s-subcommands [--quiet] <command> [<args>]

Options:
  --quiet, -q
  --help, -h             display this help and exit

Commands:
  checkout
  commit
  push

Besides giving a descriptive message to the main program, please consider adding them for subcommands as well, like git:

   clone             Clone a repository into a new directory
   init              Create an empty Git repository or reinitialize an existing one

and use it for subcommand helps as well:

I.e., instead of:

 ./s-subcommands commit -h
this program does this and that
Usage: s-subcommands commit [--all] [--message MESSAGE]

Options:
  --all, -a
  --message MESSAGE, -m MESSAGE

Global options:
  --quiet, -q
  --help, -h             display this help and exit

The first line better be

commit - Record changes to the repository

@alexflint
Copy link
Owner

Yeah, seems reasonable. Happy to implement this.

@alexflint
Copy link
Owner

Well ok the reason for this is that subcommands are nil pointers when the help string for the parent command is being printed. I didn't want to assume that you could safely call Description() on a nil struct. I think most implementations of Description() just return a static string, or at least do not access the receiver struct, but still some users might be confused by having Description() invoked with a nil receiver.

The way to get the output you want, though will in involve repetition in your code, is to add a help tag to the subcommand like this:

var args struct {
  Commit *commitCmd `arg:"subcommand" help:"Record changes to the repository"`
}

I'm still open to implementing this, just considering options carefully.

@suntong
Copy link
Author

suntong commented Mar 4, 2023

Yeah, sure that'd do as well -- simpler=better.

Just that, when running ./s-subcommands commit -h, the first line is still

this program does this and that

but I think the first line better be:

commit - Record changes to the repository

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants