Re: [CLI] - new FormatHelper produces poorly formatted option groups
Damien Carbonne <[email protected]> Wed, 5 Nov 2025 23:06:51 +0100
| Newsgroups | gmane.comp.jakarta.commons.user |
|---|---|
| Message-ID | <[email protected]> |
Hi Gary, Using commons-cli-1.11.0-SNAPSHOT, the output of the sample code is now: usage: Command -o1 | -o2 Options Description -o1 Descr -o2 Descr usage: Command -o1 | -o2 -o1 Descr -o2 Descr If the group is declared optional, then the output is: usage: Command [-o1 | -o2] Options Description -o1 Descr -o2 Descr usage: Command [-o1 | -o2] -o1 Descr -o2 Descr This seems correct and consistent. Thank you. Damien Le 05/11/2025 à 13:34, Gary Gregory a écrit : > Hello Damien and all, > > This issue has been fixed with Claude's PR > https://github.com/apache/commons-cli/pull/411 > > Thank you, Claude! > > Damien: Would you please test with a local git master build or a > snapshot dependency from > https://repository.apache.org/content/repositories/snapshots/ ? > > Thank you, > Gary > > On Thu, Oct 30, 2025 at 3:22 PM Damien Carbonne > <[email protected]> wrote: >> I think that the issue is here, in >> org.apache.commons.cli.help.AbstractHelpFormatter: >> >> public final void printHelp(final String cmdLineSyntax, final String >> header, final Options options, final String footer, final boolean >> autoUsage) throws IOException { >> printHelp(cmdLineSyntax, header, options.getOptions(), footer, >> autoUsage); // Here groups are lost >> } >> >> Options contains groups, but Iterable<Option> (returned by >> options.getOptions()) does not. >> Therefore, the called printHelp is unable to format options correctly. >> >> One could construct Options from Iterable<Option> and revert the calls. >> >> >> Le 30/10/2025 à 16:05, Claude Warren a écrit : >>> I was on my phone when I first read this. But now I wonder how this is >>> wrong. >>> >>> The example adds 2 options o1 and o2 and a group comprising the 2 and the >>> expected output contains o1, o2, and o3. Where did o3 get its name? I >>> assume o3 is intended to be the group of 01 and 02, but I don't think those >>> were ever delineated in the output. Am I missing something? >>> >>> >>> >>> On Thu, Oct 30, 2025 at 12:47 PM Claude Warren <[email protected]> wrote: >>> >>>> Looks likeregression. I will take a look later today. >>>> >>>> Claude >>>> >>>> LinkedIn: http://www.linkedin.com/in/claudewarren >>>> >>>> On Thu 30 Oct 2025, 12:12 Gary Gregory, <[email protected]> wrote: >>>> >>>>> Claude, any thoughts here? I was just about to push a release candidate... >>>>> >>>>> Gary >>>>> >>>>> On Sun, Oct 26, 2025 at 10:38 AM Damien Carbonne >>>>> <[email protected]> wrote: >>>>>> Hi, >>>>>> >>>>>> When using the new HelpFormatter (commons-cli-1.10.0), option groups are >>>>>> poorly formatted. >>>>>> >>>>>> This looks like a regression. >>>>>> The following code shows the difference between the new HelpFormatter >>>>>> and the deprecated one: >>>>>> ------------------------------------- >>>>>> import java.io.IOException; >>>>>> >>>>>> import org.apache.commons.cli.Option; >>>>>> import org.apache.commons.cli.OptionGroup; >>>>>> import org.apache.commons.cli.Options; >>>>>> >>>>>> public class CliTest { >>>>>> public static void main(String[] args) throws IOException { >>>>>> // create options and groups >>>>>> final Option o1 = new Option("o1", "Descr"); >>>>>> final Option o2 = new Option("o2", "Descr"); >>>>>> >>>>>> final Options options = new Options(); >>>>>> options.addOption(o1); >>>>>> options.addOption(o2); >>>>>> >>>>>> final OptionGroup group = new OptionGroup(); >>>>>> group.addOption(o1); >>>>>> group.addOption(o2); >>>>>> options.addOptionGroup(group); >>>>>> >>>>>> //format options with new formatter >>>>>> final org.apache.commons.cli.help.HelpFormatter newFormatter = >>>>>> >>>>> org.apache.commons.cli.help.HelpFormatter.builder().setShowSince(false).get(); >>>>>> newFormatter.printHelp("Command", null, options, null, true); >>>>>> >>>>>> // format options with old formatter >>>>>> final org.apache.commons.cli.HelpFormatter oldFormatter = >>>>>> new org.apache.commons.cli.HelpFormatter(); >>>>>> oldFormatter.printHelp("Command", null, options, null, true); >>>>>> } >>>>>> } >>>>>> ------------------------------------- >>>>>> >>>>>> The output is: >>>>>> ------------------------------------- >>>>>> usage: Command [-o1] [-o2] >>>>>> Options Description >>>>>> -o1 Descr >>>>>> -o2 Descr >>>>>> >>>>>> >>>>>> usage: Command [-o1 | -o2] >>>>>> -o1 Descr >>>>>> -o2 Descr >>>>>> ------------------------------------- >>>>>> >>>>>> Groups are not shown any more. >>>>>> I would expect the new formatter output to look like this: >>>>>> ------------------------------------- >>>>>> usage: Command [-o1 | -o2] >>>>>> Options Description >>>>>> -o1 Descr >>>>>> -o2 Descr >>>>>> -o3 Descr >>>>>> ------------------------------------- >>>>>> >>>>>> Regards, >>>>>> Damien Carbonne >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: [email protected] >>>>>> For additional commands, e-mail: [email protected] >>>>>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] >