Skip to content

Commit d725212

Browse files
authored
Syntax Simplification (SkriptLang#7841)
1 parent 5edd3bb commit d725212

73 files changed

Lines changed: 951 additions & 253 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/ch/njol/skript/SkriptConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,10 @@ private static void userDisableHooks(Class<? extends Hook<?>> hookClass, boolean
375375
public static final Option<Integer> variableChangesUntilSave = new Option<>("variable changes until save", 1000)
376376
.setter(FlatFileStorage::setRequiredChangesForResave);
377377

378+
// intentionally not present in the config presented to the user. Users must manually add this option to disable it.
379+
public static final Option<Boolean> simplifySyntaxesOnParse = new Option<>("simplify syntax on parse", true)
380+
.optional(true);
381+
378382
/**
379383
* This should only be used in special cases
380384
*/

src/main/java/ch/njol/skript/effects/EffMessage.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,28 @@
11
package ch.njol.skript.effects;
22

3-
import java.util.List;
4-
import java.util.UUID;
5-
6-
import ch.njol.skript.registrations.Classes;
7-
import ch.njol.skript.util.LiteralUtils;
8-
import ch.njol.skript.util.chat.MessageComponent;
9-
import ch.njol.util.coll.CollectionUtils;
10-
import org.bukkit.command.CommandSender;
11-
import org.bukkit.entity.Player;
12-
import org.bukkit.event.Event;
13-
import org.jetbrains.annotations.Nullable;
14-
153
import ch.njol.skript.Skript;
16-
import ch.njol.skript.doc.Description;
17-
import ch.njol.skript.doc.Examples;
18-
import ch.njol.skript.doc.Name;
19-
import ch.njol.skript.doc.RequiredPlugins;
20-
import ch.njol.skript.doc.Since;
4+
import ch.njol.skript.doc.*;
215
import ch.njol.skript.expressions.ExprColoured;
226
import ch.njol.skript.lang.Effect;
237
import ch.njol.skript.lang.Expression;
248
import ch.njol.skript.lang.ExpressionList;
259
import ch.njol.skript.lang.SkriptParser.ParseResult;
2610
import ch.njol.skript.lang.VariableString;
11+
import ch.njol.skript.registrations.Classes;
12+
import ch.njol.skript.util.LiteralUtils;
2713
import ch.njol.skript.util.chat.BungeeConverter;
2814
import ch.njol.skript.util.chat.ChatMessages;
15+
import ch.njol.skript.util.chat.MessageComponent;
2916
import ch.njol.util.Kleenean;
17+
import ch.njol.util.coll.CollectionUtils;
3018
import net.md_5.bungee.api.chat.BaseComponent;
19+
import org.bukkit.command.CommandSender;
20+
import org.bukkit.entity.Player;
21+
import org.bukkit.event.Event;
22+
import org.jetbrains.annotations.Nullable;
23+
24+
import java.util.List;
25+
import java.util.UUID;
3126

3227
@Name("Message")
3328
@Description({"Sends a message to the given player. Only styles written",

src/main/java/ch/njol/skript/expressions/ExprARGB.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package ch.njol.skript.expressions;
22

3-
import ch.njol.skript.doc.Description;
4-
import ch.njol.skript.doc.Examples;
5-
import ch.njol.skript.doc.Keywords;
6-
import ch.njol.skript.doc.Name;
7-
import ch.njol.skript.doc.Since;
3+
import ch.njol.skript.doc.*;
84
import ch.njol.skript.expressions.base.SimplePropertyExpression;
95
import ch.njol.skript.lang.Expression;
6+
import ch.njol.skript.lang.Literal;
107
import ch.njol.skript.lang.SkriptParser.ParseResult;
118
import ch.njol.skript.util.Color;
129
import ch.njol.util.Kleenean;
10+
import ch.njol.skript.lang.simplification.SimplifiedLiteral;
1311

1412
import java.util.Locale;
1513
import java.util.function.Function;
@@ -54,6 +52,13 @@ protected String getPropertyName() {
5452
return color.name().toLowerCase(Locale.ENGLISH);
5553
}
5654

55+
@Override
56+
public Expression<? extends Integer> simplify() {
57+
if (getExpr() instanceof Literal<? extends Color>)
58+
return SimplifiedLiteral.fromExpression(this);
59+
return this;
60+
}
61+
5762
/**
5863
* helper enum for getting argb values of {@link Color}s.
5964
*/

src/main/java/ch/njol/skript/expressions/ExprAlphabetList.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
package ch.njol.skript.expressions;
22

3-
import java.util.Arrays;
4-
5-
import org.bukkit.event.Event;
6-
import org.jetbrains.annotations.Nullable;
7-
83
import ch.njol.skript.Skript;
94
import ch.njol.skript.doc.Description;
105
import ch.njol.skript.doc.Examples;
116
import ch.njol.skript.doc.Name;
127
import ch.njol.skript.doc.Since;
138
import ch.njol.skript.lang.Expression;
149
import ch.njol.skript.lang.ExpressionType;
10+
import ch.njol.skript.lang.Literal;
1511
import ch.njol.skript.lang.SkriptParser.ParseResult;
1612
import ch.njol.skript.lang.util.SimpleExpression;
1713
import ch.njol.util.Kleenean;
14+
import org.bukkit.event.Event;
15+
import org.jetbrains.annotations.Nullable;
16+
import ch.njol.skript.lang.simplification.SimplifiedLiteral;
17+
18+
import java.util.Arrays;
1819

1920
@Name("Alphabetical Sort")
2021
@Description("Sorts given strings in alphabetical order.")
@@ -38,8 +39,8 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
3839

3940
@Override
4041
@Nullable
41-
protected String[] get(Event e) {
42-
String[] sorted = texts.getAll(e).clone(); // Not yet sorted
42+
protected String[] get(Event event) {
43+
String[] sorted = texts.getAll(event).clone(); // Not yet sorted
4344
Arrays.sort(sorted); // Now sorted
4445
return sorted;
4546
}
@@ -55,8 +56,15 @@ public boolean isSingle() {
5556
}
5657

5758
@Override
58-
public String toString(@Nullable Event e, boolean debug) {
59-
return "alphabetically sorted strings: " + texts.toString(e, debug);
59+
public Expression<? extends String> simplify() {
60+
if (texts instanceof Literal<String>)
61+
return SimplifiedLiteral.fromExpression(this);
62+
return this;
63+
}
64+
65+
@Override
66+
public String toString(@Nullable Event event, boolean debug) {
67+
return "alphabetically sorted " + texts.toString(event, debug);
6068
}
6169

62-
}
70+
}

src/main/java/ch/njol/skript/expressions/ExprAltitude.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
package ch.njol.skript.expressions;
22

3-
import org.bukkit.Location;
4-
53
import ch.njol.skript.doc.Description;
6-
import ch.njol.skript.doc.Examples;
4+
import ch.njol.skript.doc.Example;
75
import ch.njol.skript.doc.Name;
86
import ch.njol.skript.doc.Since;
97
import ch.njol.skript.expressions.base.SimplePropertyExpression;
8+
import ch.njol.skript.lang.Expression;
9+
import ch.njol.skript.lang.Literal;
10+
import org.bukkit.Location;
11+
import ch.njol.skript.lang.simplification.SimplifiedLiteral;
1012

11-
/**
12-
* @author Peter Güttinger
13-
*/
1413
@Name("Altitude")
15-
@Description("Effectively an alias of 'y-<a href='#ExprCoordinate'>coordinate</a> of …', it represents the height of some object above bedrock.")
16-
@Examples({"on damage:",
17-
" altitude of the attacker is higher than the altitude of the victim",
18-
" set damage to damage * 1.2"})
14+
@Description("Effectively an alias of 'y-<a href='#ExprCoordinate'>coordinate</a> of …', it represents the height of some location within the world.")
15+
@Example("""
16+
on damage:
17+
altitude of the attacker is higher than the altitude of the victim
18+
set damage to damage * 1.2
19+
""")
1920
@Since("1.4.3")
2021
public class ExprAltitude extends SimplePropertyExpression<Location, Number> {
2122

@@ -37,5 +38,12 @@ protected String getPropertyName() {
3738
public Class<? extends Number> getReturnType() {
3839
return Number.class;
3940
}
40-
41+
42+
@Override
43+
public Expression<? extends Number> simplify() {
44+
if (getExpr() instanceof Literal<? extends Location>)
45+
return SimplifiedLiteral.fromExpression(this);
46+
return this;
47+
}
48+
4149
}

src/main/java/ch/njol/skript/expressions/ExprAngle.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
import ch.njol.skript.doc.Since;
88
import ch.njol.skript.lang.Expression;
99
import ch.njol.skript.lang.ExpressionType;
10+
import ch.njol.skript.lang.Literal;
1011
import ch.njol.skript.lang.SkriptParser.ParseResult;
1112
import ch.njol.skript.lang.util.SimpleExpression;
1213
import ch.njol.util.Kleenean;
1314
import org.bukkit.event.Event;
1415
import org.jetbrains.annotations.Nullable;
16+
import ch.njol.skript.lang.simplification.SimplifiedLiteral;
1517

1618
@Name("Angle")
1719
@Description({
@@ -72,6 +74,13 @@ public Class<? extends Number> getReturnType() {
7274
return Number.class;
7375
}
7476

77+
@Override
78+
public Expression<? extends Number> simplify() {
79+
if (angle instanceof Literal<?>)
80+
return SimplifiedLiteral.fromExpression(this);
81+
return this;
82+
}
83+
7584
@Override
7685
public String toString(@Nullable Event event, boolean debug) {
7786
return angle.toString(event, debug) + " in " + (isRadians ? "degrees" : "radians");

src/main/java/ch/njol/skript/expressions/ExprBannerItem.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"set {_item} to thing banner pattern item"
3535
})
3636
@Since("2.10")
37+
// TODO: turn this into a Literal
3738
public class ExprBannerItem extends SimpleExpression<ItemType> {
3839

3940
private static final Map<Object, Material> bannerMaterials = new HashMap<>();

src/main/java/ch/njol/skript/expressions/ExprBiome.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ch.njol.skript.expressions;
22

3+
import ch.njol.skript.lang.Literal;
34
import org.bukkit.Location;
45
import org.bukkit.block.Biome;
56
import org.bukkit.event.Event;
@@ -17,6 +18,7 @@
1718
import ch.njol.skript.lang.SkriptParser.ParseResult;
1819
import ch.njol.skript.util.Direction;
1920
import ch.njol.util.Kleenean;
21+
import ch.njol.skript.lang.simplification.SimplifiedLiteral;
2022

2123
/**
2224
* @author Peter Güttinger
@@ -74,12 +76,18 @@ public Class<? extends Biome> getReturnType() {
7476
return Biome.class;
7577
}
7678

79+
@Override
80+
public Expression<? extends Biome> simplify() {
81+
if (getExpr() instanceof Literal<? extends Location>)
82+
return SimplifiedLiteral.fromExpression(this);
83+
return this;
84+
}
85+
7786
@Override
7887
public String toString(@Nullable Event event, boolean debug) {
7988
return "the biome at " + getExpr().toString(event, debug);
8089
}
8190

82-
@SuppressWarnings("unchecked")
8391
@Override
8492
public boolean setTime(int time) {
8593
super.setTime(time, getExpr());

src/main/java/ch/njol/skript/expressions/ExprBlock.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
package ch.njol.skript.expressions;
22

3-
import org.bukkit.Location;
4-
import org.bukkit.block.Block;
5-
import org.bukkit.event.Event;
6-
import org.jetbrains.annotations.Nullable;
7-
83
import ch.njol.skript.Skript;
9-
import org.skriptlang.skript.lang.converter.Converter;
10-
import org.skriptlang.skript.lang.converter.ConverterInfo;
114
import ch.njol.skript.doc.Description;
125
import ch.njol.skript.doc.Examples;
136
import ch.njol.skript.doc.Name;
@@ -20,6 +13,11 @@
2013
import ch.njol.skript.lang.util.ConvertedExpression;
2114
import ch.njol.skript.util.Direction;
2215
import ch.njol.util.Kleenean;
16+
import org.bukkit.Location;
17+
import org.bukkit.block.Block;
18+
import org.bukkit.event.Event;
19+
import org.jetbrains.annotations.Nullable;
20+
import org.skriptlang.skript.lang.converter.ConverterInfo;
2321

2422
/**
2523
* @author Peter Güttinger
@@ -48,12 +46,7 @@ public boolean init(final Expression<?>[] exprs, final int matchedPattern, final
4846
if (exprs.length > 0) {
4947
setExpr(new ConvertedExpression<>(Direction.combine((Expression<? extends Direction>) exprs[0],
5048
(Expression<? extends Location>) exprs[1]), Block.class,
51-
new ConverterInfo<>(Location.class, Block.class, new Converter<Location, Block>() {
52-
@Override
53-
public Block convert(final Location l) {
54-
return l.getBlock();
55-
}
56-
}, 0)));
49+
new ConverterInfo<>(Location.class, Block.class, Location::getBlock, 0)));
5750
return true;
5851
} else {
5952
setExpr(new EventValueExpression<>(Block.class));

src/main/java/ch/njol/skript/expressions/ExprCharacterFromCodepoint.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import ch.njol.skript.doc.Name;
77
import ch.njol.skript.doc.Since;
88
import ch.njol.skript.expressions.base.SimplePropertyExpression;
9+
import ch.njol.skript.lang.Expression;
910
import ch.njol.skript.lang.ExpressionType;
11+
import ch.njol.skript.lang.Literal;
1012
import org.bukkit.event.Event;
1113
import org.jetbrains.annotations.Nullable;
14+
import ch.njol.skript.lang.simplification.SimplifiedLiteral;
1215

1316
@Name("Character from Codepoint")
1417
@Description("Returns the character at the specified codepoint")
@@ -43,6 +46,13 @@ public Class<? extends String> getReturnType() {
4346
return String.class;
4447
}
4548

49+
@Override
50+
public Expression<? extends String> simplify() {
51+
if (getExpr() instanceof Literal<? extends Integer>)
52+
return SimplifiedLiteral.fromExpression(this);
53+
return this;
54+
}
55+
4656
@Override
4757
public String toString(@Nullable Event event, boolean debug) {
4858
return "character at codepoint " + getExpr().toString(event, debug);

0 commit comments

Comments
 (0)