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

Print help message if no parameters present #41

Closed
PinkieSwirl opened this issue Dec 22, 2018 · 5 comments
Closed

Print help message if no parameters present #41

PinkieSwirl opened this issue Dec 22, 2018 · 5 comments

Comments

@PinkieSwirl
Copy link

It would be nice if there would be an option that prints the help message, if no parameters are present.

At least I did not find any easy way to check for no parameters?

My request is similar to the sub commands behavior (if non given the help message is printed), but I also want it if no parameter is provided for a sub command, like
"./tool subcommand" -> should print help message

@ajalt
Copy link
Owner

ajalt commented Dec 24, 2018

The current behavior is to only print the help message automatically for commands with subcommands (and only if invokeWithoutSubcommand = false). The reason being that, if all of a command's parameters are optional, there's no way to know if the user is trying to see the help message, or invoke the command with default values.

@PinkieSwirl
Copy link
Author

Yes I know, that is why I asked for an explicit option (or flag).

If you don't want to include that, what would be the best way to check for this condition myself (even on sub-commands)?

@ajalt
Copy link
Owner

ajalt commented Jan 3, 2019

One situation where I think it might be good to print the help message instead of the error is when you have required arguments and no values on the command line. Parsing is unambiguous in this case. Would that cover your use case, or do you have subcommands with no required arguments and you still want the help message to print instead of parsing successfully?

@PinkieSwirl
Copy link
Author

Sorry if I'm not precise enough. With option/flag I meant a constructor argument, similar to invokeWithoutSubcommand = false, for example printHelpOnEmptyArguments = false.

My use-case is that the program needs some input to run successfully and if no input is provided the help message is shown. One example would be java itself (it prints the help message if no argument is present).

The same is true for subcommands.

My specific use-case:
I wrote a CLI to compute scores for Android unlock patterns (and their features) and a user can provide patterns directly and/or in files, some examples:
apc --pattern 1.2.3.4
apc --file /path/to/file1
apc --pattern 1.2.3.4 --file /path/to/file1 --pattern 4.0.8.1.7.2 --file /path/to/file2

Thus I can mark neither --pattern nor --file as required.

Now there are certainly more complex scenarios, but since such functionality is---from what I experienced---quite common, my suggestion was to add such an option. However I also can understand if you don't want to add such functionality.

@ajalt
Copy link
Owner

ajalt commented Jan 10, 2019

Thanks for the detailed description. I can see that feature being useful. For now, as a workaround, you can check if all of your options are empty, and throw PrintHelpMessage(this) yourself in your command's run method.

CliktCommand.main will catch that and display the help for your subcommand for you.

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

No branches or pull requests

2 participants