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

Support inspection in commands that work with preferences

parent 31a7ed16
Branches
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ import java.util.HashMap; ...@@ -7,6 +7,7 @@ import java.util.HashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set; import java.util.Set;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.regex.Matcher; import java.util.regex.Matcher;
...@@ -15,6 +16,8 @@ import java.util.stream.Collectors; ...@@ -15,6 +16,8 @@ import java.util.stream.Collectors;
import de.prob.animator.command.CompleteIdentifierCommand; import de.prob.animator.command.CompleteIdentifierCommand;
import de.prob.animator.command.GetCurrentPreferencesCommand; import de.prob.animator.command.GetCurrentPreferencesCommand;
import de.prob.animator.command.GetDefaultPreferencesCommand;
import de.prob.animator.command.GetPreferenceCommand;
import de.prob.animator.domainobjects.AbstractEvalResult; import de.prob.animator.domainobjects.AbstractEvalResult;
import de.prob.animator.domainobjects.ComputationNotCompletedResult; import de.prob.animator.domainobjects.ComputationNotCompletedResult;
import de.prob.animator.domainobjects.EnumerationWarning; import de.prob.animator.domainobjects.EnumerationWarning;
...@@ -23,6 +26,7 @@ import de.prob.animator.domainobjects.EvaluationErrorResult; ...@@ -23,6 +26,7 @@ import de.prob.animator.domainobjects.EvaluationErrorResult;
import de.prob.animator.domainobjects.FormulaExpand; import de.prob.animator.domainobjects.FormulaExpand;
import de.prob.animator.domainobjects.IEvalElement; import de.prob.animator.domainobjects.IEvalElement;
import de.prob.animator.domainobjects.IdentifierNotInitialised; import de.prob.animator.domainobjects.IdentifierNotInitialised;
import de.prob.animator.domainobjects.ProBPreference;
import de.prob.animator.domainobjects.TypeCheckResult; import de.prob.animator.domainobjects.TypeCheckResult;
import de.prob.animator.domainobjects.WDError; import de.prob.animator.domainobjects.WDError;
import de.prob.exception.ProBError; import de.prob.exception.ProBError;
...@@ -366,6 +370,72 @@ public final class CommandUtils { ...@@ -366,6 +370,72 @@ public final class CommandUtils {
return (code, at) -> completeInBExpression(trace, code, at); return (code, at) -> completeInBExpression(trace, code, at);
} }
public static @Nullable DisplayData inspectInPreferences(final @NotNull Trace trace, final @NotNull String code, final int at) {
final Matcher argSplitMatcher = ARG_SPLIT_PATTERN.matcher(code);
int prefNameStart = 0;
while (argSplitMatcher.find() && argSplitMatcher.end() <= at) {
prefNameStart = argSplitMatcher.end();
}
final Matcher prefNameMatcher = B_IDENTIFIER_PATTERN.matcher(code);
prefNameMatcher.region(prefNameStart, code.length());
if (prefNameMatcher.lookingAt()) {
final String name = prefNameMatcher.group();
final GetPreferenceCommand cmdCurrent = new GetPreferenceCommand(name);
final GetDefaultPreferencesCommand cmdDefaults = new GetDefaultPreferencesCommand();
trace.getStateSpace().execute(cmdCurrent, cmdDefaults);
final String currentValue = cmdCurrent.getValue();
final ProBPreference pref = cmdDefaults.getPreferences()
.stream()
.filter(p -> name.equals(p.name))
.findAny()
.orElseThrow(NoSuchElementException::new);
final StringBuilder sbPlain = new StringBuilder();
final StringBuilder sbMarkdown = new StringBuilder();
sbPlain.append(name);
sbPlain.append(" = ");
sbPlain.append(currentValue);
sbPlain.append(" (");
sbPlain.append(pref.type);
sbPlain.append(")\n");
sbMarkdown.append(name);
sbMarkdown.append(" = `");
sbMarkdown.append(currentValue);
sbMarkdown.append("` (");
sbMarkdown.append(pref.type);
sbMarkdown.append(") \n");
sbPlain.append(pref.description);
sbPlain.append('\n');
sbMarkdown.append(pref.description);
sbMarkdown.append(" \n");
sbPlain.append("Default value: ");
sbPlain.append(pref.defaultValue);
sbPlain.append('\n');
sbMarkdown.append("**Default value:** `");
sbMarkdown.append(pref.defaultValue);
sbMarkdown.append("` \n");
sbPlain.append("Category: ");
sbPlain.append(pref.category);
sbPlain.append('\n');
sbMarkdown.append("**Category:** `");
sbMarkdown.append(pref.category);
sbMarkdown.append("` \n");
final DisplayData result = new DisplayData(sbPlain.toString());
result.putMarkdown(sbMarkdown.toString());
return result;
} else {
return null;
}
}
public static @NotNull Inspector preferencesInspector(final @NotNull Trace trace) {
return (code, at) -> inspectInPreferences(trace, code, at);
}
public static @Nullable ReplacementOptions completeInPreferences(final @NotNull Trace trace, final @NotNull String code, final int at) { public static @Nullable ReplacementOptions completeInPreferences(final @NotNull Trace trace, final @NotNull String code, final int at) {
final Matcher argSplitMatcher = ARG_SPLIT_PATTERN.matcher(code); final Matcher argSplitMatcher = ARG_SPLIT_PATTERN.matcher(code);
int prefNameStart = 0; int prefNameStart = 0;
......
...@@ -67,7 +67,7 @@ public final class LoadCellCommand implements Command { ...@@ -67,7 +67,7 @@ public final class LoadCellCommand implements Command {
final int newlinePos = argString.indexOf('\n'); final int newlinePos = argString.indexOf('\n');
if (newlinePos == -1 || at < newlinePos) { if (newlinePos == -1 || at < newlinePos) {
// Cursor is on the first line, provide preference inspections. // Cursor is on the first line, provide preference inspections.
return null; // TODO return CommandUtils.inspectInPreferences(this.animationSelector.getCurrentTrace(), argString, at);
} else { } else {
// Cursor is in the body, provide B inspections. // Cursor is in the body, provide B inspections.
return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at); return CommandUtils.inspectInBExpression(this.animationSelector.getCurrentTrace(), argString, at);
......
...@@ -108,6 +108,15 @@ public final class LoadFileCommand implements Command { ...@@ -108,6 +108,15 @@ public final class LoadFileCommand implements Command {
return new DisplayData("Loaded machine: " + this.animationSelector.getCurrentTrace().getStateSpace().getMainComponent()); return new DisplayData("Loaded machine: " + this.animationSelector.getCurrentTrace().getStateSpace().getMainComponent());
} }
@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())
);
}
@Override @Override
public @Nullable ReplacementOptions complete(final @NotNull String argString, final int at) { public @Nullable ReplacementOptions complete(final @NotNull String argString, final int at) {
return CommandUtils.completeArgs( return CommandUtils.completeArgs(
......
...@@ -90,6 +90,11 @@ public final class PrefCommand implements Command { ...@@ -90,6 +90,11 @@ public final class PrefCommand implements Command {
return new DisplayData(sb.toString()); return new DisplayData(sb.toString());
} }
@Override
public @Nullable DisplayData inspect(final @NotNull String argString, final int at) {
return CommandUtils.inspectInPreferences(this.animationSelector.getCurrentTrace(), argString, at);
}
@Override @Override
public @Nullable ReplacementOptions complete(final @NotNull String argString, final int at) { public @Nullable ReplacementOptions complete(final @NotNull String argString, final int at) {
return CommandUtils.completeInPreferences(this.animationSelector.getCurrentTrace(), argString, at); return CommandUtils.completeInPreferences(this.animationSelector.getCurrentTrace(), argString, at);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment