From 65c6345a4528491c4e4b3924efe15a6d6d24f311 Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Tue, 16 Jun 2020 15:57:02 +0200 Subject: [PATCH] Change CommandUtils argument parsing methods to accept PositionedString --- .../java/de/prob2/jupyter/CommandUtils.java | 18 +++++++++--------- src/main/java/de/prob2/jupyter/ProBKernel.java | 6 +++--- .../java/de/prob2/jupyter/SplitResult.java | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/prob2/jupyter/CommandUtils.java b/src/main/java/de/prob2/jupyter/CommandUtils.java index 9ca689d..cf09dee 100644 --- a/src/main/java/de/prob2/jupyter/CommandUtils.java +++ b/src/main/java/de/prob2/jupyter/CommandUtils.java @@ -92,7 +92,7 @@ public final class CommandUtils { * which means that it will parse any input string without errors * (although the result might not be meaningful). * Use {@link #validateSplitArgs(Parameters, SplitResult)} to validate the result of this method, - * or use {@link #parseArgs(Parameters, String)} to perform splitting and validation in a single call. + * or use {@link #parseArgs(Parameters, PositionedString)} to perform splitting and validation in a single call. * </p> * * @param parameters the parameter specification based on which the arguments should be split @@ -100,9 +100,9 @@ public final class CommandUtils { * @param upToPosition the position in the argument string after which to stop splitting * @return the result of the split operation (see {@link SplitResult} for details) */ - public static @NotNull SplitResult splitArgs(final @NotNull Parameters parameters, final @NotNull String argString, final int upToPosition) { + public static @NotNull SplitResult splitArgs(final @NotNull Parameters parameters, final @NotNull PositionedString argString, final int upToPosition) { final SplitArguments splitArgs = new SplitArguments(Collections.emptyMap()); - PositionedString remainingArgs = new PositionedString(argString, 0); + PositionedString remainingArgs = argString; if (parameters.getBodyParam().isPresent()) { final Matcher bodySplitMatcher = BODY_SPLIT_PATTERN.matcher(remainingArgs.getValue()); if (bodySplitMatcher.find()) { @@ -155,18 +155,18 @@ public final class CommandUtils { * which means that it will parse any input string without errors * (although the result might not be meaningful). * Use {@link #validateSplitArgs(Parameters, SplitResult)} to validate the result of this method, - * or use {@link #parseArgs(Parameters, String)} to perform splitting and validation in a single call. + * or use {@link #parseArgs(Parameters, PositionedString)} to perform splitting and validation in a single call. * </p> * <p> - * This method is equivalent to calling {@link #splitArgs(Parameters, String, int)} with {@code upToPosition} set so that as much as possible of the argument string is consumed. + * This method is equivalent to calling {@link #splitArgs(Parameters, PositionedString, int)} with {@code upToPosition} set so that as much as possible of the argument string is consumed. * </p> * * @param parameters the parameter specification based on which the arguments should be split * @param argString the argument string to split * @return the result of the split operation (see {@link SplitResult} for details) */ - public static @NotNull SplitResult splitArgs(final @NotNull Parameters parameters, final @NotNull String argString) { - return splitArgs(parameters, argString, argString.length()); + public static @NotNull SplitResult splitArgs(final @NotNull Parameters parameters, final @NotNull PositionedString argString) { + return splitArgs(parameters, argString, argString.getStartPosition() + argString.getValue().length()); } private static <T> void validateSplitParameter(final @NotNull ParsedArguments parsed, final @NotNull SplitArguments splitArgs, final @NotNull Parameter<T> param) { @@ -199,14 +199,14 @@ public final class CommandUtils { /** * Parse an argument string according to the given parameter specification. - * This is a shorthand for calling {@link #splitArgs(Parameters, String)} followed by {@link #validateSplitArgs(Parameters, SplitResult)}. + * This is a shorthand for calling {@link #splitArgs(Parameters, PositionedString)} followed by {@link #validateSplitArgs(Parameters, SplitResult)}. * * @param parameters the parameter specification based on which the argument string should be parsed * @param argString the argument string to parse * @return the parsed and validated argument string * @throws UserErrorException if the argument string is invalid */ - public static @NotNull ParsedArguments parseArgs(final @NotNull Parameters parameters, final @NotNull String argString) { + public static @NotNull ParsedArguments parseArgs(final @NotNull Parameters parameters, final @NotNull PositionedString argString) { return validateSplitArgs(parameters, splitArgs(parameters, argString)); } diff --git a/src/main/java/de/prob2/jupyter/ProBKernel.java b/src/main/java/de/prob2/jupyter/ProBKernel.java index da1fd8e..7e5e0bf 100644 --- a/src/main/java/de/prob2/jupyter/ProBKernel.java +++ b/src/main/java/de/prob2/jupyter/ProBKernel.java @@ -301,7 +301,7 @@ public final class ProBKernel extends BaseKernel { } final DisplayData result; try { - result = command.run(CommandUtils.parseArgs(command.getParameters(), argString)); + result = command.run(CommandUtils.parseArgs(command.getParameters(), new PositionedString(argString, 0))); } catch (final UserErrorException e) { throw new CommandExecutionException(name, e); } @@ -355,7 +355,7 @@ public final class ProBKernel extends BaseKernel { } private static @Nullable DisplayData inspectCommandArguments(final @NotNull Command command, final @NotNull String argString, final int at) { - final SplitResult split = CommandUtils.splitArgs(command.getParameters(), argString, at); + final SplitResult split = CommandUtils.splitArgs(command.getParameters(), new PositionedString(argString, 0), at); if (split.getParameterAtPosition().isPresent()) { final Optional<Inspector> inspector = command.getParameterInspectors().getInspectorForParameter(split.getParameterAtPosition().get()); if (inspector.isPresent()) { @@ -412,7 +412,7 @@ public final class ProBKernel extends BaseKernel { } private static @Nullable ReplacementOptions completeCommandArguments(final @NotNull Command command, final @NotNull String argString, final int at) { - final SplitResult split = CommandUtils.splitArgs(command.getParameters(), argString, at); + final SplitResult split = CommandUtils.splitArgs(command.getParameters(), new PositionedString(argString, 0), at); if (split.getParameterAtPosition().isPresent()) { final Optional<Completer> completer = command.getParameterCompleters().getCompleterForParameter(split.getParameterAtPosition().get()); if (completer.isPresent()) { diff --git a/src/main/java/de/prob2/jupyter/SplitResult.java b/src/main/java/de/prob2/jupyter/SplitResult.java index ec067a8..cda20c3 100644 --- a/src/main/java/de/prob2/jupyter/SplitResult.java +++ b/src/main/java/de/prob2/jupyter/SplitResult.java @@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** - * The unvalidated result of a command argument splitting operation ({@link CommandUtils#splitArgs(Parameters, String, int)} or {@link CommandUtils#splitArgs(Parameters, String)}). + * The unvalidated result of a command argument splitting operation ({@link CommandUtils#splitArgs(Parameters, PositionedString, int)} or {@link CommandUtils#splitArgs(Parameters, PositionedString)}). */ public final class SplitResult { private final @NotNull SplitArguments arguments; @@ -37,7 +37,7 @@ public final class SplitResult { /** * Return the parameter to which the last split argument belongs, * or {@link Optional#empty()} if no arguments have been split. - * This information is mainly useful when calling {@link CommandUtils#splitArgs(Parameters, String, int)} with an explicit {@code upToPosition} argument. + * This information is mainly useful when calling {@link CommandUtils#splitArgs(Parameters, PositionedString, int)} with an explicit {@code upToPosition} argument. * * @return the parameter to which the last split argument belongs, * or {@link Optional#empty()} if no arguments have been split -- GitLab