Skip to content
Snippets Groups Projects
Commit 990738c0 authored by dgelessus's avatar dgelessus
Browse files

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.
parent 7a83460d
No related branches found
No related tags found
No related merge requests found
Showing
with 60 additions and 39 deletions
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment