Skip to content

Commit

Permalink
better flag tab completions for /ex
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Mar 22, 2023
1 parent a595ea5 commit bf2dec0
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 19 deletions.
Expand Up @@ -8,6 +8,7 @@
import com.denizenscript.denizencore.scripts.ScriptRegistry;
import com.denizenscript.denizencore.scripts.commands.generator.CommandExecutionGenerator;
import com.denizenscript.denizencore.scripts.containers.ScriptContainer;
import com.denizenscript.denizencore.tags.TagContext;
import com.denizenscript.denizencore.utilities.CoreConfiguration;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.EnumHelper;
Expand Down Expand Up @@ -63,6 +64,8 @@ public static class TabCompletionsBuilder {

public ArrayList<String> completions = new ArrayList<>();

public TagContext context;

public final void addWithPrefix(String prefix, Iterable<String> values) {
if (arg.startsWith(prefix)) {
for (String val : values) {
Expand Down
Expand Up @@ -16,7 +16,10 @@
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.denizencore.utilities.text.StringHolder;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

public class FlagCommand extends AbstractCommand {

Expand Down Expand Up @@ -152,8 +155,9 @@ public FlagCommand() {
// - flag server myflag[3]:HelloWorld
// -->

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
public static List<Consumer<TabCompletionsBuilder>> flagTabCompleters = new ArrayList<>();

public static void tabCompleteFlag(TabCompletionsBuilder tab) {
if (tab.arg.contains(":")) {
return;
}
Expand All @@ -162,6 +166,14 @@ public void addCustomTabCompletions(TabCompletionsBuilder tab) {
tab.add(flagName);
}
}
for (Consumer<TabCompletionsBuilder> consumer : flagTabCompleters) {
consumer.accept(tab);
}
}

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
tabCompleteFlag(tab);
}

@Override
Expand Down
Expand Up @@ -8,14 +8,15 @@
import com.denizenscript.denizencore.scripts.ScriptBuilder;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import com.denizenscript.denizencore.scripts.commands.AbstractCommand;
import com.denizenscript.denizencore.scripts.commands.core.FlagCommand;
import com.denizenscript.denizencore.scripts.queues.ScriptQueue;
import com.denizenscript.denizencore.scripts.queues.core.InstantQueue;
import com.denizenscript.denizencore.scripts.queues.core.TimedQueue;
import com.denizenscript.denizencore.tags.ObjectTagProcessor;
import com.denizenscript.denizencore.tags.TagContext;
import com.denizenscript.denizencore.tags.TagManager;

import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
Expand Down Expand Up @@ -81,7 +82,7 @@ public static boolean removeSustainedQueue(Object source) {
return queue != null && !queue.isStopped;
}

public static List<String> buildTabCompletions(String[] rawArgs, BiConsumer<AbstractCommand, AbstractCommand.TabCompletionsBuilder> commandExtras) {
public static List<String> buildTabCompletions(String[] rawArgs, TagContext context) {
String entry = String.join(" ", rawArgs);
if (entry.length() > 3 && entry.startsWith("-q ")) {
entry = entry.substring("-q ".length());
Expand All @@ -102,6 +103,10 @@ public static List<String> buildTabCompletions(String[] rawArgs, BiConsumer<Abst
}
return output;
}
String lowArg = CoreUtilities.toLowerCase(rawArgs[rawArgs.length - 1]);
AbstractCommand.TabCompletionsBuilder completionsBuilder = new AbstractCommand.TabCompletionsBuilder();
completionsBuilder.arg = lowArg;
completionsBuilder.context = context;
if (!isNewArg) {
String lastArg = rawArgs[rawArgs.length - 1];
int argStart = 0;
Expand Down Expand Up @@ -198,19 +203,30 @@ else if (typesApplicable != null) {
return output;
}
String subComponent = fullTag.substring(lastDot);
if (lastDot > 0 && !CoreUtilities.contains(subComponent, '[')) {
ArrayList<String> output = new ArrayList<>();
for (Class<? extends ObjectTag> possibleType : typesApplicable) {
ObjectType<? extends ObjectTag> typeData = ObjectFetcher.getType(possibleType);
if (typeData != null && typeData.tagProcessor != null) {
for (String tag : typeData.tagProcessor.registeredObjectTags.keySet()) {
if (tag.startsWith(subComponent)) {
output.add(beforeDot + tag);
if (lastDot > 0) {
int squareBracket = subComponent.indexOf('[');
if (squareBracket == -1) {
ArrayList<String> output = new ArrayList<>();
for (Class<? extends ObjectTag> possibleType : typesApplicable) {
ObjectType<? extends ObjectTag> typeData = ObjectFetcher.getType(possibleType);
if (typeData != null && typeData.tagProcessor != null) {
for (String tag : typeData.tagProcessor.registeredObjectTags.keySet()) {
if (tag.startsWith(subComponent)) {
output.add(beforeDot + tag);
}
}
}
}
return output;
}
else {
String tagPiece = subComponent.substring(0, squareBracket);
if (tagPiece.startsWith("flag") || tagPiece.equals("has_flag")) {
completionsBuilder.arg = subComponent.substring(squareBracket + 1);
FlagCommand.tabCompleteFlag(completionsBuilder);
return completionsBuilder.completions;
}
}
return output;
}
}
}
Expand All @@ -224,19 +240,13 @@ else if (typesApplicable != null) {
if (dcmd == null) {
return null;
}
String lowArg = CoreUtilities.toLowerCase(rawArgs[rawArgs.length - 1]);
AbstractCommand.TabCompletionsBuilder completionsBuilder = new AbstractCommand.TabCompletionsBuilder();
completionsBuilder.arg = lowArg;
for (String flat : dcmd.docFlagArgs) {
completionsBuilder.add(flat);
}
for (String prefix : dcmd.docPrefixes) {
completionsBuilder.add(prefix + ":");
}
dcmd.addCustomTabCompletions(completionsBuilder);
if (commandExtras != null) {
commandExtras.accept(dcmd, completionsBuilder);
}
return completionsBuilder.completions;
}
}

0 comments on commit bf2dec0

Please sign in to comment.