Skip to content

Commit 84354a9

Browse files
authored
Fix #2501 by including function in option auto complete function name (#2502)
* drop down hyphen to underscore in autocomplete bash script * check and remove duplicate function sub hierarchy aliases * refactor for java 5 * include function name in option auto completion function name
1 parent 637a487 commit 84354a9

1 file changed

Lines changed: 11 additions & 5 deletions

File tree

src/main/java/picocli/AutoComplete.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -777,11 +777,17 @@ private static void generatePositionParamCompletionCandidates(StringBuilder buff
777777
}
778778

779779
private static void generateCompletionCandidates(StringBuilder buff, OptionSpec f) {
780-
buff.append(format(" local %s_option_args=(\"%s\") # %s values\n",
781-
bashify(f.paramLabel()),
782-
concat("\" \"", extract(f.completionCandidates())).trim(),
783-
f.longestName()));
780+
buff.append(generateCompletionCandidates(f));
781+
}
782+
783+
private static String generateCompletionCandidates(OptionSpec f) {
784+
return format(" local %s_%s_option_args=(\"%s\") # %s values\n",
785+
bashify(f.longestName()).replaceFirst("^_+", ""),
786+
bashify(f.paramLabel()),
787+
concat("\" \"", extract(f.completionCandidates())).trim(),
788+
f.longestName());
784789
}
790+
785791
private static List<String> extract(Iterable<String> generator) {
786792
List<String> result = new ArrayList<String>();
787793
for (String e : generator) {
@@ -848,7 +854,7 @@ private static String generateOptionsCases(List<OptionSpec> argOptionFields, Str
848854
if (option.completionCandidates() != null) {
849855
buff.append(format("%s %s)\n", indent, concat("|", option.names(), null, new SingleQuoteFunction()))); // " -u|--timeUnit)\n"
850856
buff.append(format("%s local IFS=$'\\n'\n", indent));
851-
buff.append(format("%s COMPREPLY=( $( compReplyArray \"${%s_option_args[@]}\" ) )\n", indent, bashify(option.paramLabel())));
857+
buff.append(format("%s COMPREPLY=( $( compReplyArray \"${%s_option_args[@]}\" ) )\n", indent, generateCompletionCandidates(option)));
852858
buff.append(format("%s return $?\n", indent));
853859
buff.append(format("%s ;;\n", indent));
854860
} else if (type.equals(File.class) || "java.nio.file.Path".equals(type.getName())) {

0 commit comments

Comments
 (0)