Skip to content

Commit

Permalink
move tokenizer to new project and fix UT
Browse files Browse the repository at this point in the history
  • Loading branch information
keyroll-99 committed May 30, 2024
1 parent d077b2c commit a35d4bd
Show file tree
Hide file tree
Showing 23 changed files with 57 additions and 59 deletions.
7 changes: 7 additions & 0 deletions Fiona.sln
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{2C5448CC
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fiona.IDE.Compiler.Tests", "ide\tests\Fiona.IDE.Compiler.Tests\Fiona.IDE.Compiler.Tests.csproj", "{0BCA4496-00BA-4F91-B725-79680AD4AF17}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fiona.IDE.Tokenizer", "ide\src\Fiona.IDE.Tokenizer\Fiona.IDE.Tokenizer.csproj", "{0FC41D88-1E95-4CBA-BCA5-7116C2619002}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -85,6 +87,10 @@ Global
{0BCA4496-00BA-4F91-B725-79680AD4AF17}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0BCA4496-00BA-4F91-B725-79680AD4AF17}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0BCA4496-00BA-4F91-B725-79680AD4AF17}.Release|Any CPU.Build.0 = Release|Any CPU
{0FC41D88-1E95-4CBA-BCA5-7116C2619002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0FC41D88-1E95-4CBA-BCA5-7116C2619002}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FC41D88-1E95-4CBA-BCA5-7116C2619002}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0FC41D88-1E95-4CBA-BCA5-7116C2619002}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -105,6 +111,7 @@ Global
{7521761E-B0D2-4A52-BF3A-C719971680D0} = {9386A258-6F1D-4785-BD1B-0468D65DC3A6}
{2C5448CC-C600-46F1-978C-0972771275DC} = {D59629DE-5F27-45CE-900A-B57751CF077C}
{0BCA4496-00BA-4F91-B725-79680AD4AF17} = {2C5448CC-C600-46F1-978C-0972771275DC}
{0FC41D88-1E95-4CBA-BCA5-7116C2619002} = {9386A258-6F1D-4785-BD1B-0468D65DC3A6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5E1ADD6E-3523-4A6C-87B1-B8FB8A03ED19}
Expand Down
25 changes: 6 additions & 19 deletions ide/src/Fiona.IDE.Compiler/Compiler.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
using Fiona.IDE.Compiler.Parser;
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.ProjectManager;
using Fiona.IDE.ProjectManager.Models;
using System.Text;
using Fiona.IDE.Tokenizer;

namespace Fiona.IDE.Compiler
{
Expand All @@ -19,24 +18,12 @@ public async Task RunAsync()

private async Task ParseFileAsync(ProjectFile projectFile)
{

await using FileStream file = File.Open(projectFile.Path, FileMode.Open);
try
{
using StreamReader reader = new(file);
IReadOnlyCollection<IToken> tokens = await Tokenizer.GetTokensAsync(reader);
ReadOnlyMemory<byte> parsedContent =(await parser.ParseAsync(tokens, projectFile));
await file.WriteAsync(parsedContent);
}
catch (Exception e)
{
throw;
}
finally
{
file.Close();
}
using StreamReader reader = new(file);
IReadOnlyCollection<IToken> tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader);
ReadOnlyMemory<byte> parsedContent = (await parser.ParseAsync(tokens, projectFile));
await file.WriteAsync(parsedContent);
}

}
}
11 changes: 1 addition & 10 deletions ide/src/Fiona.IDE.Compiler/Extension.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Fiona.IDE.Compiler.Parser;
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.Tokenizer;
using Microsoft.Extensions.DependencyInjection;

namespace Fiona.IDE.Compiler
Expand All @@ -12,14 +12,5 @@ public static IServiceCollection AddCompiler(this IServiceCollection services)
services.AddSingleton<IParser, Parser.Parser>();
return services;
}


private static void AddTokens(this IServiceCollection services)
{
foreach (string tokenType in Enum.GetNames<TokenType>())
{
services.Add(new ServiceDescriptor(typeof(IToken), new Token(Enum.Parse<TokenType>(tokenType), tokenType), ServiceLifetime.Singleton));
}
}
}
}
1 change: 1 addition & 0 deletions ide/src/Fiona.IDE.Compiler/Fiona.IDE.Compiler.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

