From 936d343fc3bbc9ee02dc198a0ca1ee1c7480b8e7 Mon Sep 17 00:00:00 2001 From: Revxrsal Date: Sun, 22 Sep 2024 14:04:54 +0300 Subject: [PATCH] skip extra whitespace in flag autocompletion --- .../commands/autocomplete/StandardAutoCompleter.java | 9 ++++----- .../revxrsal/commands/stream/MutableStringStream.java | 5 +++++ .../commands/stream/MutableStringStreamImpl.java | 5 +++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/revxrsal/commands/autocomplete/StandardAutoCompleter.java b/common/src/main/java/revxrsal/commands/autocomplete/StandardAutoCompleter.java index 22bd17ff..6e4f9c5a 100644 --- a/common/src/main/java/revxrsal/commands/autocomplete/StandardAutoCompleter.java +++ b/common/src/main/java/revxrsal/commands/autocomplete/StandardAutoCompleter.java @@ -176,7 +176,7 @@ private List complete(ExecutableCommand possible, MutableStringStream List> flags = filter(possible.parameters().values(), c -> c.isFlag() || c.isSwitch()); while (input.hasRemaining()) { if (input.peek() == ' ') - input.moveForward(); + input.skipWhitespace(); String next = input.peekUnquotedString(); if (next.startsWith(LONG_FORMAT_PREFIX)) { String flagName = next.substring(LONG_FORMAT_PREFIX.length()); @@ -185,7 +185,7 @@ private List complete(ExecutableCommand possible, MutableStringStream if (input.hasFinished()) return List.of(); if (input.hasRemaining() && input.peek() == ' ') { - input.moveForward(); + input.skipWhitespace(); } if (input.hasFinished() && parameter != null) { return List.copyOf(parameter.suggestions().getSuggestions(context)); @@ -208,7 +208,7 @@ private List complete(ExecutableCommand possible, MutableStringStream continue; tryParseFlag(parameter, input, context); if (input.hasRemaining() && input.peek() == ' ') { - input.moveForward(); + input.skipWhitespace(); return List.copyOf(parameter.suggestions().getSuggestions(context)); } else if (input.hasFinished()) { return flags.stream().map(f -> { @@ -256,8 +256,7 @@ else if (child instanceof ParameterNode p) return List.of(); } - private @Nullable ParameterNode removeParameterWithShorthand - (List> parametersLeft, char c) { + private @Nullable ParameterNode removeParameterWithShorthand(List> parametersLeft, char c) { for (Iterator> iterator = parametersLeft.iterator(); iterator.hasNext(); ) { ParameterNode value = iterator.next(); Character shorthand = value.shorthand(); diff --git a/common/src/main/java/revxrsal/commands/stream/MutableStringStream.java b/common/src/main/java/revxrsal/commands/stream/MutableStringStream.java index 962a6513..b82e012e 100644 --- a/common/src/main/java/revxrsal/commands/stream/MutableStringStream.java +++ b/common/src/main/java/revxrsal/commands/stream/MutableStringStream.java @@ -51,6 +51,11 @@ public interface MutableStringStream extends StringStream { */ void moveForward(); + /** + * Skips all the upcoming whitespace + */ + void skipWhitespace(); + /** * Moves the cursor 1 step backward */ diff --git a/common/src/main/java/revxrsal/commands/stream/MutableStringStreamImpl.java b/common/src/main/java/revxrsal/commands/stream/MutableStringStreamImpl.java index 4a5c2e8c..1613cd86 100644 --- a/common/src/main/java/revxrsal/commands/stream/MutableStringStreamImpl.java +++ b/common/src/main/java/revxrsal/commands/stream/MutableStringStreamImpl.java @@ -69,6 +69,11 @@ public void moveForward() { moveForward(1); } + @Override public void skipWhitespace() { + while (hasRemaining() && peek() == ' ') + moveForward(); + } + public void moveBackward() { moveBackward(1); }