diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/StandardCommandSyntaxFormatter.java b/cloud-core/src/main/java/cloud/commandframework/arguments/StandardCommandSyntaxFormatter.java index 8602dfdb..2b89b0c9 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/StandardCommandSyntaxFormatter.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/StandardCommandSyntaxFormatter.java @@ -25,6 +25,8 @@ package cloud.commandframework.arguments; import cloud.commandframework.CommandTree; import cloud.commandframework.arguments.compound.CompoundArgument; +import cloud.commandframework.arguments.compound.FlagArgument; +import cloud.commandframework.arguments.flags.CommandFlag; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -66,10 +68,27 @@ public class StandardCommandSyntaxFormatter implements CommandSyntaxFormatter } } stringBuilder.append(suffix); - } else if (commandArgument.isRequired()) { - stringBuilder.append("<").append(commandArgument.getName()).append(">"); } else { - stringBuilder.append("[").append(commandArgument.getName()).append("]"); + String name = commandArgument.getName(); + + if (commandArgument instanceof FlagArgument) { + final StringBuilder flagBuilder = new StringBuilder(); + @SuppressWarnings("unchecked") + final Iterator> flagIterator = ((FlagArgument) commandArgument).getFlags().iterator(); + while (flagIterator.hasNext()) { + flagBuilder.append("--").append(flagIterator.next().getName()); + if (flagIterator.hasNext()) { + flagBuilder.append(" | "); + } + } + name = flagBuilder.toString(); + } + + if (commandArgument.isRequired()) { + stringBuilder.append("<").append(name).append(">"); + } else { + stringBuilder.append("[").append(name).append("]"); + } } } if (iterator.hasNext()) { @@ -115,6 +134,20 @@ public class StandardCommandSyntaxFormatter implements CommandSyntaxFormatter } } stringBuilder.append(suffix); + } else if (argument instanceof FlagArgument) { + final StringBuilder flagBuilder = new StringBuilder(); + @SuppressWarnings("unchecked") + final Iterator> flagIterator = ((FlagArgument) argument).getFlags().iterator(); + while (flagIterator.hasNext()) { + flagBuilder.append("--").append(flagIterator.next().getName()); + if (flagIterator.hasNext()) { + flagBuilder.append(" | "); + } + } + stringBuilder.append(" ") + .append(prefix) + .append(flagBuilder) + .append(suffix); } else { stringBuilder.append(" ") .append(prefix) diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/FlagArgument.java b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/FlagArgument.java index d135d99e..963868d3 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/compound/FlagArgument.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/compound/FlagArgument.java @@ -45,7 +45,7 @@ import java.util.function.BiFunction; * * @param Command sender type */ -public class FlagArgument extends CommandArgument { +public final class FlagArgument extends CommandArgument { /** * Dummy object that indicates that flags were parsed successfully @@ -58,6 +58,7 @@ public class FlagArgument extends CommandArgument { private static final String FLAG_ARGUMENT_NAME = "flags"; + private final Collection<@NonNull CommandFlag> flags; /** * Construct a new flag argument * @@ -68,8 +69,19 @@ public class FlagArgument extends CommandArgument { FLAG_ARGUMENT_NAME, new FlagArgumentParser<>(flags.toArray(new CommandFlag[0])), Object.class); + this.flags = flags; } + /** + * Get the flags registered in the argument + * + * @return Unmodifiable view of flags + */ + public @NonNull Collection<@NonNull CommandFlag> getFlags() { + return Collections.unmodifiableCollection(this.flags); + } + + public static final class FlagArgumentParser implements ArgumentParser { private final CommandFlag[] flags;