<ItemGroup>
<ProjectReference Include="..\Fiona.IDE.ProjectManager\Fiona.IDE.ProjectManager.csproj" />
<ProjectReference Include="..\Fiona.IDE.Tokenizer\Fiona.IDE.Tokenizer.csproj" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion ide/src/Fiona.IDE.Compiler/Parser/IParser.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.ProjectManager.Models;
using Fiona.IDE.Tokenizer;

namespace Fiona.IDE.Compiler.Parser;

Expand Down
1 change: 0 additions & 1 deletion ide/src/Fiona.IDE.Compiler/Parser/Models/Class.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using Fiona.IDE.Compiler.Tokens;
using System.Text;

namespace Fiona.IDE.Compiler.Parser.Models;
Expand Down
2 changes: 1 addition & 1 deletion ide/src/Fiona.IDE.Compiler/Parser/Models/Dependency.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Fiona.IDE.Compiler.Parser.Exceptions;
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.Tokenizer;

namespace Fiona.IDE.Compiler.Parser.Models;

Expand Down
2 changes: 1 addition & 1 deletion ide/src/Fiona.IDE.Compiler/Parser/Models/Endpoint.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.Tokenizer;
using System.Text;

namespace Fiona.IDE.Compiler.Parser.Models;
Expand Down
2 changes: 1 addition & 1 deletion ide/src/Fiona.IDE.Compiler/Parser/Models/Parameter.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Fiona.IDE.Compiler.Parser.Exceptions;
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.Tokenizer;

namespace Fiona.IDE.Compiler.Parser.Models;

Expand Down
2 changes: 1 addition & 1 deletion ide/src/Fiona.IDE.Compiler/Parser/Parser.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Fiona.IDE.Compiler.Parser.Exceptions;
using Fiona.IDE.Compiler.Parser.Models;
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.ProjectManager.Models;
using Fiona.IDE.Tokenizer;
using Microsoft.VisualBasic;
using System.Text;
using Class=Fiona.IDE.Compiler.Parser.Models.Class;
Expand Down
2 changes: 1 addition & 1 deletion ide/src/Fiona.IDE.Compiler/Parser/Validator.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Fiona.IDE.Compiler.Parser.Exceptions;
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.Tokenizer;

namespace Fiona.IDE.Compiler.Parser;

Expand Down
4 changes: 3 additions & 1 deletion ide/src/Fiona.IDE.ProjectManager/Models/ProjectFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ internal static async Task<ProjectFile> Create(string path)
{
throw new FileAlreadyExistsException(path);
}
File.Create(path);
FileStream fileHandler = File.Create(path);
// We have to close file after create
fileHandler.Close();

ProjectFile projectFile = new(path);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Fiona.IDE.Compiler.Tokens.Exceptons;
namespace Fiona.IDE.Tokenizer.Exceptions;

