Skip to content

Commit

Permalink
[#1067][#1068][#1069] Bugfix in ParserSpec::initFrom, enhance DEBUG…
Browse files Browse the repository at this point in the history
… output

* `ParserSpec::initFrom` now copies `useSimplifiedAtFiles` value
* `ParserSpec::toString` now outputs settings alphabetically
* Debug output now shows `optionsCaseInsensitive` and `subcommandsCaseInsensitive` settings.

Closes #1067
Closes #1068
Closes #1069
  • Loading branch information
remkop committed May 24, 2020
1 parent 58e0434 commit 0133955
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 41 deletions.
5 changes: 4 additions & 1 deletion RELEASE-NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,10 @@ When abbreviated options are enabled, user input `-AB` will match the long `-Aaa
## <a name="4.4.0-fixes"></a> Fixed issues
* [#10][#732][#1047] API: Support abbreviated options and commands. Thanks to [NewbieOrange](https://github.com/NewbieOrange) for the pull request.
* [#1051][#1056] Enhancement: `GenerateCompletion` command no longer needs to be a direct subcommand of the root command. Thanks to [Philippe Charles](https://github.com/charphi) for the pull request.
* [1065] Bugfix: With a `List<>` option in `@ArgGroup`, group incorrectly appears twice in the synopsis. Thanks to [kap4lin](https://github.com/kap4lin) for raising this.
* [#1068] Enhancement: Make `ParserSpec::toString` output settings in alphabetic order.
* [#1069] Enhancement: Debug output should show `optionsCaseInsensitive` and `subcommandsCaseInsensitive` settings.
* [#1065] Bugfix: With a `List<>` option in `@ArgGroup`, group incorrectly appears twice in the synopsis. Thanks to [kap4lin](https://github.com/kap4lin) for raising this.
* [#1067] Bugfix: `ParserSpec::initFrom` was not copying `useSimplifiedAtFiles`.
* [#1058][#1059] DOC: Man page generator: fix incorrect asciidoctor call in synopsis. Thanks to [Andreas Deininger](https://github.com/deining) for the pull request.
* [#1058][#1060] DOC: Man page generator: add documentation about creating language variants. Thanks to [Andreas Deininger](https://github.com/deining) for the pull request.

Expand Down
81 changes: 43 additions & 38 deletions src/main/java/picocli/CommandLine.java
Original file line number Diff line number Diff line change
Expand Up @@ -7777,26 +7777,26 @@ public static class ParserSpec {
/** Constant String holding the default separator between options and option parameters: <code>{@value}</code>.*/
static final String DEFAULT_SEPARATOR = "=";
static final String DEFAULT_END_OF_OPTIONS_DELIMITER = "--";
private boolean abbreviatedOptionsAllowed = false;
private boolean abbreviatedSubcommandsAllowed = false;
private boolean aritySatisfiedByAttachedOptionParam = false;
private Character atFileCommentChar = '#';
private boolean caseInsensitiveEnumValuesAllowed = false;
private boolean collectErrors = false;
private String endOfOptionsDelimiter = DEFAULT_END_OF_OPTIONS_DELIMITER;
private boolean expandAtFiles = true;
private boolean limitSplit = false;
private boolean overwrittenOptionsAllowed = false;
private boolean posixClusteredShortOptionsAllowed = true;
private String separator;
private boolean stopAtUnmatched = false;
private boolean splitQuotedStrings = false;
private boolean stopAtPositional = false;
private String endOfOptionsDelimiter = DEFAULT_END_OF_OPTIONS_DELIMITER;
private boolean stopAtUnmatched = false;
private boolean toggleBooleanFlags = false;
private boolean overwrittenOptionsAllowed = false;
private boolean trimQuotes = shouldTrimQuotes();
private boolean unmatchedArgumentsAllowed = false;
private boolean abbreviatedSubcommandsAllowed = false;
private boolean abbreviatedOptionsAllowed = false;
private boolean expandAtFiles = true;
private boolean useSimplifiedAtFiles = false;
private Character atFileCommentChar = '#';
private boolean posixClusteredShortOptionsAllowed = true;
private boolean unmatchedOptionsArePositionalParams = false;
private boolean limitSplit = false;
private boolean aritySatisfiedByAttachedOptionParam = false;
private boolean collectErrors = false;
private boolean caseInsensitiveEnumValuesAllowed = false;
private boolean trimQuotes = shouldTrimQuotes();
private boolean splitQuotedStrings = false;
private boolean useSimplifiedAtFiles = false;

/** Returns the String to use as the separator between options and option parameters. {@code "="} by default,
* initialized from {@link Command#separator()} if defined.*/
Expand Down Expand Up @@ -7919,36 +7919,41 @@ private boolean shouldTrimQuotes() {
void initSeparator(String value) { if (initializable(separator, value, DEFAULT_SEPARATOR)) {separator = value;} }
void updateSeparator(String value) { if (isNonDefault(value, DEFAULT_SEPARATOR)) {separator = value;} }
public String toString() {
return String.format("posixClusteredShortOptionsAllowed=%s, stopAtPositional=%s, stopAtUnmatched=%s, " +
"separator=%s, overwrittenOptionsAllowed=%s, unmatchedArgumentsAllowed=%s, expandAtFiles=%s, " +
"atFileCommentChar=%s, useSimplifiedAtFiles=%s, endOfOptionsDelimiter=%s, limitSplit=%s, aritySatisfiedByAttachedOptionParam=%s, " +
"toggleBooleanFlags=%s, unmatchedOptionsArePositionalParams=%s, collectErrors=%s," +
"caseInsensitiveEnumValuesAllowed=%s, trimQuotes=%s, splitQuotedStrings=%s",
posixClusteredShortOptionsAllowed, stopAtPositional, stopAtUnmatched,
separator, overwrittenOptionsAllowed, unmatchedArgumentsAllowed, expandAtFiles,
atFileCommentChar, useSimplifiedAtFiles, endOfOptionsDelimiter, limitSplit, aritySatisfiedByAttachedOptionParam,
toggleBooleanFlags, unmatchedOptionsArePositionalParams, collectErrors,
caseInsensitiveEnumValuesAllowed, trimQuotes, splitQuotedStrings);
return String.format("abbreviatedOptionsAllowed=%s, abbreviatedSubcommandsAllowed=%s, aritySatisfiedByAttachedOptionParam=%s, atFileCommentChar=%s, " +
"caseInsensitiveEnumValuesAllowed=%s, collectErrors=%s, endOfOptionsDelimiter=%s, expandAtFiles=%s, " +
"limitSplit=%s, overwrittenOptionsAllowed=%s, posixClusteredShortOptionsAllowed=%s, " +
"separator=%s, splitQuotedStrings=%s, stopAtPositional=%s, stopAtUnmatched=%s, " +
"toggleBooleanFlags=%s, trimQuotes=%s, " +
"unmatchedArgumentsAllowed=%s, unmatchedOptionsArePositionalParams=%s, useSimplifiedAtFiles=%s",
abbreviatedOptionsAllowed, abbreviatedSubcommandsAllowed, aritySatisfiedByAttachedOptionParam, atFileCommentChar,
caseInsensitiveEnumValuesAllowed, collectErrors, endOfOptionsDelimiter, expandAtFiles,
limitSplit, overwrittenOptionsAllowed, posixClusteredShortOptionsAllowed,
separator, splitQuotedStrings, stopAtPositional, stopAtUnmatched,
toggleBooleanFlags, trimQuotes,
unmatchedArgumentsAllowed, unmatchedOptionsArePositionalParams, useSimplifiedAtFiles);
}

void initFrom(ParserSpec settings) {
abbreviatedOptionsAllowed = settings.abbreviatedOptionsAllowed;
abbreviatedSubcommandsAllowed = settings.abbreviatedSubcommandsAllowed;
aritySatisfiedByAttachedOptionParam = settings.aritySatisfiedByAttachedOptionParam;
atFileCommentChar = settings.atFileCommentChar;
caseInsensitiveEnumValuesAllowed = settings.caseInsensitiveEnumValuesAllowed;
collectErrors = settings.collectErrors;
endOfOptionsDelimiter = settings.endOfOptionsDelimiter;
expandAtFiles = settings.expandAtFiles;
limitSplit = settings.limitSplit;
overwrittenOptionsAllowed = settings.overwrittenOptionsAllowed;
posixClusteredShortOptionsAllowed = settings.posixClusteredShortOptionsAllowed;
separator = settings.separator;
stopAtUnmatched = settings.stopAtUnmatched;
splitQuotedStrings = settings.splitQuotedStrings;
stopAtPositional = settings.stopAtPositional;
endOfOptionsDelimiter = settings.endOfOptionsDelimiter;
stopAtUnmatched = settings.stopAtUnmatched;
toggleBooleanFlags = settings.toggleBooleanFlags;
overwrittenOptionsAllowed = settings.overwrittenOptionsAllowed;
trimQuotes = settings.trimQuotes;
unmatchedArgumentsAllowed = settings.unmatchedArgumentsAllowed;
expandAtFiles = settings.expandAtFiles;
atFileCommentChar = settings.atFileCommentChar;
posixClusteredShortOptionsAllowed = settings.posixClusteredShortOptionsAllowed;
unmatchedOptionsArePositionalParams = settings.unmatchedOptionsArePositionalParams;
limitSplit = settings.limitSplit;
aritySatisfiedByAttachedOptionParam = settings.aritySatisfiedByAttachedOptionParam;
collectErrors = settings.collectErrors;
caseInsensitiveEnumValuesAllowed = settings.caseInsensitiveEnumValuesAllowed;
trimQuotes = settings.trimQuotes;
splitQuotedStrings = settings.splitQuotedStrings;
useSimplifiedAtFiles = settings.useSimplifiedAtFiles;
}
}
static enum InitialValueState {CACHED, POSTPONED, UNAVAILABLE}
Expand Down Expand Up @@ -12143,7 +12148,7 @@ List<CommandLine> parse(String... args) {
Assert.notNull(args, "argument array");
if (tracer.isInfo()) {tracer.info("Picocli version: %s%n", versionString());}
if (tracer.isInfo()) {tracer.info("Parsing %d command line args %s%n", args.length, Arrays.toString(args));}
if (tracer.isDebug()){tracer.debug("Parser configuration: %s%n", config());}
if (tracer.isDebug()){tracer.debug("Parser configuration: optionsCaseInsensitive=%s, subcommandsCaseInsensitive=%s, %s%n", commandSpec.optionsCaseInsensitive(), commandSpec.subcommandsCaseInsensitive(), config());}
if (tracer.isDebug()){tracer.debug("(ANSI is %s by default: systemproperty[picocli.ansi]=%s, isatty=%s, TERM=%s, OSTYPE=%s, isWindows=%s, JansiConsoleInstalled=%s, ANSICON=%s, ConEmuANSI=%s, NO_COLOR=%s, CLICOLOR=%s, CLICOLOR_FORCE=%s)%n",
Help.Ansi.AUTO.enabled() ? "enabled" : "disabled", System.getProperty("picocli.ansi"), Help.Ansi.isTTY(), System.getenv("TERM"), System.getenv("OSTYPE"), Help.Ansi.isWindows(), Help.Ansi.isJansiConsoleInstalled(), System.getenv("ANSICON"), System.getenv("ConEmuANSI"), System.getenv("NO_COLOR"), System.getenv("CLICOLOR"), System.getenv("CLICOLOR_FORCE"));}
List<String> expanded = new ArrayList<String>();
Expand Down
4 changes: 2 additions & 2 deletions src/test/java/picocli/CommandLineTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1068,7 +1068,7 @@ public void testDebugOutputForDoubleDashSeparatesPositionalParameters() throws E
"[picocli DEBUG] Creating CommandSpec for picocli.CommandLineTest$CompactFields@20f5239f with factory picocli.CommandLine$DefaultFactory%n" +
"[picocli INFO] Picocli version: %3$s%n" +
"[picocli INFO] Parsing 6 command line args [-oout, --, -r, -v, p1, p2]%n" +
"[picocli DEBUG] Parser configuration: posixClusteredShortOptionsAllowed=true, stopAtPositional=false, stopAtUnmatched=false, separator=null, overwrittenOptionsAllowed=false, unmatchedArgumentsAllowed=false, expandAtFiles=true, atFileCommentChar=#, useSimplifiedAtFiles=false, endOfOptionsDelimiter=--, limitSplit=false, aritySatisfiedByAttachedOptionParam=false, toggleBooleanFlags=false, unmatchedOptionsArePositionalParams=false, collectErrors=false,caseInsensitiveEnumValuesAllowed=false, trimQuotes=false, splitQuotedStrings=false%n" +
"[picocli DEBUG] Parser configuration: optionsCaseInsensitive=false, subcommandsCaseInsensitive=false, abbreviatedOptionsAllowed=false, abbreviatedSubcommandsAllowed=false, aritySatisfiedByAttachedOptionParam=false, atFileCommentChar=#, caseInsensitiveEnumValuesAllowed=false, collectErrors=false, endOfOptionsDelimiter=--, expandAtFiles=true, limitSplit=false, overwrittenOptionsAllowed=false, posixClusteredShortOptionsAllowed=true, separator=null, splitQuotedStrings=false, stopAtPositional=false, stopAtUnmatched=false, toggleBooleanFlags=false, trimQuotes=false, unmatchedArgumentsAllowed=false, unmatchedOptionsArePositionalParams=false, useSimplifiedAtFiles=false%n" +
"[picocli DEBUG] (ANSI is disabled by default: ...)%n" +
"[picocli DEBUG] Initializing command 'null' (user object: picocli.CommandLineTest$CompactFields@20f5239f): 3 options, 1 positional parameters, 0 required, 0 groups, 0 subcommands.%n" +
"[picocli DEBUG] Set initial value for field boolean picocli.CommandLineTest$CompactFields.verbose of type boolean to false.%n" +
Expand Down Expand Up @@ -2042,7 +2042,7 @@ public void testTracingDebugWithSubCommands() throws Exception {
"[picocli DEBUG] Adding subcommand 'tag' to 'git'%n" +
"[picocli INFO] Picocli version: %3$s%n" +
"[picocli INFO] Parsing 8 command line args [--git-dir=/home/rpopma/picocli, commit, -m, \"Fixed typos\", --, src1.java, src2.java, src3.java]%n" +
"[picocli DEBUG] Parser configuration: posixClusteredShortOptionsAllowed=true, stopAtPositional=false, stopAtUnmatched=false, separator=null, overwrittenOptionsAllowed=false, unmatchedArgumentsAllowed=false, expandAtFiles=true, atFileCommentChar=#, useSimplifiedAtFiles=false, endOfOptionsDelimiter=--, limitSplit=false, aritySatisfiedByAttachedOptionParam=false, toggleBooleanFlags=false, unmatchedOptionsArePositionalParams=false, collectErrors=false,caseInsensitiveEnumValuesAllowed=false, trimQuotes=false, splitQuotedStrings=false%n" +
"[picocli DEBUG] Parser configuration: optionsCaseInsensitive=false, subcommandsCaseInsensitive=false, abbreviatedOptionsAllowed=false, abbreviatedSubcommandsAllowed=false, aritySatisfiedByAttachedOptionParam=false, atFileCommentChar=#, caseInsensitiveEnumValuesAllowed=false, collectErrors=false, endOfOptionsDelimiter=--, expandAtFiles=true, limitSplit=false, overwrittenOptionsAllowed=false, posixClusteredShortOptionsAllowed=true, separator=null, splitQuotedStrings=false, stopAtPositional=false, stopAtUnmatched=false, toggleBooleanFlags=false, trimQuotes=false, unmatchedArgumentsAllowed=false, unmatchedOptionsArePositionalParams=false, useSimplifiedAtFiles=false%n" +
"[picocli DEBUG] (ANSI is disabled by default: ...)%n" +
"[picocli DEBUG] Initializing command 'git' (user object: picocli.Demo$Git@75d4a5c2): 3 options, 0 positional parameters, 0 required, 0 groups, 12 subcommands.%n" +
"[picocli DEBUG] Set initial value for field java.io.File picocli.Demo$Git.gitDir of type class java.io.File to null.%n" +
Expand Down

0 comments on commit 0133955

Please sign in to comment.