private @NonNull CompletableFuture<@NonNull Suggestions<C, S>> suggestFromTree(
            final @NonNull CommandContext<C> context,
            final @NonNull String input
    ) {
        final @NonNull CommandInput commandInput = CommandInput.of(input);
        /* Store a copy of the input queue in the context */
        context.store("__raw_input__", commandInput.copy());

        if (this.commandManager.preprocessContext(context, commandInput) != State.ACCEPTED) {
            if (this.commandManager.settings().get(ManagerSetting.FORCE_SUGGESTION)) {
                return CompletableFuture.completedFuture(Suggestions.create(context, this.singleEmptySuggestion, commandInput));
            }
            return CompletableFuture.completedFuture(Suggestions.create(context, Collections.emptyList(), commandInput));
        }

        return this.executionCoordinator.coordinateSuggestions(this.commandTree, context, commandInput, this.mapper)
                .thenApply(suggestions -> {
                    if (this.commandManager.settings().get(ManagerSetting.FORCE_SUGGESTION) && suggestions.list().isEmpty()) {
                        return Suggestions.create(suggestions.commandContext(), this.singleEmptySuggestion, commandInput);
                    }
                    return suggestions;
                });
    }
Creates a new {@link DelegatingSuggestionFactory}.

@param commandManager       the command manager
@param commandTree          the command tree
@param contextFactory       the context factory
@param executionCoordinator the execution coordinator
@param mapper               the suggestion mapper
cloud-core/src/main/java/org/incendo/cloud/suggestion/DelegatingSuggestionFactory.java