public class EmptyInputStreamException() : Exception("The input stream is null")
{
Expand Down
9 changes: 9 additions & 0 deletions ide/src/Fiona.IDE.Tokenizer/Fiona.IDE.Tokenizer.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace Fiona.IDE.Compiler.Tokens;
namespace Fiona.IDE.Tokenizer;

internal interface IToken
public interface IToken
{
public string? Value { get; }
public TokenType Type { get; }
Expand Down
3 changes: 3 additions & 0 deletions ide/src/Fiona.IDE.Tokenizer/InternalVisiebleTo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
using System.Runtime.CompilerServices;

[assembly:InternalsVisibleTo("Fiona.IDE.Compiler.Tests")]
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Fiona.IDE.Compiler.Tokens;
namespace Fiona.IDE.Tokenizer;

internal sealed class Token : IToken
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Fiona.IDE.Compiler.Parser.Exceptions;
using Fiona.IDE.Tokenizer.Exceptions;
using System.Text;

namespace Fiona.IDE.Compiler.Tokens;
namespace Fiona.IDE.Tokenizer;

internal static class TokenFactory
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace Fiona.IDE.Compiler.Tokens;
namespace Fiona.IDE.Tokenizer;

internal enum TokenType
public enum TokenType
{
UsingBegin,
UsingEnd,
Expand All @@ -20,7 +20,7 @@ internal enum TokenType
}


internal static class TokenTypeExtension {
public static class TokenTypeExtension {

public static string GetTokenKeyword(this TokenType tokenType)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using Fiona.IDE.Compiler.Tokens.Exceptons;
using Fiona.IDE.Tokenizer.Exceptions;
using System.Text;

namespace Fiona.IDE.Compiler.Tokens;
namespace Fiona.IDE.Tokenizer;

internal static class Tokenizer
public static class Tokenizer
{
private static readonly char[] SplitChars = [';', '*'];

Expand Down
9 changes: 4 additions & 5 deletions ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTests.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
using Fiona.IDE.Compiler.Parser;
using Fiona.IDE.Compiler.Parser.Exceptions;
using Fiona.IDE.Compiler.Tests.Shared;
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.ProjectManager.Models;
using Fiona.IDE.Tokenizer;
using FluentAssertions;
using System.Text;
using System.Text.RegularExpressions;
Expand All @@ -27,7 +26,7 @@ public async Task When_Given_TokenizedCode_Should_Return_Parsed_Code()
using StreamReader reader = new(stream);

// act
IReadOnlyCollection<IToken> tokens = await Tokenizer.GetTokensAsync(reader);
IReadOnlyCollection<IToken> tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader);
ReadOnlyMemory<byte> result = await _parser.ParseAsync(tokens, projectFile);
string resultReader = Encoding.UTF8.GetString(result.ToArray());

Expand Down Expand Up @@ -64,7 +63,7 @@ public async Task When_Given_TokenizedCodeWithParameter_Should_Return_Parsed_Cod
using StreamReader reader = new(stream);

// act
IReadOnlyCollection<IToken> tokens = await Tokenizer.GetTokensAsync(reader);
IReadOnlyCollection<IToken> tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader);
ReadOnlyMemory<byte> result = await _parser.ParseAsync(tokens, projectFile);
string resultReader = Encoding.UTF8.GetString(result.ToArray());

Expand Down Expand Up @@ -108,7 +107,7 @@ public async Task When_Given_TokenizedCodeWithParameterAndBody_Should_Return_Par
using StreamReader reader = new(stream);

// act
IReadOnlyCollection<IToken> tokens = await Tokenizer.GetTokensAsync(reader);
IReadOnlyCollection<IToken> tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader);
ReadOnlyMemory<byte> result = await _parser.ParseAsync(tokens, projectFile);
string resultReader = Encoding.UTF8.GetString(result.ToArray());

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.Tokenizer;

namespace Fiona.IDE.Compiler.Tests.Parser;

Expand Down
8 changes: 4 additions & 4 deletions ide/tests/Fiona.IDE.Compiler.Tests/Tokens/TokenizerTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Fiona.IDE.Compiler.Tests.Shared;
using Fiona.IDE.Compiler.Tokens;
using Fiona.IDE.Tokenizer;
using FluentAssertions;
using System.Text;

Expand All @@ -14,7 +14,7 @@ public async Task When_Given_String_With_Using_Clause_Should_Return_Using_Tokens
using MemoryStream stream = new(Encoding.UTF8.GetBytes(SampleTestCode.UsingTokens!));
using StreamReader reader = new(stream);
// Act
IReadOnlyCollection<IToken> tokens = await Tokenizer.GetTokensAsync(reader);
IReadOnlyCollection<IToken> tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader);
// Assert
tokens.Count.Should().Be(5);
tokens.First().Value.Should().Be(TokenType.UsingBegin.ToString());
Expand All @@ -36,7 +36,7 @@ public async Task When_Given_String_With_Controller_Clause_Should_Return_Control
using MemoryStream stream = new(Encoding.UTF8.GetBytes(SampleTestCode.ControllerTokens));
using StreamReader reader = new(stream);
// Act
IReadOnlyCollection<IToken> tokens = await Tokenizer.GetTokensAsync(reader);
IReadOnlyCollection<IToken> tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader);
// Assert
tokens.Count.Should().Be(9);
tokens.First().Value.Should().Be("Token.Test");
Expand Down Expand Up @@ -66,7 +66,7 @@ public async Task When_Given_String_With_Full_Endpoint_Definition_Clause_Should_
using MemoryStream stream = new(Encoding.UTF8.GetBytes(SampleTestCode.FullTokensTest!));
using StreamReader reader = new(stream);
// Act
IReadOnlyCollection<IToken> tokens = await Tokenizer.GetTokensAsync(reader);
IReadOnlyCollection<IToken> tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader);
// Assert
tokens.Count.Should().Be(14);
tokens.First().Value.Should().Be(TokenType.UsingBegin.ToString());
Expand Down

0 comments on commit a35d4bd

Please sign in to comment.