🐛 Fix wrong suggestions following an invalid literal (#72)
* ✅ Add a test for suggestions after an invalid literal * 🐛 Fix wrong suggestions following an invalid literal * 📚 Document literal suggestion fix in CHANGELOG Co-authored-by: Alexander Söderberg <sauilitired@gmail.com>
This commit is contained in:
parent
27d228cb4c
commit
c051ff20df
3 changed files with 25 additions and 2 deletions
|
|
@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Fixed quoted parsing in StringArgument
|
- Fixed quoted parsing in StringArgument
|
||||||
|
- Fixed wrong suggestions following invalid literals
|
||||||
|
|
||||||
## [1.0.1] - 2020-10-14
|
## [1.0.1] - 2020-10-14
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -541,14 +541,23 @@ public final class CommandTree<C> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (commandQueue.size() > 1) {
|
||||||
|
/*
|
||||||
|
* In this case we were unable to match any of the literals, and so we cannot
|
||||||
|
* possibly attempt to match any of its children (which is what we want, according
|
||||||
|
* to the input queue). Because of this, we terminate immediately
|
||||||
|
*/
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
final List<String> suggestions = new LinkedList<>();
|
final List<String> suggestions = new LinkedList<>();
|
||||||
for (final Node<CommandArgument<C, ?>> argument : root.getChildren()) {
|
for (final Node<CommandArgument<C, ?>> argument : root.getChildren()) {
|
||||||
if (argument.getValue() == null || this.isPermitted(commandContext.getSender(), argument) != null) {
|
if (argument.getValue() == null || this.isPermitted(commandContext.getSender(), argument) != null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
suggestions.addAll(argument.getValue().getSuggestionsProvider()
|
final List<String> suggestionsToAdd = argument.getValue().getSuggestionsProvider()
|
||||||
.apply(commandContext, stringOrEmpty(commandQueue.peek())));
|
.apply(commandContext, stringOrEmpty(commandQueue.peek()));
|
||||||
|
suggestions.addAll(suggestionsToAdd);
|
||||||
}
|
}
|
||||||
return suggestions;
|
return suggestions;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -191,6 +191,19 @@ public class CommandSuggestionsTest {
|
||||||
Assertions.assertEquals(Arrays.asList("5", "6", "7", "8", "9"), suggestions5);
|
Assertions.assertEquals(Arrays.asList("5", "6", "7", "8", "9"), suggestions5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testInvalidLiteralThenSpace() {
|
||||||
|
final String input = "test o";
|
||||||
|
final List<String> suggestions = manager.suggest(new TestCommandSender(), input);
|
||||||
|
Assertions.assertEquals(Collections.singletonList("one"), suggestions);
|
||||||
|
final String input2 = "test o ";
|
||||||
|
final List<String> suggestions2 = manager.suggest(new TestCommandSender(), input2);
|
||||||
|
Assertions.assertEquals(Collections.emptyList(), suggestions2);
|
||||||
|
final String input3 = "test o abc123xyz";
|
||||||
|
final List<String> suggestions3 = manager.suggest(new TestCommandSender(), input3);
|
||||||
|
Assertions.assertEquals(Collections.emptyList(), suggestions3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public enum TestEnum {
|
public enum TestEnum {
|
||||||
FOO,
|
FOO,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue