Skip to content

Commit 2695171

Browse files
committed
align with actual PR at cloud
1 parent e908088 commit 2695171

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

patches/0003-fix-invalid-suggestions-caused-by-dynamic-arguments.patch

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,38 @@ Subject: [PATCH] fix invalid suggestions caused by dynamic arguments
55

66

77
diff --git a/cloud-core/src/main/java/cloud/commandframework/CommandTree.java b/cloud-core/src/main/java/cloud/commandframework/CommandTree.java
8-
index 668239c78e25c999c6fbc9c32251b794e09cd80e..f4b95ea61e77ac0da7abed7f25588328e27238f0 100644
8+
index 668239c78e25c999c6fbc9c32251b794e09cd80e..053f5b1def212f0d3cef1a5db527fcdd2363952d 100644
99
--- a/cloud-core/src/main/java/cloud/commandframework/CommandTree.java
1010
+++ b/cloud-core/src/main/java/cloud/commandframework/CommandTree.java
11-
@@ -702,9 +702,25 @@ public final class CommandTree<C> {
11+
@@ -702,10 +702,25 @@ public final class CommandTree<C> {
1212
// START: Parsing
1313
commandContext.setCurrentArgument(child.getValue());
1414
final ArgumentParseResult<?> result = child.getValue().getParser().parse(commandContext, commandQueue);
1515
- if (result.getParsedValue().isPresent() && !commandQueue.isEmpty()) {
1616
- commandContext.store(child.getValue().getName(), result.getParsedValue().get());
17-
- return this.getSuggestions(commandContext, commandQueue, child);
1817
+ // CloudNet start - fix suggestions for dynamic arguments
1918
+ final Optional<?> parsedValue = result.getParsedValue();
2019
+ final boolean parseSuccess = parsedValue.isPresent();
2120
+
22-
+ if ((parseSuccess && !commandQueue.isEmpty()) || (!parseSuccess && commandQueue.size() > 1)) {
23-
+ if (parseSuccess) {
24-
+ // the current argument at the position is parsable and there are more arguments following
25-
+ commandContext.store(child.getValue().getName(), parsedValue.get());
26-
+ return this.getSuggestions(commandContext, commandQueue, child);
27-
+ } else {
28-
+ // at this point there should normally be no need to reset the command queue as we expect
29-
+ // users to only take out an argument if the parse succeeded. Just to be sure we do it anyway
30-
+ commandQueue.clear();
31-
+ commandQueue.addAll(commandQueueOriginal);
32-
+ // there are more arguments following but the current argument isn't matching - there
33-
+ // is no need to collect any further suggestions
34-
+ return Collections.emptyList();
35-
+ }
36-
+ // CloudNet end
21+
+ if (parseSuccess && !commandQueue.isEmpty()) {
22+
+ // the current argument at the position is parsable and there are more arguments following
23+
+ commandContext.store(child.getValue().getName(), parsedValue.get());
24+
return this.getSuggestions(commandContext, commandQueue, child);
25+
+ } else if (!parseSuccess && commandQueueOriginal.size() > 1) {
26+
+ // at this point there should normally be no need to reset the command queue as we expect
27+
+ // users to only take out an argument if the parse succeeded. Just to be sure we reset anyway
28+
+ commandQueue.clear();
29+
+ commandQueue.addAll(commandQueueOriginal);
30+
+
31+
+ // there are more arguments following but the current argument isn't matching - there
32+
+ // is no need to collect any further suggestions
33+
+ return Collections.emptyList();
3734
}
35+
+ // CloudNet end
3836
// END: Parsing
3937
}
40-
@@ -713,6 +729,15 @@ public final class CommandTree<C> {
38+
39+
@@ -713,6 +728,15 @@ public final class CommandTree<C> {
4140
commandQueue.clear();
4241
commandQueue.addAll(commandQueueOriginal);
4342

0 commit comments

Comments
 (0)