Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Runtime errors #7155

Merged
merged 28 commits into from
Jan 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
02391e2
proof of concept
sovdeeth Oct 18, 2024
dbdf666
Delete RuntimeError.java
sovdeeth Oct 18, 2024
729ab98
prototype limits
sovdeeth Nov 15, 2024
ac0d14f
Merge branch 'dev/feature' into feature/runtime-errors
sovdeeth Nov 15, 2024
30e2105
frame-based implementation
sovdeeth Nov 15, 2024
d832bc3
pull frame out into its own file
sovdeeth Nov 16, 2024
6868d30
lang entries
sovdeeth Nov 22, 2024
1e8676c
Merge branch 'dev/feature' into feature/runtime-errors
sovdeeth Nov 22, 2024
573b80e
Add config settings and permission-gated chat notifications
sovdeeth Dec 16, 2024
1578ee6
Merge branch 'dev/feature' into feature/runtime-errors
sovdeeth Dec 16, 2024
5efd862
Partial requested changes
sovdeeth Dec 17, 2024
86b539f
Merge branch 'dev/feature' into feature/runtime-errors
sovdeeth Dec 17, 2024
2d8fcd3
Major refactor
sovdeeth Dec 17, 2024
9b4cc68
Finish requested changes
sovdeeth Dec 18, 2024
ce365f1
More docs
sovdeeth Dec 18, 2024
f6fbe41
Merge branch 'dev/feature' into feature/runtime-errors
Moderocky Dec 18, 2024
736c4bc
whoopsie-daisy
sovdeeth Dec 18, 2024
9544c02
Merge branch 'feature/runtime-errors' of https://github.com/sovdeeth/…
sovdeeth Dec 18, 2024
09f4a6c
Merge branch 'dev/feature' into feature/runtime-errors
Efnilite Dec 18, 2024
13ff6c7
Requested Changes
sovdeeth Dec 20, 2024
5cfb74d
Update src/main/java/org/skriptlang/skript/log/runtime/RuntimeErrorMa…
sovdeeth Dec 20, 2024
729b806
Merge branch 'dev/feature' into feature/runtime-errors
Efnilite Dec 21, 2024
e9c7cff
Merge branch 'dev/feature' into feature/runtime-errors
sovdeeth Dec 27, 2024
4706109
Merge branch 'dev/feature' into feature/runtime-errors
sovdeeth Dec 29, 2024
2ef17fe
requested changes
sovdeeth Jan 1, 2025
90ae53a
Merge branch 'dev/feature' into feature/runtime-errors
sovdeeth Jan 1, 2025
162d708
Merge branch 'feature/runtime-errors' of https://github.com/sovdeeth/…
sovdeeth Jan 1, 2025
4eb5b8d
i'm so bad at conflict resolution
sovdeeth Jan 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/ch/njol/skript/ScriptLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@
import org.bukkit.event.Event;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.util.event.EventRegistry;
import org.skriptlang.skript.lang.script.Script;
import org.skriptlang.skript.lang.script.ScriptWarning;
import org.skriptlang.skript.lang.structure.Structure;
import org.skriptlang.skript.util.event.EventRegistry;

import java.io.File;
import java.io.FileFilter;
Expand Down
25 changes: 23 additions & 2 deletions src/main/java/ch/njol/skript/Skript.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@
import ch.njol.skript.registrations.Classes;
import ch.njol.skript.registrations.EventValues;
import ch.njol.skript.registrations.Feature;
import ch.njol.skript.test.runner.*;
import ch.njol.skript.test.runner.EffObjectives;
import ch.njol.skript.test.runner.SkriptAsyncJUnitTest;
import ch.njol.skript.test.runner.SkriptJUnitTest;
import ch.njol.skript.test.runner.SkriptTestEvent;
import ch.njol.skript.test.runner.TestMode;
import ch.njol.skript.test.runner.TestTracker;
import ch.njol.skript.timings.SkriptTimings;
import ch.njol.skript.update.ReleaseManifest;
import ch.njol.skript.update.ReleaseStatus;
Expand All @@ -36,7 +41,6 @@
import ch.njol.util.coll.iterator.EnumerationIterable;
import com.google.common.collect.Lists;
import com.google.gson.Gson;

