Skip to content

Commit f96a380

Browse files
committed
VariableNameArgument (non-generic and generic)
1 parent 1bce747 commit f96a380

4 files changed

Lines changed: 55 additions & 26 deletions

File tree

Code/ArgumentSystem/Arguments/PlayerVariableNameArgument.cs

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using JetBrains.Annotations;
2+
using SER.Code.ArgumentSystem.BaseArguments;
3+
using SER.Code.Extensions;
4+
using SER.Code.Helpers.ResultSystem;
5+
using SER.Code.TokenSystem.Tokens;
6+
using SER.Code.TokenSystem.Tokens.VariableTokens;
7+
8+
namespace SER.Code.ArgumentSystem.Arguments;
9+
10+
public class VariableNameArgument(string name) : Argument(name)
11+
{
12+
public override string InputDescription => "A variable name (doesn't have to be real)";
13+
14+
[UsedImplicitly]
15+
public DynamicTryGet<VariableToken> GetConvertSolution(BaseToken token)
16+
{
17+
if (token is not VariableToken variableToken)
18+
{
19+
return $"Value '{token.RawRep}' is not a syntactically valid variable name.";
20+
}
21+
22+
return variableToken;
23+
}
24+
}
25+
26+
public class VariableNameArgument<T>(string name) : Argument(name)
27+
where T : VariableToken
28+
{
29+
public string TypeName => typeof(T).AccurateName[.."VariableToken".Length].LowerFirst();
30+
31+
public override string InputDescription => $"A {TypeName} variable name (doesn't have to be real)";
32+
33+
[UsedImplicitly]
34+
public DynamicTryGet<T> GetConvertSolution(BaseToken token)
35+
{
36+
if (token is not T variableToken)
37+
{
38+
return $"Value '{token.RawRep}' is not a syntactically valid {TypeName} variable name.";
39+
}
40+
41+
return variableToken;
42+
}
43+
}

Code/ArgumentSystem/ProvidedArguments.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,16 @@ public Item[] GetItems(string argName)
102102
{
103103
return GetValue<Item[], ItemsArgument>(argName);
104104
}
105-
106-
public PlayerVariableToken GetPlayerVariableName(string argName)
105+
106+
public VariableToken GetVariableName(string argName)
107+
{
108+
return GetValue<VariableToken, VariableNameArgument>(argName);
109+
}
110+
111+
public T GetVariableName<T>(string argName)
112+
where T : VariableToken
107113
{
108-
return GetValue<PlayerVariableToken, PlayerVariableNameArgument>(argName);
114+
return GetValue<T, VariableNameArgument<T>>(argName);
109115
}
110116

111117
public Variable GetVariable(string argName)

Code/VariableSystem/Bases/Variable.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using SER.Code.Exceptions;
22
using SER.Code.Extensions;
3+
using SER.Code.TokenSystem.Tokens.VariableTokens;
34
using SER.Code.ValueSystem;
45
using SER.Code.VariableSystem.Variables;
56

@@ -29,6 +30,8 @@ public static Variable Create(string name, Value value)
2930
public sealed override string ToString() => $"{Prefix}{Name}";
3031

3132
public static bool AreSyntacticallySame(Variable a, Variable b) => a.Prefix == b.Prefix && a.Name == b.Name;
33+
34+
public static bool AreSyntacticallySame(Variable a, VariableToken b) => a.Prefix == b.Prefix && a.Name == b.Name;
3235
}
3336

3437
public abstract class Variable<TValue> : Variable

0 commit comments

Comments
 (0)