Skip to content

Commit 53e4c06

Browse files
committed
Fix string expression
1 parent ed2a982 commit 53e4c06

File tree

11 files changed

+49
-46
lines changed

11 files changed

+49
-46
lines changed

src/SimpleStateMachine.StructuralSearch.Tests/FindRuleParserTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using Pidgin;
44
using SimpleStateMachine.StructuralSearch.StructuralSearch;
55
using Xunit;
6-
using TemplateParser = SimpleStateMachine.StructuralSearch.CustomParsers.TemplateParser;
76

87
namespace SimpleStateMachine.StructuralSearch.Tests;
98

src/SimpleStateMachine.StructuralSearch.Tests/ParameterParserTests.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Pidgin;
2-
using SimpleStateMachine.StructuralSearch.Helper;
32
using SimpleStateMachine.StructuralSearch.StructuralSearch;
43
using Xunit;
54

@@ -11,6 +10,22 @@ public static class ParameterParserTests
1110
[InlineData("\\\"132\\\"")]
1211
[InlineData("132")]
1312
[InlineData(" ")]
13+
14+
[InlineData("(132)")]
15+
[InlineData("[(132)]")]
16+
[InlineData("{(())}")]
17+
[InlineData("()")]
18+
[InlineData("( )")]
19+
[InlineData("$var$")]
20+
[InlineData("$var$.Lenght")]
21+
[InlineData("$var$.Column.Start")]
22+
[InlineData("$var$.Column.End")]
23+
[InlineData("$var$.Offset.Start")]
24+
[InlineData("$var$.Offset.End")]
25+
[InlineData("$var$.Line.Start")]
26+
[InlineData("$var$.Line.End")]
27+
[InlineData("$var$.Trim")]
28+
[InlineData("$var$.Trim.Trim")]
1429
public static void OptionalStringParsingShouldBeSuccess(string str)
1530
{
1631
var result = ParametersParser.StringExpression.Before(CommonParser.Eof).ParseOrThrow(str);

src/SimpleStateMachine.StructuralSearch/Context/IParsingContext.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using SimpleStateMachine.StructuralSearch.Input;
33
using SimpleStateMachine.StructuralSearch.Operator.Logical;
44
using SimpleStateMachine.StructuralSearch.Placeholder;
5-
using SimpleStateMachine.StructuralSearch.Rules.FindRules;
65

76
namespace SimpleStateMachine.StructuralSearch.Context;
87

src/SimpleStateMachine.StructuralSearch/Context/ParsingContext.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using SimpleStateMachine.StructuralSearch.Input;
33
using SimpleStateMachine.StructuralSearch.Operator.Logical;
44
using SimpleStateMachine.StructuralSearch.Placeholder;
5-
using SimpleStateMachine.StructuralSearch.Rules.FindRules;
65

76
namespace SimpleStateMachine.StructuralSearch.Context;
87

src/SimpleStateMachine.StructuralSearch/CustomParsers/EmptyFindParser.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.Linq;
44
using SimpleStateMachine.StructuralSearch.Input;
55
using SimpleStateMachine.StructuralSearch.Operator.Logical;
6-
using SimpleStateMachine.StructuralSearch.Rules.FindRules;
76

87
namespace SimpleStateMachine.StructuralSearch.CustomParsers;
98

src/SimpleStateMachine.StructuralSearch/CustomParsers/FindParser.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using SimpleStateMachine.StructuralSearch.Extensions;
77
using SimpleStateMachine.StructuralSearch.Input;
88
using SimpleStateMachine.StructuralSearch.Operator.Logical;
9-
using SimpleStateMachine.StructuralSearch.Rules.FindRules;
109

1110
namespace SimpleStateMachine.StructuralSearch.CustomParsers;
1211

src/SimpleStateMachine.StructuralSearch/Operator/Logical/StringCompareOperation.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using SimpleStateMachine.StructuralSearch.Context;
3-
using SimpleStateMachine.StructuralSearch.Extensions;
43
using SimpleStateMachine.StructuralSearch.Helper;
54
using SimpleStateMachine.StructuralSearch.Operator.Logical.Type;
65
using SimpleStateMachine.StructuralSearch.Parameters;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using SimpleStateMachine.StructuralSearch.Context;
4+
5+
namespace SimpleStateMachine.StructuralSearch.Parameters;
6+
7+
internal class StringJoinParameter : IParameter
8+
{
9+
private readonly List<IParameter> _parameters;
10+
11+
public StringJoinParameter(List<IParameter> parameters)
12+
{
13+
_parameters = parameters;
14+
}
15+
16+
public string GetValue(ref IParsingContext context)
17+
{
18+
var localContext = context;
19+
var values = _parameters.Select(parameter => parameter.GetValue(ref localContext)).ToList();
20+
return string.Join(string.Empty, values);
21+
}
22+
23+
public override string ToString()
24+
=> string.Join(string.Empty, _parameters.Select(x => x.ToString()));
25+
}

src/SimpleStateMachine.StructuralSearch/Rules/StringJoinParameter.cs

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/SimpleStateMachine.StructuralSearch/StructuralSearch/ParametersParser.cs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using Pidgin;
45
using SimpleStateMachine.StructuralSearch.CustomParsers;
@@ -7,7 +8,6 @@
78
using SimpleStateMachine.StructuralSearch.Operator.String.Type;
89
using SimpleStateMachine.StructuralSearch.Parameters;
910
using SimpleStateMachine.StructuralSearch.Parameters.Types;
10-
using SimpleStateMachine.StructuralSearch.Rules;
1111

1212
namespace SimpleStateMachine.StructuralSearch.StructuralSearch;
1313

@@ -66,18 +66,14 @@ internal static class ParametersParser
6666
.Then(Parser.OneOf(PlaceholderLength, PlaceholderInput, PlaceholderPosition), (placeholder, buildPropertyFunc) => buildPropertyFunc(placeholder))
6767
.Then(ChainableString.Optional(), (placeholderProperty, chainableStringFunc) => chainableStringFunc.HasValue ? chainableStringFunc.Value(placeholderProperty) : placeholderProperty);
6868

69-
internal static readonly Parser<char, IParameter> StringExpression =
70-
Parsers.BetweenParentheses
69+
internal static readonly Parser<char, IParameter> StringExpression =
70+
Parser.OneOf(Parsers.BetweenParentheses
7171
(
72-
expr: Parser.OneOf
73-
(
74-
Parser.Rec(() => StringExpression ?? throw new ArgumentNullException(nameof(StringExpression))),
75-
PropertyAccess,
76-
AtomicToken
77-
),
78-
mapFunc: (c1, value, c2) => new ParenthesisedParameter(GetParenthesisType((c1, c2)), value)
79-
)
80-
.As<char, ParenthesisedParameter, IParameter>();
72+
expr: Parser.Rec(() => StringExpression ?? throw new ArgumentNullException(nameof(StringExpression))),
73+
mapFunc: IParameter (c1, value, c2) => new ParenthesisedParameter(GetParenthesisType((c1, c2)), value)
74+
), PropertyAccess, AtomicToken)
75+
.AtLeastOnce()
76+
.Select<IParameter>(parameters => new StringJoinParameter(parameters.ToList()));
8177

8278
private static ParenthesisType GetParenthesisType((char c1, char c2) parenthesis)
8379
=> parenthesis switch

0 commit comments

Comments
 (0)