Skip to content

Commit 380242a

Browse files
committed
Fix template parser
1 parent 4780118 commit 380242a

File tree

10 files changed

+41
-79
lines changed

10 files changed

+41
-79
lines changed

src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common.cs

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

src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Common2.cs

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

src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Methods.cs renamed to src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/Methods.txt

File renamed without changes.

src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/NullUnionOperator.cs renamed to src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/NullUnionOperator.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ public static void Test1()
66
{
77
int? result;
88
int? temp1 = 5;
9-
int? temp2 = 5;
10-
9+
int? temp2 = 5;
10+
1111
if (temp1 is null)
1212
result = temp1 ?? temp2;
1313
else

src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/TernaryOperator.cs renamed to src/SimpleStateMachine.StructuralSearch.Tests/ExamplesInput/TernaryOperator.txt

File renamed without changes.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.Linq;
2+
using Xunit;
3+
4+
namespace SimpleStateMachine.StructuralSearch.Tests;
5+
6+
public static class PlaceholderParserTests
7+
{
8+
[Theory]
9+
[InlineData("($test$)", "(value )", "value ")]
10+
[InlineData("($test$ )", "(value )", "value")]
11+
[InlineData("($test$)", "(value (test))", "value (test)")]
12+
[InlineData("($test$)", "(value (test) )", "value (test) ")]
13+
[InlineData("$var$;", "test;;", "test")]
14+
[InlineData("$var$;.", "test;;;.", "test;;")]
15+
[InlineData("$value2$", "temp1 ?? temp2", "temp1 ?? temp2")]
16+
[InlineData("= $value2$;", "= temp1 ?? temp2;", "temp1 ?? temp2")]
17+
public static void PlaceholderParsingShouldBeSuccess(string template, string source, string expectedResult)
18+
{
19+
var input = Input.Input.String(source);
20+
var templateParser = StructuralSearch.StructuralSearch.ParseFindTemplate(template);
21+
var matches = templateParser.Parse(input);
22+
Assert.Single(matches);
23+
var match = matches.First();
24+
var placeholder = match.Placeholders.First();
25+
Assert.Equal(expectedResult, placeholder.Value.Value);
26+
}
27+
}

src/SimpleStateMachine.StructuralSearch.Tests/StructurSearchParserTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ namespace SimpleStateMachine.StructuralSearch.Tests;
88
public static class StructuralSearchParserTests
99
{
1010
[Theory]
11-
[InlineData("NullUnionOperator", "ExamplesInput/NullUnionOperator.cs", 2)]
12-
[InlineData("TernaryOperator", "ExamplesInput/TernaryOperator.cs", 3)]
11+
[InlineData("NullUnionOperator", "ExamplesInput/NullUnionOperator.txt", 2)]
12+
[InlineData("TernaryOperator", "ExamplesInput/TernaryOperator.txt", 3)]
1313
public static void StructuralSearchShouldBeSuccess(string exampleName, string exampleFilePath, int matchesCount)
1414
{
1515
var config = ConfigurationMock.GetConfigurationFromFiles(exampleName);

src/SimpleStateMachine.StructuralSearch.Tests/StructuralSearchTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public static void StructuralSearchShouldBeSuccess(string inputText, string temp
4141

4242

4343
[Theory]
44-
[InlineData("ExamplesInput/Methods.cs")]
44+
[InlineData("ExamplesInput/Methods.txt")]
4545
public static void StructuralSearchFileParsingShouldBeSuccess(string filePath)
4646
{
4747
var configuration = new Configuration

src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindRuleParser.cs

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

src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindTemplateParser.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ internal static class FindTemplateParser
2020
Grammar.WhiteSpaces.SelectToParser((_, parser) => parser);
2121

2222
// template_component = placeholder | template_string_literal | whitespace
23-
private static readonly Parser<char, IEnumerable<Parser<char, string>>> TemplateComponent
24-
= Parser.OneOf(Placeholder, TemplateStringLiteral, WhiteSpaces).AtLeastOnce();
23+
private static readonly Parser<char, Parser<char, string>> TemplateComponent
24+
= Parser.OneOf(Placeholder, TemplateStringLiteral, WhiteSpaces);
2525

2626
// template_between_parentheses = '(' template ')' | '{' template '}' | '[' template ']
2727
private static readonly Parser<char, IEnumerable<Parser<char, string>>> TemplateBetweenParentheses
28-
= Parser.Rec(() => Template ?? throw new ArgumentNullException(nameof(Template))).Optional()
28+
= Parser.Rec(() => Template ?? throw new ArgumentNullException(nameof(Template)))
29+
.Optional() // To support empty Parentheses
2930
.BetweenAnyParentheses((left, result, right) =>
3031
{
3132
var leftParser = Parser.Char(left).AsString();
@@ -36,6 +37,9 @@ private static readonly Parser<char, IEnumerable<Parser<char, string>>> Template
3637

3738
// template = (template_component | template_between_parentheses)+
3839
internal static readonly Parser<char, IEnumerable<Parser<char, string>>> Template =
39-
Parser.OneOf(TemplateBetweenParentheses, TemplateComponent)
40-
.AtLeastOnce().Select(list => list.SelectMany(x => x));
40+
Parser.OneOf
41+
(
42+
TemplateBetweenParentheses,
43+
TemplateComponent.Select<IEnumerable<Parser<char, string>>>(x => new List<Parser<char, string>> { x })
44+
).AtLeastOnce().Select(list => list.SelectMany(x => x));
4145
}

0 commit comments

Comments
 (0)