import com.google.gson.GsonBuilder;
import org.bstats.bukkit.Metrics;
import org.bukkit.*;
Expand Down Expand Up @@ -71,12 +75,14 @@
import org.skriptlang.skript.bukkit.furnace.FurnaceModule;
import org.skriptlang.skript.bukkit.fishing.FishingModule;
import org.skriptlang.skript.bukkit.input.InputModule;
import org.skriptlang.skript.bukkit.log.runtime.BukkitRuntimeErrorConsumer;
import org.skriptlang.skript.bukkit.loottables.LootTableModule;
import org.skriptlang.skript.lang.comparator.Comparator;
import org.skriptlang.skript.lang.comparator.Comparators;
import org.skriptlang.skript.lang.converter.Converter;
import org.skriptlang.skript.lang.converter.Converters;
import org.skriptlang.skript.lang.entry.EntryValidator;
import org.skriptlang.skript.log.runtime.RuntimeErrorManager;
import org.skriptlang.skript.lang.experiment.ExperimentRegistry;
import org.skriptlang.skript.lang.script.Script;
import org.skriptlang.skript.lang.structure.Structure;
Expand Down Expand Up @@ -351,6 +357,13 @@ public File getScriptsFolder() {
return scriptsFolder;
}


// ================ RUNTIME ERRORS ================
public static RuntimeErrorManager getRuntimeErrorManager() {
return RuntimeErrorManager.getInstance();
}
// =================================================

@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
Expand Down Expand Up @@ -485,10 +498,18 @@ public void onEnable() {
}
}


// Config must be loaded after Java and Skript classes are parseable
// ... but also before platform check, because there is a config option to ignore some errors
SkriptConfig.load();

// Register the runtime error refresh after loading, so we can do the first instantiation manually.
SkriptConfig.eventRegistry().register(SkriptConfig.ReloadEvent.class, RuntimeErrorManager::refresh);

// init runtime error manager and add bukkit consumer.
RuntimeErrorManager.refresh();
getRuntimeErrorManager().addConsumer(new BukkitRuntimeErrorConsumer());

CompletableFuture<Boolean> aliases = Aliases.loadAsync();

// Now override the verbosity if test mode is enabled
Expand Down
7 changes: 1 addition & 6 deletions src/main/java/ch/njol/skript/SkriptCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,7 @@
import java.io.FileFilter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.logging.Level;
import java.util.stream.Collectors;

