From 990738c0194214bd43791486966fca661cd01ecf Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Wed, 3 Jun 2020 17:27:27 +0200 Subject: [PATCH] Re-implement command inspection feature based on new argument parsing CommandUtils.splitArgs now takes an extra (optional) parameter to ask it to not split the entire argument string, but only up to the argument at the given offset in the string. The returned SplitResult contains information about which parameter the argument splitting stopped at. This is used in the new implementation of the inspection feature: when the kernel is asked to inspect at a certain position, the arguments are split up to that position, and the argument at that position is inspected. (The arguments are only split and not fully parsed, because inspection should be possible even if the command arguments are still incomplete or otherwise invalid.) This new implementation replaces the old separate implementation in CommandUtils.splitArgs. --- src/main/java/de/prob2/jupyter/Command.java | 2 +- .../java/de/prob2/jupyter/CommandUtils.java | 41 +++++++++---------- .../de/prob2/jupyter/ParameterInspectors.java | 41 +++++++++++++++++++ .../java/de/prob2/jupyter/ProBKernel.java | 22 +++++++++- .../java/de/prob2/jupyter/SplitResult.java | 22 +++++++++- .../prob2/jupyter/commands/AssertCommand.java | 8 ++-- .../prob2/jupyter/commands/BrowseCommand.java | 5 ++- .../prob2/jupyter/commands/BsymbCommand.java | 5 ++- .../prob2/jupyter/commands/CheckCommand.java | 6 +-- .../jupyter/commands/ConstantsCommand.java | 8 ++-- .../de/prob2/jupyter/commands/DotCommand.java | 13 +++--- .../prob2/jupyter/commands/EvalCommand.java | 8 ++-- .../prob2/jupyter/commands/ExecCommand.java | 13 +++--- .../prob2/jupyter/commands/FindCommand.java | 8 ++-- .../prob2/jupyter/commands/GotoCommand.java | 5 ++- .../prob2/jupyter/commands/GroovyCommand.java | 5 ++- .../prob2/jupyter/commands/HelpCommand.java | 6 +-- .../jupyter/commands/InitialiseCommand.java | 8 ++-- .../de/prob2/jupyter/commands/LetCommand.java | 5 ++- .../jupyter/commands/LoadCellCommand.java | 16 ++++---- .../jupyter/commands/LoadFileCommand.java | 13 +++--- .../jupyter/commands/ModelCheckCommand.java | 5 ++- .../prob2/jupyter/commands/PrefCommand.java | 7 +++- .../jupyter/commands/PrettyPrintCommand.java | 8 ++-- .../prob2/jupyter/commands/RenderCommand.java | 5 ++- .../prob2/jupyter/commands/ShowCommand.java | 5 ++- .../prob2/jupyter/commands/SolveCommand.java | 13 +++--- .../prob2/jupyter/commands/StatsCommand.java | 5 ++- .../prob2/jupyter/commands/TableCommand.java | 8 ++-- .../prob2/jupyter/commands/TimeCommand.java | 7 +++- .../prob2/jupyter/commands/TraceCommand.java | 5 ++- .../prob2/jupyter/commands/TypeCommand.java | 8 ++-- .../prob2/jupyter/commands/UnletCommand.java | 5 ++- .../jupyter/commands/VersionCommand.java | 5 ++- 34 files changed, 230 insertions(+), 116 deletions(-) create mode 100644 src/main/java/de/prob2/jupyter/ParameterInspectors.java diff --git a/src/main/java/de/prob2/jupyter/Command.java b/src/main/java/de/prob2/jupyter/Command.java index ee1361a..01fccee 100644 --- a/src/main/java/de/prob2/jupyter/Command.java +++ b/src/main/java/de/prob2/jupyter/Command.java @@ -43,7 +43,7 @@ public interface Command { public abstract @Nullable DisplayData run(final @NotNull ParsedArguments args); - public abstract @Nullable DisplayData inspect(final @NotNull String argString, final int at); + public abstract @NotNull ParameterInspectors getParameterInspectors(); public abstract @Nullable ReplacementOptions complete(final @NotNull String argString, final int at); } diff --git a/src/main/java/de/prob2/jupyter/CommandUtils.java b/src/main/java/de/prob2/jupyter/CommandUtils.java index 10c9735..c36d84e 100644 --- a/src/main/java/de/prob2/jupyter/CommandUtils.java +++ b/src/main/java/de/prob2/jupyter/CommandUtils.java @@ -90,7 +90,7 @@ public final class CommandUtils { } } - public static @NotNull SplitResult splitArgs(final @NotNull Parameters parameters, final @NotNull String argString) { + public static @NotNull SplitResult splitArgs(final @NotNull Parameters parameters, final @NotNull String argString, final int upToPosition) { final SplitArguments splitArgs = new SplitArguments(Collections.emptyMap()); PositionedString remainingArgs = new PositionedString(argString, 0); if (parameters.getBodyParam().isPresent()) { @@ -102,6 +102,7 @@ public final class CommandUtils { } } + Parameter<?> parameterAtPosition = null; for (int i = 0; i < parameters.getPositionalParameters().size();) { final Parameter<?> param = parameters.getPositionalParameters().get(i); if (remainingArgs.getValue().isEmpty()) { @@ -112,12 +113,29 @@ public final class CommandUtils { splitArgs.add(param, splitSingleArg.getSplitArg()); remainingArgs = splitSingleArg.getRemainingArgString(); + if (remainingArgs.getValue().isEmpty() || remainingArgs.getStartPosition() > upToPosition) { + parameterAtPosition = param; + break; + } + if (!param.isRepeating()) { i++; } } - return new SplitResult(splitArgs, remainingArgs); + if (parameters.getBodyParam().isPresent() && splitArgs.containsKey(parameters.getBodyParam().get())) { + final List<PositionedString> bodyParamValues = splitArgs.get(parameters.getBodyParam().get()); + assert bodyParamValues.size() == 1; + if (upToPosition >= bodyParamValues.get(0).getStartPosition()) { + parameterAtPosition = parameters.getBodyParam().get(); + } + } + + return new SplitResult(splitArgs, parameterAtPosition, remainingArgs); + } + + public static @NotNull SplitResult splitArgs(final @NotNull Parameters parameters, final @NotNull String argString) { + return splitArgs(parameters, argString, argString.length()); } private static <T> void validateSplitParameter(final @NotNull ParsedArguments parsed, final @NotNull SplitArguments splitArgs, final @NotNull Parameter<T> param) { @@ -290,25 +308,6 @@ public final class CommandUtils { ); } - public static @Nullable DisplayData inspectArgs(final @NotNull String argString, final int at, final @NotNull Inspector @NotNull... inspectors) { - final Matcher argSplitMatcher = ARG_SPLIT_PATTERN.matcher(argString); - int argStart = 0; - int argEnd = argString.length(); - int i = 0; - while (argSplitMatcher.find()) { - if (argSplitMatcher.end() > at) { - argEnd = argSplitMatcher.start(); - break; - } - argStart = argSplitMatcher.end(); - if (i >= inspectors.length-1) { - break; - } - i++; - } - return inspectors[i].inspect(argString.substring(argStart, argEnd), at - argStart); - } - public static @Nullable ReplacementOptions completeArgs(final @NotNull String argString, final int at, final @NotNull Completer @NotNull... completers) { final Matcher argSplitMatcher = ARG_SPLIT_PATTERN.matcher(argString); int argStart = 0; diff --git a/src/main/java/de/prob2/jupyter/ParameterInspectors.java b/src/main/java/de/prob2/jupyter/ParameterInspectors.java new file mode 100644 index 0000000..e848396 --- /dev/null +++ b/src/main/java/de/prob2/jupyter/ParameterInspectors.java @@ -0,0 +1,41 @@ +package de.prob2.jupyter; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import com.google.common.base.MoreObjects; + +import org.jetbrains.annotations.NotNull; + +public final class ParameterInspectors { + public static final @NotNull ParameterInspectors NONE = new ParameterInspectors(Collections.emptyMap()); + + private final @NotNull Map<@NotNull Parameter<?>, CommandUtils.@NotNull Inspector> inspectors; + + public ParameterInspectors(final @NotNull Map<@NotNull Parameter<?>, CommandUtils.@NotNull Inspector> inspectors) { + super(); + + this.inspectors = Collections.unmodifiableMap(new HashMap<>(inspectors)); + } + + public @NotNull Map<@NotNull Parameter<?>, CommandUtils.@NotNull Inspector> getInspectors() { + return this.inspectors; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("inspectors", this.getInspectors()) + .toString(); + } + + public @NotNull Optional<CommandUtils.Inspector> getInspectorForParameter(final @NotNull Parameter<?> parameter) { + if (this.getInspectors().containsKey(parameter)) { + return Optional.of(this.getInspectors().get(parameter)); + } else { + return Optional.empty(); + } + } +} diff --git a/src/main/java/de/prob2/jupyter/ProBKernel.java b/src/main/java/de/prob2/jupyter/ProBKernel.java index 9e6f0c4..b2c9864 100644 --- a/src/main/java/de/prob2/jupyter/ProBKernel.java +++ b/src/main/java/de/prob2/jupyter/ProBKernel.java @@ -13,6 +13,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Properties; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; @@ -353,6 +354,23 @@ 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); + if (split.getParameterAtPosition().isPresent()) { + final Optional<CommandUtils.Inspector> inspector = command.getParameterInspectors().getInspectorForParameter(split.getParameterAtPosition().get()); + if (inspector.isPresent()) { + final List<PositionedString> argsAtPosition = split.getArguments().get(split.getParameterAtPosition().get()); + assert !argsAtPosition.isEmpty(); + final PositionedString lastArgument = argsAtPosition.get(argsAtPosition.size() - 1); + return inspector.get().inspect(lastArgument.getValue(), at - lastArgument.getStartPosition()); + } else { + return null; + } + } else { + return null; + } + } + @Override public @Nullable DisplayData inspect(final @NotNull String code, final int at, final boolean extraDetail) { // Note: We ignore the extraDetail parameter, because in practice it is always false. This is because the inspect_request messages sent by Jupyter Notebook always have their detail_level set to 0. @@ -373,7 +391,7 @@ public final class ProBKernel extends BaseKernel { // The cursor is somewhere in the command arguments, ask the command to inspect. assert name != null; final String argString = commandMatcher.group(2) == null ? "" : commandMatcher.group(2); - return command.inspect(argString, at - argOffset); + return inspectCommandArguments(command, argString, at - argOffset); } } else { // Invalid command, can't inspect. @@ -381,7 +399,7 @@ public final class ProBKernel extends BaseKernel { } } else { // The code is not a valid command, ask :eval to inspect. - return this.getCommands().get(":eval").inspect(code, at); + return inspectCommandArguments(this.getCommands().get(":eval"), code, at); } } diff --git a/src/main/java/de/prob2/jupyter/SplitResult.java b/src/main/java/de/prob2/jupyter/SplitResult.java index 5ae4694..1cf5768 100644 --- a/src/main/java/de/prob2/jupyter/SplitResult.java +++ b/src/main/java/de/prob2/jupyter/SplitResult.java @@ -1,15 +1,22 @@ package de.prob2.jupyter; +import java.util.Optional; + +import com.google.common.base.MoreObjects; + import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public final class SplitResult { private final @NotNull SplitArguments arguments; + private final @Nullable Parameter<?> parameterAtPosition; private final @NotNull PositionedString remaining; - public SplitResult(final @NotNull SplitArguments arguments, final @NotNull PositionedString remaining) { + public SplitResult(final @NotNull SplitArguments arguments, final @Nullable Parameter<?> parameterAtPosition, final @NotNull PositionedString remaining) { super(); this.arguments = arguments; + this.parameterAtPosition = parameterAtPosition; this.remaining = remaining; } @@ -17,7 +24,20 @@ public final class SplitResult { return this.arguments; } + public @NotNull Optional<Parameter<?>> getParameterAtPosition() { + return Optional.ofNullable(this.parameterAtPosition); + } + public @NotNull PositionedString getRemaining() { return this.remaining; } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("arguments", this.getArguments()) + .add("parameterAtPosition", this.getParameterAtPosition()) + .add("remaining", this.getRemaining()) + .toString(); + } } diff --git a/src/main/java/de/prob2/jupyter/commands/AssertCommand.java b/src/main/java/de/prob2/jupyter/commands/AssertCommand.java index b886c6f..cfe9e22 100644 --- a/src/main/java/de/prob2/jupyter/commands/AssertCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/AssertCommand.java @@ -12,6 +12,7 @@ import de.prob.statespace.AnimationSelector; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -22,7 +23,6 @@ import io.github.spencerpark.jupyter.kernel.display.DisplayData; import io.github.spencerpark.jupyter.kernel.display.mime.MIMEType; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class AssertCommand implements Command { private static final @NotNull Parameter.RequiredSingle FORMULA_PARAM = Parameter.requiredRemainder("formula"); @@ -84,8 +84,10 @@ public final class AssertCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + FORMULA_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java b/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java index 28ca4af..a42e3c7 100644 --- a/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/BrowseCommand.java @@ -12,6 +12,7 @@ import de.prob.statespace.LoadedMachine; import de.prob.statespace.Trace; import de.prob.statespace.Transition; import de.prob2.jupyter.Command; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; @@ -90,8 +91,8 @@ public final class BrowseCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/BsymbCommand.java b/src/main/java/de/prob2/jupyter/commands/BsymbCommand.java index e799a47..fd6b68e 100644 --- a/src/main/java/de/prob2/jupyter/commands/BsymbCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/BsymbCommand.java @@ -3,6 +3,7 @@ package de.prob2.jupyter.commands; import com.google.inject.Inject; import de.prob2.jupyter.Command; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; @@ -53,8 +54,8 @@ public final class BsymbCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/CheckCommand.java b/src/main/java/de/prob2/jupyter/commands/CheckCommand.java index a20db9e..6f8be9f 100644 --- a/src/main/java/de/prob2/jupyter/commands/CheckCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/CheckCommand.java @@ -23,6 +23,7 @@ import de.prob.unicode.UnicodeTranslator; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.UserErrorException; @@ -31,7 +32,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class CheckCommand implements Command { private static final @NotNull Parameter.RequiredSingle WHAT_PARAM = Parameter.required("what"); @@ -113,8 +113,8 @@ public final class CheckCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/ConstantsCommand.java b/src/main/java/de/prob2/jupyter/commands/ConstantsCommand.java index 0388125..d7d2a14 100644 --- a/src/main/java/de/prob2/jupyter/commands/ConstantsCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/ConstantsCommand.java @@ -13,6 +13,7 @@ import de.prob.statespace.Transition; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -21,7 +22,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class ConstantsCommand implements Command { private static final @NotNull Parameter.OptionalSingle PREDICATE_PARAM = Parameter.optionalRemainder("predicate"); @@ -80,8 +80,10 @@ public final class ConstantsCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + PREDICATE_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/DotCommand.java b/src/main/java/de/prob2/jupyter/commands/DotCommand.java index 9148588..f1d3988 100644 --- a/src/main/java/de/prob2/jupyter/commands/DotCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/DotCommand.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; +import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; import com.google.inject.Provider; @@ -23,6 +24,7 @@ import de.prob.statespace.Trace; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -135,12 +137,11 @@ public final class DotCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectArgs( - argString, at, - (commandName, at0) -> null, // TODO - CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) - ); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(ImmutableMap.of( + COMMAND_PARAM, (commandName, at) -> null, // TODO + FORMULA_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/EvalCommand.java b/src/main/java/de/prob2/jupyter/commands/EvalCommand.java index 34c3399..972926f 100644 --- a/src/main/java/de/prob2/jupyter/commands/EvalCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/EvalCommand.java @@ -10,6 +10,7 @@ import de.prob.statespace.AnimationSelector; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -18,7 +19,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class EvalCommand implements Command { private static final @NotNull Parameter.RequiredSingle FORMULA_PARAM = Parameter.requiredRemainder("formula"); @@ -67,8 +67,10 @@ public final class EvalCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + FORMULA_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/ExecCommand.java b/src/main/java/de/prob2/jupyter/commands/ExecCommand.java index 5515f0f..3b123e2 100644 --- a/src/main/java/de/prob2/jupyter/commands/ExecCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/ExecCommand.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; import com.google.inject.Provider; @@ -15,6 +16,7 @@ import de.prob.statespace.Transition; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -86,12 +88,11 @@ public final class ExecCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectArgs( - argString, at, - (operation, at0) -> null, // TODO - CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) - ); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(ImmutableMap.of( + OPERATION_PARAM, (operation, at) -> null, // TODO + PREDICATE_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/FindCommand.java b/src/main/java/de/prob2/jupyter/commands/FindCommand.java index 88aa529..055d469 100644 --- a/src/main/java/de/prob2/jupyter/commands/FindCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/FindCommand.java @@ -12,6 +12,7 @@ import de.prob.statespace.Trace; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -20,7 +21,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class FindCommand implements Command { private static final @NotNull Parameter.RequiredSingle PREDICATE_PARAM = Parameter.requiredRemainder("predicate"); @@ -75,8 +75,10 @@ public final class FindCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + PREDICATE_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/GotoCommand.java b/src/main/java/de/prob2/jupyter/commands/GotoCommand.java index 798d0e3..557b751 100644 --- a/src/main/java/de/prob2/jupyter/commands/GotoCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/GotoCommand.java @@ -8,6 +8,7 @@ import de.prob.statespace.AnimationSelector; import de.prob.statespace.Trace; import de.prob2.jupyter.Command; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.UserErrorException; @@ -68,8 +69,8 @@ public final class GotoCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/GroovyCommand.java b/src/main/java/de/prob2/jupyter/commands/GroovyCommand.java index 083cef6..2f085e9 100644 --- a/src/main/java/de/prob2/jupyter/commands/GroovyCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/GroovyCommand.java @@ -12,6 +12,7 @@ import com.google.inject.Injector; import de.prob.scripting.ScriptEngineProvider; import de.prob2.jupyter.Command; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -76,8 +77,8 @@ public final class GroovyCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/HelpCommand.java b/src/main/java/de/prob2/jupyter/commands/HelpCommand.java index 57d4418..9b9ca2f 100644 --- a/src/main/java/de/prob2/jupyter/commands/HelpCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/HelpCommand.java @@ -14,6 +14,7 @@ import com.google.inject.Injector; import de.prob2.jupyter.Command; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -23,7 +24,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class HelpCommand implements Command { private static final @NotNull Parameter.OptionalSingle COMMAND_NAME_PARAM = Parameter.optional("commandName"); @@ -170,8 +170,8 @@ public final class HelpCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/InitialiseCommand.java b/src/main/java/de/prob2/jupyter/commands/InitialiseCommand.java index b93fc03..278de52 100644 --- a/src/main/java/de/prob2/jupyter/commands/InitialiseCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/InitialiseCommand.java @@ -13,6 +13,7 @@ import de.prob.statespace.Transition; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -21,7 +22,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class InitialiseCommand implements Command { private static final @NotNull Parameter.OptionalSingle PREDICATE_PARAM = Parameter.optionalRemainder("predicate"); @@ -80,8 +80,10 @@ public final class InitialiseCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + PREDICATE_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/LetCommand.java b/src/main/java/de/prob2/jupyter/commands/LetCommand.java index 24868de..d77fa45 100644 --- a/src/main/java/de/prob2/jupyter/commands/LetCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/LetCommand.java @@ -12,6 +12,7 @@ import de.prob.statespace.AnimationSelector; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -76,9 +77,9 @@ public final class LetCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { + public @NotNull ParameterInspectors getParameterInspectors() { // TODO - return null; + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/LoadCellCommand.java b/src/main/java/de/prob2/jupyter/commands/LoadCellCommand.java index 1a39922..92a416b 100644 --- a/src/main/java/de/prob2/jupyter/commands/LoadCellCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/LoadCellCommand.java @@ -4,6 +4,7 @@ import java.nio.file.Paths; import java.util.Collections; import java.util.Map; +import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; import com.google.inject.Provider; @@ -13,6 +14,7 @@ import de.prob.statespace.Trace; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -84,15 +86,11 @@ public final class LoadCellCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - final int newlinePos = argString.indexOf('\n'); - if (newlinePos == -1 || at < newlinePos) { - // Cursor is on the first line, provide preference inspections. - return CommandUtils.inspectInPreferences(this.animationSelector.getCurrentTrace(), argString, at); - } else { - // Cursor is in the body, provide B inspections. - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); - } + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(ImmutableMap.of( + PREFS_PARAM, CommandUtils.preferencesInspector(this.animationSelector.getCurrentTrace()), + CODE_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/LoadFileCommand.java b/src/main/java/de/prob2/jupyter/commands/LoadFileCommand.java index d8980f5..123d077 100644 --- a/src/main/java/de/prob2/jupyter/commands/LoadFileCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/LoadFileCommand.java @@ -10,6 +10,7 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; +import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Provider; @@ -22,6 +23,7 @@ import de.prob.statespace.Trace; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -110,12 +112,11 @@ public final class LoadFileCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectArgs( - argString, at, - (filename, at0) -> null, - CommandUtils.preferencesInspector(this.animationSelector.getCurrentTrace()) - ); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(ImmutableMap.of( + FILE_NAME_PARAM, (filename, at) -> null, + PREFS_PARAM, CommandUtils.preferencesInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/ModelCheckCommand.java b/src/main/java/de/prob2/jupyter/commands/ModelCheckCommand.java index 8c45b16..65e1d91 100644 --- a/src/main/java/de/prob2/jupyter/commands/ModelCheckCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/ModelCheckCommand.java @@ -16,6 +16,7 @@ import de.prob.check.StateSpaceStats; import de.prob.statespace.AnimationSelector; import de.prob.statespace.StateSpace; import de.prob2.jupyter.Command; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -128,8 +129,8 @@ public final class ModelCheckCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/PrefCommand.java b/src/main/java/de/prob2/jupyter/commands/PrefCommand.java index 2baac28..da0fe8a 100644 --- a/src/main/java/de/prob2/jupyter/commands/PrefCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/PrefCommand.java @@ -15,6 +15,7 @@ import de.prob.statespace.AnimationSelector; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.UserErrorException; @@ -110,8 +111,10 @@ public final class PrefCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInPreferences(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + PREFS_PARAM, CommandUtils.preferencesInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/PrettyPrintCommand.java b/src/main/java/de/prob2/jupyter/commands/PrettyPrintCommand.java index 752d005..0cf7bbb 100644 --- a/src/main/java/de/prob2/jupyter/commands/PrettyPrintCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/PrettyPrintCommand.java @@ -11,6 +11,7 @@ import de.prob.statespace.AnimationSelector; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; @@ -18,7 +19,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class PrettyPrintCommand implements Command { private static final @NotNull Parameter.RequiredSingle PREDICATE_PARAM = Parameter.requiredRemainder("predicate"); @@ -75,8 +75,10 @@ public final class PrettyPrintCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + PREDICATE_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/RenderCommand.java b/src/main/java/de/prob2/jupyter/commands/RenderCommand.java index cafd252..7e1d448 100644 --- a/src/main/java/de/prob2/jupyter/commands/RenderCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/RenderCommand.java @@ -6,6 +6,7 @@ import com.google.inject.Inject; import de.prob2.jupyter.Command; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; @@ -60,8 +61,8 @@ public final class RenderCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/ShowCommand.java b/src/main/java/de/prob2/jupyter/commands/ShowCommand.java index 84441d3..9621989 100644 --- a/src/main/java/de/prob2/jupyter/commands/ShowCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/ShowCommand.java @@ -16,6 +16,7 @@ import de.prob.animator.domainobjects.AnimationMatrixEntry; import de.prob.statespace.AnimationSelector; import de.prob.statespace.Trace; import de.prob2.jupyter.Command; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -152,8 +153,8 @@ public final class ShowCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/SolveCommand.java b/src/main/java/de/prob2/jupyter/commands/SolveCommand.java index d8d3973..3b29bc9 100644 --- a/src/main/java/de/prob2/jupyter/commands/SolveCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/SolveCommand.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; import com.google.inject.Provider; @@ -16,6 +17,7 @@ import de.prob.statespace.Trace; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -92,12 +94,11 @@ public final class SolveCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectArgs( - argString, at, - (solverName, at0) -> null, // TODO - CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) - ); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(ImmutableMap.of( + SOLVER_PARAM, (solverName, at) -> null, // TODO + PREDICATE_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/StatsCommand.java b/src/main/java/de/prob2/jupyter/commands/StatsCommand.java index 8c180dc..abe5917 100644 --- a/src/main/java/de/prob2/jupyter/commands/StatsCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/StatsCommand.java @@ -6,6 +6,7 @@ import de.prob.animator.command.ComputeStateSpaceStatsCommand; import de.prob.check.StateSpaceStats; import de.prob.statespace.AnimationSelector; import de.prob2.jupyter.Command; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; @@ -81,8 +82,8 @@ public final class StatsCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/TableCommand.java b/src/main/java/de/prob2/jupyter/commands/TableCommand.java index 74553f1..0e09bfa 100644 --- a/src/main/java/de/prob2/jupyter/commands/TableCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/TableCommand.java @@ -19,6 +19,7 @@ import de.prob.unicode.UnicodeTranslator; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -27,7 +28,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class TableCommand implements Command { private static final @NotNull Parameter.RequiredSingle EXPRESSION_PARAM = Parameter.requiredRemainder("expression"); @@ -111,8 +111,10 @@ public final class TableCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + EXPRESSION_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/TimeCommand.java b/src/main/java/de/prob2/jupyter/commands/TimeCommand.java index 844936b..0f653b2 100644 --- a/src/main/java/de/prob2/jupyter/commands/TimeCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/TimeCommand.java @@ -10,6 +10,7 @@ import com.google.inject.Injector; import de.prob2.jupyter.Command; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -73,8 +74,10 @@ public final class TimeCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return this.injector.getInstance(ProBKernel.class).inspect(argString, at, false); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + COMMAND_AND_ARGS_PARAM, (argString, at) -> this.injector.getInstance(ProBKernel.class).inspect(argString, at, false) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/TraceCommand.java b/src/main/java/de/prob2/jupyter/commands/TraceCommand.java index b37af72..6073818 100644 --- a/src/main/java/de/prob2/jupyter/commands/TraceCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/TraceCommand.java @@ -8,6 +8,7 @@ import de.prob.statespace.AnimationSelector; import de.prob.statespace.Trace; import de.prob.statespace.Transition; import de.prob2.jupyter.Command; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; @@ -89,8 +90,8 @@ public final class TraceCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/TypeCommand.java b/src/main/java/de/prob2/jupyter/commands/TypeCommand.java index 67ed0c3..61c1843 100644 --- a/src/main/java/de/prob2/jupyter/commands/TypeCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/TypeCommand.java @@ -14,6 +14,7 @@ import de.prob.statespace.Trace; import de.prob2.jupyter.Command; import de.prob2.jupyter.CommandUtils; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -22,7 +23,6 @@ import io.github.spencerpark.jupyter.kernel.ReplacementOptions; import io.github.spencerpark.jupyter.kernel.display.DisplayData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public final class TypeCommand implements Command { private static final @NotNull Parameter.RequiredSingle FORMULA_PARAM = Parameter.requiredRemainder("formula"); @@ -77,8 +77,10 @@ public final class TypeCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); + public @NotNull ParameterInspectors getParameterInspectors() { + return new ParameterInspectors(Collections.singletonMap( + FORMULA_PARAM, CommandUtils.bExpressionInspector(this.animationSelector.getCurrentTrace()) + )); } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/UnletCommand.java b/src/main/java/de/prob2/jupyter/commands/UnletCommand.java index c2bb02b..2d6960d 100644 --- a/src/main/java/de/prob2/jupyter/commands/UnletCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/UnletCommand.java @@ -8,6 +8,7 @@ import com.google.inject.Injector; import de.prob2.jupyter.Command; import de.prob2.jupyter.Parameter; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -68,9 +69,9 @@ public final class UnletCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { + public @NotNull ParameterInspectors getParameterInspectors() { // TODO - return null; + return ParameterInspectors.NONE; } @Override diff --git a/src/main/java/de/prob2/jupyter/commands/VersionCommand.java b/src/main/java/de/prob2/jupyter/commands/VersionCommand.java index 8f6180e..147296d 100644 --- a/src/main/java/de/prob2/jupyter/commands/VersionCommand.java +++ b/src/main/java/de/prob2/jupyter/commands/VersionCommand.java @@ -7,6 +7,7 @@ import de.prob.Main; import de.prob.animator.command.GetVersionCommand; import de.prob.statespace.AnimationSelector; import de.prob2.jupyter.Command; +import de.prob2.jupyter.ParameterInspectors; import de.prob2.jupyter.Parameters; import de.prob2.jupyter.ParsedArguments; import de.prob2.jupyter.ProBKernel; @@ -77,8 +78,8 @@ public final class VersionCommand implements Command { } @Override - public @Nullable DisplayData inspect(final @NotNull String argString, final int at) { - return null; + public @NotNull ParameterInspectors getParameterInspectors() { + return ParameterInspectors.NONE; } @Override -- GitLab