Update muScript, brings stricter error checking
This commit is contained in:
parent
7ef0001ece
commit
c84ef9e15a
|
@ -38,7 +38,6 @@ dependencies {
|
||||||
// clientRuntimeOnly("dev.quantumfusion.dashloader:dashloader-definitions:3.0-rc14-1.18")
|
// clientRuntimeOnly("dev.quantumfusion.dashloader:dashloader-definitions:3.0-rc14-1.18")
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO re-enable once minecraft classes can be used in tests again
|
tasks.test {
|
||||||
//test {
|
useJUnitPlatform()
|
||||||
// useJUnitPlatform()
|
}
|
||||||
//}
|
|
||||||
|
|
|
@ -15,4 +15,4 @@ curseforge_optional_dependencies=modmenu
|
||||||
|
|
||||||
fabric_version=0.70.0+1.19.3
|
fabric_version=0.70.0+1.19.3
|
||||||
libjf_version=3.4.1
|
libjf_version=3.4.1
|
||||||
muscript_version=1.0-SNAPSHOT
|
muscript_version=1.1-SNAPSHOT
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"conditions": "lumi.subcategoryTest.enableLang !subcategoryTest.enableLangForceDisable & version('respackopts', '*')",
|
"conditions": "lumi.subcategoryTest.enableLang & (!subcategoryTest.enableLangForceDisable) & version('respackopts', '*')",
|
||||||
"fallback": "assets/minecraft/lang/en_us_joke.json",
|
"fallback": "assets/minecraft/lang/en_us_joke.json",
|
||||||
"expansions": {
|
"expansions": {
|
||||||
"Lights": "lumi.subcategoryTest.enableLang",
|
"Lights": "lumi.subcategoryTest.enableLang",
|
||||||
|
|
|
@ -4,8 +4,9 @@ import io.gitlab.jfronny.commons.log.Logger;
|
||||||
import io.gitlab.jfronny.gson.Gson;
|
import io.gitlab.jfronny.gson.Gson;
|
||||||
import io.gitlab.jfronny.gson.GsonBuilder;
|
import io.gitlab.jfronny.gson.GsonBuilder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
|
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.*;
|
import io.gitlab.jfronny.muscript.ast.*;
|
||||||
import io.gitlab.jfronny.respackopts.filters.*;
|
import io.gitlab.jfronny.respackopts.filters.DirFilterEvents;
|
||||||
|
import io.gitlab.jfronny.respackopts.filters.FileFilterEvents;
|
||||||
import io.gitlab.jfronny.respackopts.gson.*;
|
import io.gitlab.jfronny.respackopts.gson.*;
|
||||||
import io.gitlab.jfronny.respackopts.gson.entry.*;
|
import io.gitlab.jfronny.respackopts.gson.entry.*;
|
||||||
import io.gitlab.jfronny.respackopts.integration.SaveHook;
|
import io.gitlab.jfronny.respackopts.integration.SaveHook;
|
||||||
|
@ -15,8 +16,6 @@ import io.gitlab.jfronny.respackopts.server.ServerInstanceHolder;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.minecraft.resource.InputSupplier;
|
|
||||||
import net.minecraft.util.Util;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.respackopts.filters.util;
|
package io.gitlab.jfronny.respackopts.filters.util;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.data.dynamic.Dynamic;
|
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.StringExpr;
|
import io.gitlab.jfronny.muscript.ast.StringExpr;
|
||||||
import io.gitlab.jfronny.respackopts.Respackopts;
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
||||||
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
||||||
import io.gitlab.jfronny.respackopts.util.MetaCache;
|
import io.gitlab.jfronny.respackopts.util.MetaCache;
|
||||||
|
|
|
@ -2,11 +2,11 @@ package io.gitlab.jfronny.respackopts.gson;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.*;
|
import io.gitlab.jfronny.gson.*;
|
||||||
import io.gitlab.jfronny.gson.reflect.*;
|
import io.gitlab.jfronny.gson.reflect.*;
|
||||||
|
import io.gitlab.jfronny.muscript.ast.compare.Equal;
|
||||||
import io.gitlab.jfronny.muscript.compiler.*;
|
import io.gitlab.jfronny.muscript.compiler.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.*;
|
import io.gitlab.jfronny.muscript.ast.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.bool.*;
|
import io.gitlab.jfronny.muscript.ast.bool.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.common.*;
|
import io.gitlab.jfronny.muscript.ast.dynamic.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.dynamic.*;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -29,7 +29,7 @@ public class BoolExprDeserializer implements JsonDeserializer<BoolExpr> {
|
||||||
return switch (entry.getKey().toLowerCase(Locale.ROOT)) {
|
return switch (entry.getKey().toLowerCase(Locale.ROOT)) {
|
||||||
case "and", "add", "&" -> merge(context.deserialize(entry.getValue(), conditionListType), Token.And);
|
case "and", "add", "&" -> merge(context.deserialize(entry.getValue(), conditionListType), Token.And);
|
||||||
case "==", "=", "equal", "eq" -> merge(context.deserialize(entry.getValue(), conditionListType), Token.EqualEqual);
|
case "==", "=", "equal", "eq" -> merge(context.deserialize(entry.getValue(), conditionListType), Token.EqualEqual);
|
||||||
case "not", "nor", "!" -> new Not(0, merge(context.deserialize(entry.getValue(), conditionListType), Token.Or));
|
case "not", "nor", "!" -> new Not(-1, -1, merge(context.deserialize(entry.getValue(), conditionListType), Token.Or));
|
||||||
case "or", "|" -> merge(context.deserialize(entry.getValue(), conditionListType), Token.Or);
|
case "or", "|" -> merge(context.deserialize(entry.getValue(), conditionListType), Token.Or);
|
||||||
case "^", "xor" -> merge(context.deserialize(entry.getValue(), conditionListType), Token.BangEqual);
|
case "^", "xor" -> merge(context.deserialize(entry.getValue(), conditionListType), Token.BangEqual);
|
||||||
default -> throw new JsonParseException("Unknown condition type: " + entry.getKey());
|
default -> throw new JsonParseException("Unknown condition type: " + entry.getKey());
|
||||||
|
@ -44,13 +44,13 @@ public class BoolExprDeserializer implements JsonDeserializer<BoolExpr> {
|
||||||
if (pr.isString()) {
|
if (pr.isString()) {
|
||||||
String name = pr.getAsString();
|
String name = pr.getAsString();
|
||||||
if (name.toLowerCase(Locale.ROOT).equals("true"))
|
if (name.toLowerCase(Locale.ROOT).equals("true"))
|
||||||
return Expr.literal(0, true);
|
return Expr.literal(-1, -1, true);
|
||||||
if (name.toLowerCase(Locale.ROOT).equals("false"))
|
if (name.toLowerCase(Locale.ROOT).equals("false"))
|
||||||
return Expr.literal(0, false);
|
return Expr.literal(-1, -1, false);
|
||||||
return rpoBooleanCondition(name);
|
return rpoBooleanCondition(name);
|
||||||
}
|
}
|
||||||
else if (pr.isBoolean()) {
|
else if (pr.isBoolean()) {
|
||||||
return Expr.literal(0, pr.getAsBoolean());
|
return Expr.literal(-1, -1, pr.getAsBoolean());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new JsonParseException("Invalid data type for condition");
|
throw new JsonParseException("Invalid data type for condition");
|
||||||
|
@ -58,13 +58,13 @@ public class BoolExprDeserializer implements JsonDeserializer<BoolExpr> {
|
||||||
|
|
||||||
private BoolExpr merge(List<BoolExpr> expressions, Token token) {
|
private BoolExpr merge(List<BoolExpr> expressions, Token token) {
|
||||||
if (token == Token.BangEqual)
|
if (token == Token.BangEqual)
|
||||||
return new Not(0, merge(expressions, Token.EqualEqual));
|
return new Not(-1, -1, merge(expressions, Token.EqualEqual));
|
||||||
BoolExpr current = expressions.get(0);
|
BoolExpr current = expressions.get(0);
|
||||||
for (BoolExpr expr : expressions.subList(1, expressions.size())) {
|
for (BoolExpr expr : expressions.subList(1, expressions.size())) {
|
||||||
current = switch (token) {
|
current = switch (token) {
|
||||||
case EqualEqual -> new Equal(0, current, expr);
|
case EqualEqual -> new Equal(-1, -1, current, expr);
|
||||||
case And -> new And(0, current, expr);
|
case And -> new And(-1, -1, current, expr);
|
||||||
case Or -> new Or(0, current, expr);
|
case Or -> new Or(-1, -1, current, expr);
|
||||||
default -> throw new IllegalArgumentException();
|
default -> throw new IllegalArgumentException();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -76,16 +76,16 @@ public class BoolExprDeserializer implements JsonDeserializer<BoolExpr> {
|
||||||
String code = name.substring("modversion:".length());
|
String code = name.substring("modversion:".length());
|
||||||
String mod = code.substring(0, code.indexOf(':'));
|
String mod = code.substring(0, code.indexOf(':'));
|
||||||
String predicate = code.substring(code.indexOf(':') + 1);
|
String predicate = code.substring(code.indexOf(':') + 1);
|
||||||
return new Call(0, new Variable(0, "version"), List.of(
|
return new Call(-1, -1, new Variable(-1, -1, "version"), List.of(
|
||||||
Expr.literal(0, mod).asDynamicExpr(),
|
new Call.Arg(Expr.literal(-1, -1, mod).asDynamicExpr(), false),
|
||||||
Expr.literal(0, predicate).asDynamicExpr()
|
new Call.Arg(Expr.literal(-1, -1, predicate).asDynamicExpr(), false)
|
||||||
)).asBoolExpr();
|
)).asBoolExpr();
|
||||||
}
|
}
|
||||||
DynamicExpr e = null;
|
DynamicExpr e = null;
|
||||||
String[] arr = name.split("[:.]");
|
String[] arr = name.split("[:.]");
|
||||||
for (int i = 0; i < arr.length; i++) {
|
for (int i = 0; i < arr.length; i++) {
|
||||||
if (i == 0) e = new Variable(0, arr[i]);
|
if (i == 0) e = new Variable(-1, -1, arr[i]);
|
||||||
else e = new Get(0, e, Expr.literal(0, arr[i]));
|
else e = new Get(-1, -1, e, Expr.literal(arr[i]));
|
||||||
}
|
}
|
||||||
if (e == null) throw new JsonParseException("Invalid RPO condition: \"" + name + "\"");
|
if (e == null) throw new JsonParseException("Invalid RPO condition: \"" + name + "\"");
|
||||||
return e.asBoolExpr();
|
return e.asBoolExpr();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.respackopts.gson;
|
package io.gitlab.jfronny.respackopts.gson;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.*;
|
import io.gitlab.jfronny.gson.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.*;
|
import io.gitlab.jfronny.muscript.ast.*;
|
||||||
import io.gitlab.jfronny.respackopts.model.*;
|
import io.gitlab.jfronny.respackopts.model.*;
|
||||||
|
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
|
|
|
@ -3,7 +3,7 @@ package io.gitlab.jfronny.respackopts.gson;
|
||||||
import io.gitlab.jfronny.gson.*;
|
import io.gitlab.jfronny.gson.*;
|
||||||
import io.gitlab.jfronny.muscript.*;
|
import io.gitlab.jfronny.muscript.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.*;
|
import io.gitlab.jfronny.muscript.compiler.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.*;
|
import io.gitlab.jfronny.muscript.ast.*;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.respackopts.gson;
|
package io.gitlab.jfronny.respackopts.gson;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.*;
|
import io.gitlab.jfronny.gson.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.*;
|
import io.gitlab.jfronny.muscript.ast.*;
|
||||||
|
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
package io.gitlab.jfronny.respackopts.model;
|
package io.gitlab.jfronny.respackopts.model;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.data.dynamic.Dynamic;
|
import io.gitlab.jfronny.muscript.ast.BoolExpr;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.*;
|
import io.gitlab.jfronny.muscript.data.Scope;
|
||||||
import io.gitlab.jfronny.muscript.error.*;
|
import io.gitlab.jfronny.muscript.error.LocationalError;
|
||||||
|
import io.gitlab.jfronny.muscript.error.LocationalException;
|
||||||
|
|
||||||
public record Condition(String source, BoolExpr expr) {
|
public record Condition(String source, BoolExpr expr) {
|
||||||
public boolean get(Dynamic<?> dataRoot) throws ConditionException {
|
public boolean get(Scope dataRoot) throws ConditionException {
|
||||||
try {
|
try {
|
||||||
return expr.get(dataRoot);
|
return expr.get(dataRoot);
|
||||||
} catch (LocationalException e) {
|
} catch (LocationalException e) {
|
||||||
|
|
|
@ -2,7 +2,7 @@ package io.gitlab.jfronny.respackopts.model;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.serialize.gson.api.*;
|
import io.gitlab.jfronny.commons.serialize.gson.api.*;
|
||||||
import io.gitlab.jfronny.gson.annotations.*;
|
import io.gitlab.jfronny.gson.annotations.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.*;
|
import io.gitlab.jfronny.muscript.ast.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
package io.gitlab.jfronny.respackopts.model.cache;
|
package io.gitlab.jfronny.respackopts.model.cache;
|
||||||
|
|
||||||
import io.gitlab.jfronny.muscript.ExpressionParameter;
|
import io.gitlab.jfronny.muscript.data.Scope;
|
||||||
import io.gitlab.jfronny.respackopts.model.DirRpo;
|
import io.gitlab.jfronny.respackopts.model.*;
|
||||||
import io.gitlab.jfronny.respackopts.model.FileRpo;
|
|
||||||
import io.gitlab.jfronny.respackopts.model.PackMeta;
|
|
||||||
import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch;
|
import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -17,7 +15,7 @@ public record CachedPackState(
|
||||||
PackMeta metadata,
|
PackMeta metadata,
|
||||||
Map<String, FileRpo> cachedFileRPOs,
|
Map<String, FileRpo> cachedFileRPOs,
|
||||||
Map<String, DirRpo> cachedDirRPOs,
|
Map<String, DirRpo> cachedDirRPOs,
|
||||||
ExpressionParameter expressionParameter
|
Scope executionScope
|
||||||
) {
|
) {
|
||||||
public CachedPackState(CacheKey key, PackMeta meta, ConfigBranch branch) {
|
public CachedPackState(CacheKey key, PackMeta meta, ConfigBranch branch) {
|
||||||
this(meta.id,
|
this(meta.id,
|
||||||
|
@ -27,6 +25,6 @@ public record CachedPackState(
|
||||||
meta,
|
meta,
|
||||||
new HashMap<>(),
|
new HashMap<>(),
|
||||||
new HashMap<>(),
|
new HashMap<>(),
|
||||||
new ExpressionParameter(new HashMap<>(branch.getDynamic().getValue())));
|
new Scope(branch.getDynamic()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.respackopts.model.tree;
|
package io.gitlab.jfronny.respackopts.model.tree;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.data.dynamic.DBool;
|
import io.gitlab.jfronny.muscript.data.dynamic.DBool;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
||||||
import io.gitlab.jfronny.respackopts.Respackopts;
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
||||||
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.respackopts.model.tree;
|
package io.gitlab.jfronny.respackopts.model.tree;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import io.gitlab.jfronny.commons.data.dynamic.*;
|
import io.gitlab.jfronny.muscript.data.dynamic.*;
|
||||||
import io.gitlab.jfronny.gson.reflect.TypeToken;
|
import io.gitlab.jfronny.gson.reflect.TypeToken;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.ConfigBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v1.dsl.ConfigBuilder;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.respackopts.model.tree;
|
package io.gitlab.jfronny.respackopts.model.tree;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.data.dynamic.Dynamic;
|
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
||||||
import io.gitlab.jfronny.respackopts.Respackopts;
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
||||||
import io.gitlab.jfronny.respackopts.model.enums.ConfigSyncMode;
|
import io.gitlab.jfronny.respackopts.model.enums.ConfigSyncMode;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.respackopts.model.tree;
|
package io.gitlab.jfronny.respackopts.model.tree;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.data.dynamic.DEnum;
|
import io.gitlab.jfronny.muscript.data.dynamic.DEnum;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
||||||
import io.gitlab.jfronny.respackopts.Respackopts;
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
||||||
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package io.gitlab.jfronny.respackopts.model.tree;
|
package io.gitlab.jfronny.respackopts.model.tree;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.data.dynamic.DNumber;
|
import io.gitlab.jfronny.muscript.data.dynamic.DNumber;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
import io.gitlab.jfronny.libjf.config.api.v1.dsl.CategoryBuilder;
|
||||||
import io.gitlab.jfronny.respackopts.Respackopts;
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
||||||
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package io.gitlab.jfronny.respackopts.util;
|
package io.gitlab.jfronny.respackopts.util;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.throwable.ThrowingBiConsumer;
|
import io.gitlab.jfronny.commons.throwable.ThrowingBiConsumer;
|
||||||
import io.gitlab.jfronny.muscript.ExpressionParameter;
|
import io.gitlab.jfronny.muscript.data.Scope;
|
||||||
import io.gitlab.jfronny.respackopts.Respackopts;
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
||||||
import io.gitlab.jfronny.respackopts.integration.SaveHook;
|
|
||||||
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
import io.gitlab.jfronny.respackopts.RespackoptsConfig;
|
||||||
|
import io.gitlab.jfronny.respackopts.integration.SaveHook;
|
||||||
import io.gitlab.jfronny.respackopts.model.PackMeta;
|
import io.gitlab.jfronny.respackopts.model.PackMeta;
|
||||||
import io.gitlab.jfronny.respackopts.model.cache.CacheKey;
|
import io.gitlab.jfronny.respackopts.model.cache.CacheKey;
|
||||||
import io.gitlab.jfronny.respackopts.model.cache.CachedPackState;
|
import io.gitlab.jfronny.respackopts.model.cache.CachedPackState;
|
||||||
|
@ -150,8 +150,8 @@ public class MetaCache {
|
||||||
return PACK_STATES.get(key);
|
return PACK_STATES.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ExpressionParameter getParameter(@Nullable CacheKey key) {
|
public static Scope getParameter(@Nullable CacheKey key) {
|
||||||
ExpressionParameter parameter = key == null ? new ExpressionParameter() : MetaCache.getState(key).expressionParameter();
|
Scope parameter = key == null ? new Scope() : MetaCache.getState(key).executionScope();
|
||||||
MetaCache.forEach((id, state) -> {
|
MetaCache.forEach((id, state) -> {
|
||||||
String packId = Respackopts.sanitizeString(state.packId());
|
String packId = Respackopts.sanitizeString(state.packId());
|
||||||
if (!parameter.has(packId))
|
if (!parameter.has(packId))
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package io.gitlab.jfronny.respackopts.util;
|
package io.gitlab.jfronny.respackopts.util;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.data.dynamic.*;
|
import io.gitlab.jfronny.muscript.data.dynamic.*;
|
||||||
import io.gitlab.jfronny.muscript.ExpressionParameter;
|
|
||||||
import io.gitlab.jfronny.muscript.StandardLib;
|
import io.gitlab.jfronny.muscript.StandardLib;
|
||||||
|
import io.gitlab.jfronny.muscript.data.Scope;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.fabricmc.loader.api.VersionParsingException;
|
import net.fabricmc.loader.api.VersionParsingException;
|
||||||
import net.fabricmc.loader.api.metadata.version.VersionPredicate;
|
import net.fabricmc.loader.api.metadata.version.VersionPredicate;
|
||||||
|
@ -13,9 +13,9 @@ import java.util.Map;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class MuUtils {
|
public class MuUtils {
|
||||||
public static ExpressionParameter addDefault(ExpressionParameter parameter) {
|
public static Scope addDefault(Scope parameter) {
|
||||||
StandardLib.addTo(parameter);
|
StandardLib.addTo(parameter);
|
||||||
parameter.set("version", DFinal.of(args -> {
|
parameter.set("version", args -> {
|
||||||
if (args.size() != 2) throw new IllegalArgumentException("Expected 2 arguments on version but got " + args.size());
|
if (args.size() != 2) throw new IllegalArgumentException("Expected 2 arguments on version but got " + args.size());
|
||||||
VersionPredicate predicate;
|
VersionPredicate predicate;
|
||||||
try {
|
try {
|
||||||
|
@ -26,7 +26,7 @@ public class MuUtils {
|
||||||
return DFinal.of(FabricLoader.getInstance().getModContainer(args.get(0).asString().getValue())
|
return DFinal.of(FabricLoader.getInstance().getModContainer(args.get(0).asString().getValue())
|
||||||
.map(c -> predicate.test(c.getMetadata().getVersion()))
|
.map(c -> predicate.test(c.getMetadata().getVersion()))
|
||||||
.orElse(false));
|
.orElse(false));
|
||||||
}));
|
});
|
||||||
parameter.set("date", new DCallableObject(Map.of(
|
parameter.set("date", new DCallableObject(Map.of(
|
||||||
"today", new DDate(LocalDate::now)
|
"today", new DDate(LocalDate::now)
|
||||||
), DFinal.of(args -> {
|
), DFinal.of(args -> {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package io.gitlab.jfronny.respackopts.test;
|
package io.gitlab.jfronny.respackopts.test;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.reflect.TypeToken;
|
import io.gitlab.jfronny.gson.reflect.TypeToken;
|
||||||
import io.gitlab.jfronny.muscript.ExpressionParameter;
|
import io.gitlab.jfronny.muscript.ast.BoolExpr;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.BoolExpr;
|
import io.gitlab.jfronny.muscript.data.Scope;
|
||||||
import io.gitlab.jfronny.respackopts.gson.AttachmentHolder;
|
import io.gitlab.jfronny.respackopts.gson.AttachmentHolder;
|
||||||
import io.gitlab.jfronny.respackopts.util.MuUtils;
|
import io.gitlab.jfronny.respackopts.util.MuUtils;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
@ -95,6 +95,6 @@ class ConditionJsonSerializationTest {
|
||||||
|
|
||||||
private boolean evaluateCondition(String json) {
|
private boolean evaluateCondition(String json) {
|
||||||
BoolExpr condition = AttachmentHolder.attach(7, () -> GSON.fromJson(json, BoolExpr.class));
|
BoolExpr condition = AttachmentHolder.attach(7, () -> GSON.fromJson(json, BoolExpr.class));
|
||||||
return condition.get(MuUtils.addDefault(new ExpressionParameter()));
|
return condition.get(MuUtils.addDefault(new Scope()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
package io.gitlab.jfronny.respackopts.test;
|
package io.gitlab.jfronny.respackopts.test;
|
||||||
|
|
||||||
import io.gitlab.jfronny.muscript.*;
|
import io.gitlab.jfronny.muscript.compiler.Parser;
|
||||||
import io.gitlab.jfronny.muscript.compiler.*;
|
import io.gitlab.jfronny.muscript.data.Scope;
|
||||||
import io.gitlab.jfronny.respackopts.util.*;
|
import io.gitlab.jfronny.respackopts.util.MuUtils;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
public class TemporalExpressionTest {
|
public class TemporalExpressionTest {
|
||||||
@Test
|
@Test
|
||||||
void componentTest() {
|
void componentTest() {
|
||||||
ExpressionParameter param = MuUtils.addDefault(new ExpressionParameter());
|
Scope param = MuUtils.addDefault(new Scope());
|
||||||
|
|
||||||
assertEquals(10, Parser.parse("date(2020, 5, 10).day").asNumberExpr().get(param));
|
assertEquals(10, Parser.parse("date(2020, 5, 10).day").asNumberExpr().get(param));
|
||||||
assertEquals(5, Parser.parse("date(2020, 5, 10).month").asNumberExpr().get(param));
|
assertEquals(5, Parser.parse("date(2020, 5, 10).month").asNumberExpr().get(param));
|
||||||
|
@ -23,7 +24,7 @@ public class TemporalExpressionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void compareTest() {
|
void compareTest() {
|
||||||
ExpressionParameter param = MuUtils.addDefault(new ExpressionParameter());
|
Scope param = MuUtils.addDefault(new Scope());
|
||||||
|
|
||||||
assertTrue(Parser.parse("date(2020, 5, 10) > date(2020, 5, 9)").asBoolExpr().get(param));
|
assertTrue(Parser.parse("date(2020, 5, 10) > date(2020, 5, 9)").asBoolExpr().get(param));
|
||||||
assertTrue(Parser.parse("date(2020, 5, 10) > date(2020, 4, 10)").asBoolExpr().get(param));
|
assertTrue(Parser.parse("date(2020, 5, 10) > date(2020, 4, 10)").asBoolExpr().get(param));
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package io.gitlab.jfronny.respackopts.test;
|
package io.gitlab.jfronny.respackopts.test;
|
||||||
|
|
||||||
import io.gitlab.jfronny.gson.*;
|
import io.gitlab.jfronny.gson.*;
|
||||||
import io.gitlab.jfronny.muscript.compiler.expr.*;
|
import io.gitlab.jfronny.muscript.ast.*;
|
||||||
import io.gitlab.jfronny.respackopts.gson.*;
|
import io.gitlab.jfronny.respackopts.gson.*;
|
||||||
import io.gitlab.jfronny.respackopts.gson.entry.*;
|
import io.gitlab.jfronny.respackopts.gson.entry.*;
|
||||||
import io.gitlab.jfronny.respackopts.model.Condition;
|
import io.gitlab.jfronny.respackopts.model.Condition;
|
||||||
|
|
Loading…
Reference in New Issue