diff --git a/common/src/main/java/revxrsal/commands/autocomplete/AutoCompleter.java b/common/src/main/java/revxrsal/commands/autocomplete/AutoCompleter.java index db3bc25b..713bfc6d 100644 --- a/common/src/main/java/revxrsal/commands/autocomplete/AutoCompleter.java +++ b/common/src/main/java/revxrsal/commands/autocomplete/AutoCompleter.java @@ -143,6 +143,17 @@ public interface AutoCompleter { */ List complete(@NotNull CommandActor actor, @NotNull String buffer); + /** + * Sets whether should this auto-completer filter suggestions + * to include only the closest suggestions to the user input. + *

+ * By default, this is true. + * + * @param filterToClosestInput Whether should suggestions be + * filtered to the closest input + */ + void filterToClosestInput(boolean filterToClosestInput); + /** * Returns the containing {@link CommandHandler} of this auto completer. * This will allow for writing fluent and readable code. diff --git a/common/src/main/java/revxrsal/commands/core/BaseAutoCompleter.java b/common/src/main/java/revxrsal/commands/core/BaseAutoCompleter.java index 3865a999..829d4eee 100644 --- a/common/src/main/java/revxrsal/commands/core/BaseAutoCompleter.java +++ b/common/src/main/java/revxrsal/commands/core/BaseAutoCompleter.java @@ -46,6 +46,7 @@ final class BaseAutoCompleter implements AutoCompleter { private final BaseCommandHandler handler; final Map suggestionKeys = new HashMap<>(); final List factories = new ArrayList<>(); + private boolean filterToClosestInput = true; public BaseAutoCompleter(BaseCommandHandler handler) { this.handler = handler; @@ -148,6 +149,11 @@ public SuggestionProvider getProvider(CommandParameter parameter) { return complete(actor, ArgumentStack.parseForAutoCompletion(buffer)); } + @Override + public void filterToClosestInput(boolean filterToClosestInput) { + this.filterToClosestInput = filterToClosestInput; + } + private ExecutableCommand searchForCommand(CommandPath path, CommandActor actor) { ExecutableCommand found = handler.getCommand(path); if (found != null && !found.isSecret() && found.getPermission().canExecute(actor)) return found; @@ -223,7 +229,7 @@ private CommandCategory getLastCategory(CommandPath path) { @NotNull private List getParamCompletions(Collection provider, ArgumentStack args) { return provider .stream() - .filter(c -> c.toLowerCase().startsWith(args.getLast().toLowerCase())) + .filter(c -> !filterToClosestInput || c.toLowerCase().startsWith(args.getLast().toLowerCase())) .sorted(String.CASE_INSENSITIVE_ORDER) .distinct() .collect(Collectors.toList());