Skip to content

Commit 4d13634

Browse files
add syntax for skipping not required args
1 parent 7134937 commit 4d13634

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

Code/ArgumentSystem/MethodArgumentDispatcher.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,34 @@ private static ConverterInfo GetConverterInfo(Type argType)
5050
throw new AndrzejFuckedUpException($"No suitable GetConvertSolution method found for {argType.GetAccurateName()}.");
5151
}
5252

53-
public TryGet<ArgumentValueInfo> TryGetValueInfo(BaseToken token, int index)
53+
public TryGet<ArgumentValueInfo?> TryGetValueInfo(BaseToken token, int index)
5454
{
5555
Result rs = $"Argument {index + 1} '{token.RawRep}' for method {method.Name} is invalid.";
5656

5757
Argument arg;
5858
if (index >= method.ExpectedArguments.Length)
5959
{
60-
if (method.ExpectedArguments.LastOrDefault()?.ConsumesRemainingValues != true)
60+
if (method.ExpectedArguments.LastOrDefault() is not { ConsumesRemainingValues: true } lastArg)
6161
{
6262
return rs + $"Method does not expect more than {method.ExpectedArguments.Length} arguments.";
6363
}
6464

65-
arg = method.ExpectedArguments.Last();
65+
arg = lastArg;
6666
}
6767
else
6868
{
6969
arg = method.ExpectedArguments[index];
7070
}
71+
72+
if (token.RawRep == "_")
73+
{
74+
if (arg.IsRequired)
75+
{
76+
return rs + "This argument is required, you cannot skip providing it by using the floor character.";
77+
}
78+
79+
return TryGet<ArgumentValueInfo?>.Success(null);
80+
}
7181

7282
arg.Script = method.Script;
7383
var argType = arg.GetType();

Code/ContextSystem/Contexts/MethodContext.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,19 @@ public class MethodContext(MethodToken methodToken) : YieldingContext, IMayRetur
3737
public override TryAddTokenRes TryAddToken(BaseToken token)
3838
{
3939
Log.Debug($"'{Method.Name}' method is now receiving token '{token.RawRep}' ({token.GetType().AccurateName})");
40+
41+
if (Dispatcher.TryGetValueInfo(token, _providedArguments)
42+
.HasErrored(out var error, out var possibleArgumentInfo))
43+
{
44+
return TryAddTokenRes.Error($"Value '{token.RawRep}' is not a valid argument: {error}");
45+
}
4046

41-
if (Dispatcher.TryGetValueInfo(token, _providedArguments).HasErrored(out var error, out var skeleton))
42-
return TryAddTokenRes.Error(
43-
$"Value '{token.RawRep}' is not a valid argument: " +
44-
$"{error}");
47+
if (!possibleArgumentInfo.HasValue) return TryAddTokenRes.Continue();
48+
var argInfo = possibleArgumentInfo.Value;
4549

46-
Log.Debug($"skeleton {skeleton.Name} {skeleton.ArgumentType} registered");
50+
Log.Debug($"skeleton {argInfo.Name} {argInfo.ArgumentType} registered");
4751

48-
Method.Args.Add(skeleton);
52+
Method.Args.Add(argInfo);
4953
_providedArguments++;
5054
return TryAddTokenRes.Continue();
5155
}

0 commit comments

Comments
 (0)