Expand Down
15 changes: 15 additions & 0 deletions src/main/java/ch/njol/skript/SkriptConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,21 @@ private static void userDisableHooks(Class<? extends Hook<?>> hookClass, boolean

public static final Option<Timespan> longParseTimeWarningThreshold = new Option<>("long parse time warning threshold", new Timespan(0));


public static final Option<Timespan> runtimeErrorFrameDuration = new Option<>("runtime errors.frame duration", new Timespan(Timespan.TimePeriod.SECOND, 1));

public static final Option<Integer> runtimeErrorLimitTotal = new Option<>("runtime errors.total errors per frame", 8);
public static final Option<Integer> runtimeWarningLimitTotal = new Option<>("runtime errors.total warnings per frame", 8);

public static final Option<Integer> runtimeErrorLimitLine = new Option<>("runtime errors.errors from one line per frame", 2);
public static final Option<Integer> runtimeWarningLimitLine = new Option<>("runtime errors.warnings from one line per frame", 2);

public static final Option<Integer> runtimeErrorLimitLineTimeout = new Option<>("runtime errors.error spam timeout limit", 4);
public static final Option<Integer> runtimeWarningLimitLineTimeout = new Option<>("runtime errors.warning spam timeout limit", 4);

public static final Option<Integer> runtimeErrorTimeoutDuration = new Option<>("runtime errors.error timeout length", 10);
public static final Option<Integer> runtimeWarningTimeoutDuration = new Option<>("runtime errors.warning timeout length", 10);

/**
* This should only be used in special cases
*/
Expand Down
3 changes: 0 additions & 3 deletions src/main/java/ch/njol/skript/config/Node.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;

/**
* @author Peter Güttinger
*/
public abstract class Node implements AnyNamed, Validated, NodeNavigator {

@Nullable
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/ch/njol/skript/entity/EntityData.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.NotSerializableException;
Expand Down Expand Up @@ -637,6 +638,11 @@ protected boolean deserialize(final String s) {
return false;
}

@Override
public @NotNull String getSyntaxTypeName() {
return "entity data";
}

@SuppressWarnings({"unchecked", "deprecation"})
protected static <E extends Entity> @Nullable E spawn(Location location, Class<E> type, Consumer<E> consumer) {
World world = location.getWorld();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package ch.njol.skript.expressions.base;

import ch.njol.skript.config.Node;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.util.LiteralUtils;
import ch.njol.util.Kleenean;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.log.runtime.SyntaxRuntimeErrorProducer;
import org.skriptlang.skript.lang.converter.Converter;

/**
Expand All @@ -14,8 +16,11 @@
* @see PropertyExpression
* @see PropertyExpression#register(Class, Class, String, String)
*/
public abstract class SimplePropertyExpression<F, T> extends PropertyExpression<F, T> implements Converter<F, T> {
public abstract class SimplePropertyExpression<F, T> extends PropertyExpression<F, T> implements Converter<F, T>, SyntaxRuntimeErrorProducer {

private Node node;
private String rawExpr;

@Override
@SuppressWarnings("unchecked")
public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
Expand All @@ -24,6 +29,8 @@ public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean is
return LiteralUtils.canInitSafely(getExpr());
}
setExpr((Expression<? extends F>) expressions[0]);
node = getParser().getNode();
rawExpr = parseResult.expr;
return true;
}

Expand All @@ -36,6 +43,16 @@ protected T[] get(Event event, F[] source) {
return super.get(source, this);
}

@Override
public Node getNode() {
return node;
}

@Override
public String toHighlight() {
return rawExpr;
}

/**
* Used to collect the property type used in the register method.
* This forms the toString of this SimplePropertyExpression.
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/ch/njol/skript/lang/Condition.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import ch.njol.util.Kleenean;
import org.bukkit.event.Event;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.lang.condition.Conditional;
import org.skriptlang.skript.registration.SyntaxInfo;
Expand Down Expand Up @@ -96,6 +97,11 @@ public final boolean isNegated() {
return negated;
}

@Override
public @NotNull String getSyntaxTypeName() {
return "condition";
}

/**
* Parse a raw string input as a condition.
*
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/ch/njol/skript/lang/Effect.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import ch.njol.skript.log.ParseLogHandler;
import ch.njol.skript.log.SkriptLogger;
import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Iterator;
Expand Down Expand Up @@ -63,4 +64,9 @@ public final boolean run(Event event) {
}
}

@Override
public @NotNull String getSyntaxTypeName() {
return "effect";
}

}
5 changes: 5 additions & 0 deletions src/main/java/ch/njol/skript/lang/Expression.java
Original file line number Diff line number Diff line change
Expand Up @@ -392,4 +392,9 @@ default <R> void changeInPlace(Event event, Function<T, R> changeFunction, boole
return newDelta == null ? delta : newDelta;
}

@Override
default @NotNull String getSyntaxTypeName() {
return "expression";
}

}
6 changes: 6 additions & 0 deletions src/main/java/ch/njol/skript/lang/Section.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import ch.njol.util.Kleenean;
import org.bukkit.event.Event;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
Expand Down Expand Up @@ -245,4 +246,9 @@ public boolean claimed() {

}

@Override
public @NotNull String getSyntaxTypeName() {
return "section";
}

}
8 changes: 8 additions & 0 deletions src/main/java/ch/njol/skript/lang/SyntaxElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.parser.ParserInstance;
import ch.njol.util.Kleenean;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;

/**
* Represents a general part of the syntax.
Expand All @@ -29,4 +31,10 @@ default ParserInstance getParser() {
return ParserInstance.get();
}

/**
* @return A string naming the type of syntax this is. e.g. "expression", "section".
*/
@Contract(pure = true)
@NotNull String getSyntaxTypeName();

}
6 changes: 6 additions & 0 deletions src/main/java/ch/njol/skript/util/visual/VisualEffect.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.bukkit.Particle;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Objects;
Expand Down Expand Up @@ -159,5 +160,10 @@ public boolean equals(@Nullable Object o) {
VisualEffect that = (VisualEffect) o;
return type == that.type && Objects.equals(data, that.data);
}

@Override
public @NotNull String getSyntaxTypeName() {
return "visual effect"; // why is this a unique syntax element, it really needs to go
}

}
Loading
Loading