Only suggest each flag one time

This commit is contained in:
jmp 2020-10-13 11:21:23 -07:00 committed by Alexander Söderberg
parent 06a34651bf
commit 78796255a2
2 changed files with 21 additions and 4 deletions

View file

@ -199,10 +199,27 @@ public final class FlagArgument<C> extends CommandArgument<C, Object> {
/* We don't care about the last value and so we expect a flag */ /* We don't care about the last value and so we expect a flag */
final List<String> strings = new LinkedList<>(); final List<String> strings = new LinkedList<>();
for (final CommandFlag<?> flag : this.flags) { for (final CommandFlag<?> flag : this.flags) {
strings.add(String.format("--%s", flag.getName())); final String mainFlag = String.format("--%s", flag.getName());
for (final String alias : flag.getAliases()) { final List<String> rawInput = commandContext.getRawInput();
strings.add(String.format("-%s", alias)); if (rawInput.contains(mainFlag)) {
continue; /* Flag was already used */
} }
final List<String> flagAliases = new LinkedList<>();
boolean flagUsed = false;
for (final String alias : flag.getAliases()) {
final String aliasFlag = String.format("-%s", alias);
if (rawInput.contains(aliasFlag)) {
flagUsed = true;
break;
}
flagAliases.add(aliasFlag);
}
if (flagUsed) {
continue; /* Flag was already used via an alias */
}
strings.add(mainFlag);
strings.addAll(flagAliases);
} }
return strings; return strings;
} else { } else {

View file

@ -163,7 +163,7 @@ public class CommandSuggestionsTest {
Assertions.assertEquals(Arrays.asList("foo", "bar"), suggestions2); Assertions.assertEquals(Arrays.asList("foo", "bar"), suggestions2);
final String input3 = "flags 10 --enum foo "; final String input3 = "flags 10 --enum foo ";
final List<String> suggestions3 = manager.suggest(new TestCommandSender(), input3); final List<String> suggestions3 = manager.suggest(new TestCommandSender(), input3);
Assertions.assertEquals(Arrays.asList("--enum", "--static"), suggestions3); Assertions.assertEquals(Collections.singletonList("--static"), suggestions3);
} }