diff --git a/Fiona.sln b/Fiona.sln index dee2dcd..d6168e3 100644 --- a/Fiona.sln +++ b/Fiona.sln @@ -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 @@ -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 @@ -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} diff --git a/ide/src/Fiona.IDE.Compiler/Compiler.cs b/ide/src/Fiona.IDE.Compiler/Compiler.cs index 9da061f..14ad028 100644 --- a/ide/src/Fiona.IDE.Compiler/Compiler.cs +++ b/ide/src/Fiona.IDE.Compiler/Compiler.cs @@ -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 { @@ -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 tokens = await Tokenizer.GetTokensAsync(reader); - ReadOnlyMemory parsedContent =(await parser.ParseAsync(tokens, projectFile)); - await file.WriteAsync(parsedContent); - } - catch (Exception e) - { - throw; - } - finally - { - file.Close(); - } + using StreamReader reader = new(file); + IReadOnlyCollection tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader); + ReadOnlyMemory parsedContent = (await parser.ParseAsync(tokens, projectFile)); + await file.WriteAsync(parsedContent); } - + } } \ No newline at end of file diff --git a/ide/src/Fiona.IDE.Compiler/Extension.cs b/ide/src/Fiona.IDE.Compiler/Extension.cs index 9692b82..eeb6518 100644 --- a/ide/src/Fiona.IDE.Compiler/Extension.cs +++ b/ide/src/Fiona.IDE.Compiler/Extension.cs @@ -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 @@ -12,14 +12,5 @@ public static IServiceCollection AddCompiler(this IServiceCollection services) services.AddSingleton(); return services; } - - - private static void AddTokens(this IServiceCollection services) - { - foreach (string tokenType in Enum.GetNames()) - { - services.Add(new ServiceDescriptor(typeof(IToken), new Token(Enum.Parse(tokenType), tokenType), ServiceLifetime.Singleton)); - } - } } } \ No newline at end of file diff --git a/ide/src/Fiona.IDE.Compiler/Fiona.IDE.Compiler.csproj b/ide/src/Fiona.IDE.Compiler/Fiona.IDE.Compiler.csproj index a89303b..048a1e0 100644 --- a/ide/src/Fiona.IDE.Compiler/Fiona.IDE.Compiler.csproj +++ b/ide/src/Fiona.IDE.Compiler/Fiona.IDE.Compiler.csproj @@ -12,6 +12,7 @@ + diff --git a/ide/src/Fiona.IDE.Compiler/Parser/IParser.cs b/ide/src/Fiona.IDE.Compiler/Parser/IParser.cs index 1af0fec..ed28b5a 100644 --- a/ide/src/Fiona.IDE.Compiler/Parser/IParser.cs +++ b/ide/src/Fiona.IDE.Compiler/Parser/IParser.cs @@ -1,5 +1,5 @@ -using Fiona.IDE.Compiler.Tokens; using Fiona.IDE.ProjectManager.Models; +using Fiona.IDE.Tokenizer; namespace Fiona.IDE.Compiler.Parser; diff --git a/ide/src/Fiona.IDE.Compiler/Parser/Models/Class.cs b/ide/src/Fiona.IDE.Compiler/Parser/Models/Class.cs index 1248728..25a12d2 100644 --- a/ide/src/Fiona.IDE.Compiler/Parser/Models/Class.cs +++ b/ide/src/Fiona.IDE.Compiler/Parser/Models/Class.cs @@ -1,4 +1,3 @@ -using Fiona.IDE.Compiler.Tokens; using System.Text; namespace Fiona.IDE.Compiler.Parser.Models; diff --git a/ide/src/Fiona.IDE.Compiler/Parser/Models/Dependency.cs b/ide/src/Fiona.IDE.Compiler/Parser/Models/Dependency.cs index 0a9ece8..4199b74 100644 --- a/ide/src/Fiona.IDE.Compiler/Parser/Models/Dependency.cs +++ b/ide/src/Fiona.IDE.Compiler/Parser/Models/Dependency.cs @@ -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; diff --git a/ide/src/Fiona.IDE.Compiler/Parser/Models/Endpoint.cs b/ide/src/Fiona.IDE.Compiler/Parser/Models/Endpoint.cs index 0d2eb23..212492e 100644 --- a/ide/src/Fiona.IDE.Compiler/Parser/Models/Endpoint.cs +++ b/ide/src/Fiona.IDE.Compiler/Parser/Models/Endpoint.cs @@ -1,4 +1,4 @@ -using Fiona.IDE.Compiler.Tokens; +using Fiona.IDE.Tokenizer; using System.Text; namespace Fiona.IDE.Compiler.Parser.Models; diff --git a/ide/src/Fiona.IDE.Compiler/Parser/Models/Parameter.cs b/ide/src/Fiona.IDE.Compiler/Parser/Models/Parameter.cs index 32ca78f..867d509 100644 --- a/ide/src/Fiona.IDE.Compiler/Parser/Models/Parameter.cs +++ b/ide/src/Fiona.IDE.Compiler/Parser/Models/Parameter.cs @@ -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; diff --git a/ide/src/Fiona.IDE.Compiler/Parser/Parser.cs b/ide/src/Fiona.IDE.Compiler/Parser/Parser.cs index 49a6644..9069020 100644 --- a/ide/src/Fiona.IDE.Compiler/Parser/Parser.cs +++ b/ide/src/Fiona.IDE.Compiler/Parser/Parser.cs @@ -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; diff --git a/ide/src/Fiona.IDE.Compiler/Parser/Validator.cs b/ide/src/Fiona.IDE.Compiler/Parser/Validator.cs index c4b5897..d8156be 100644 --- a/ide/src/Fiona.IDE.Compiler/Parser/Validator.cs +++ b/ide/src/Fiona.IDE.Compiler/Parser/Validator.cs @@ -1,5 +1,5 @@ using Fiona.IDE.Compiler.Parser.Exceptions; -using Fiona.IDE.Compiler.Tokens; +using Fiona.IDE.Tokenizer; namespace Fiona.IDE.Compiler.Parser; diff --git a/ide/src/Fiona.IDE.ProjectManager/Models/ProjectFile.cs b/ide/src/Fiona.IDE.ProjectManager/Models/ProjectFile.cs index b830885..9a4eb86 100644 --- a/ide/src/Fiona.IDE.ProjectManager/Models/ProjectFile.cs +++ b/ide/src/Fiona.IDE.ProjectManager/Models/ProjectFile.cs @@ -28,7 +28,9 @@ internal static async Task 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); diff --git a/ide/src/Fiona.IDE.Compiler/Tokens/Exceptons/EmptyInputStreamException.cs b/ide/src/Fiona.IDE.Tokenizer/Exceptions/EmptyInputStreamException.cs similarity index 65% rename from ide/src/Fiona.IDE.Compiler/Tokens/Exceptons/EmptyInputStreamException.cs rename to ide/src/Fiona.IDE.Tokenizer/Exceptions/EmptyInputStreamException.cs index 575e938..c96935d 100644 --- a/ide/src/Fiona.IDE.Compiler/Tokens/Exceptons/EmptyInputStreamException.cs +++ b/ide/src/Fiona.IDE.Tokenizer/Exceptions/EmptyInputStreamException.cs @@ -1,4 +1,4 @@ -namespace Fiona.IDE.Compiler.Tokens.Exceptons; +namespace Fiona.IDE.Tokenizer.Exceptions; public class EmptyInputStreamException() : Exception("The input stream is null") { diff --git a/ide/src/Fiona.IDE.Tokenizer/Fiona.IDE.Tokenizer.csproj b/ide/src/Fiona.IDE.Tokenizer/Fiona.IDE.Tokenizer.csproj new file mode 100644 index 0000000..3a63532 --- /dev/null +++ b/ide/src/Fiona.IDE.Tokenizer/Fiona.IDE.Tokenizer.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/ide/src/Fiona.IDE.Compiler/Tokens/IToken.cs b/ide/src/Fiona.IDE.Tokenizer/IToken.cs similarity index 65% rename from ide/src/Fiona.IDE.Compiler/Tokens/IToken.cs rename to ide/src/Fiona.IDE.Tokenizer/IToken.cs index 6059938..7bb656e 100644 --- a/ide/src/Fiona.IDE.Compiler/Tokens/IToken.cs +++ b/ide/src/Fiona.IDE.Tokenizer/IToken.cs @@ -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; } diff --git a/ide/src/Fiona.IDE.Tokenizer/InternalVisiebleTo.cs b/ide/src/Fiona.IDE.Tokenizer/InternalVisiebleTo.cs new file mode 100644 index 0000000..a00b870 --- /dev/null +++ b/ide/src/Fiona.IDE.Tokenizer/InternalVisiebleTo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly:InternalsVisibleTo("Fiona.IDE.Compiler.Tests")] \ No newline at end of file diff --git a/ide/src/Fiona.IDE.Compiler/Tokens/Token.cs b/ide/src/Fiona.IDE.Tokenizer/Token.cs similarity index 93% rename from ide/src/Fiona.IDE.Compiler/Tokens/Token.cs rename to ide/src/Fiona.IDE.Tokenizer/Token.cs index 264b5e2..8682309 100644 --- a/ide/src/Fiona.IDE.Compiler/Tokens/Token.cs +++ b/ide/src/Fiona.IDE.Tokenizer/Token.cs @@ -1,4 +1,4 @@ -namespace Fiona.IDE.Compiler.Tokens; +namespace Fiona.IDE.Tokenizer; internal sealed class Token : IToken { diff --git a/ide/src/Fiona.IDE.Compiler/Tokens/TokenFactory.cs b/ide/src/Fiona.IDE.Tokenizer/TokenFactory.cs similarity index 98% rename from ide/src/Fiona.IDE.Compiler/Tokens/TokenFactory.cs rename to ide/src/Fiona.IDE.Tokenizer/TokenFactory.cs index 1e51a42..d4b8dc4 100644 --- a/ide/src/Fiona.IDE.Compiler/Tokens/TokenFactory.cs +++ b/ide/src/Fiona.IDE.Tokenizer/TokenFactory.cs @@ -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 { diff --git a/ide/src/Fiona.IDE.Compiler/Tokens/TokenType.cs b/ide/src/Fiona.IDE.Tokenizer/TokenType.cs similarity index 91% rename from ide/src/Fiona.IDE.Compiler/Tokens/TokenType.cs rename to ide/src/Fiona.IDE.Tokenizer/TokenType.cs index 8525602..ed375f1 100644 --- a/ide/src/Fiona.IDE.Compiler/Tokens/TokenType.cs +++ b/ide/src/Fiona.IDE.Tokenizer/TokenType.cs @@ -1,6 +1,6 @@ -namespace Fiona.IDE.Compiler.Tokens; +namespace Fiona.IDE.Tokenizer; -internal enum TokenType +public enum TokenType { UsingBegin, UsingEnd, @@ -20,7 +20,7 @@ internal enum TokenType } -internal static class TokenTypeExtension { +public static class TokenTypeExtension { public static string GetTokenKeyword(this TokenType tokenType) { diff --git a/ide/src/Fiona.IDE.Compiler/Tokens/Tokenizer.cs b/ide/src/Fiona.IDE.Tokenizer/Tokenizer.cs similarity index 96% rename from ide/src/Fiona.IDE.Compiler/Tokens/Tokenizer.cs rename to ide/src/Fiona.IDE.Tokenizer/Tokenizer.cs index aa46e5c..e05193c 100644 --- a/ide/src/Fiona.IDE.Compiler/Tokens/Tokenizer.cs +++ b/ide/src/Fiona.IDE.Tokenizer/Tokenizer.cs @@ -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 = [';', '*']; diff --git a/ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTests.cs b/ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTests.cs index 52108dc..bba5594 100644 --- a/ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTests.cs +++ b/ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTests.cs @@ -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; @@ -27,7 +26,7 @@ public async Task When_Given_TokenizedCode_Should_Return_Parsed_Code() using StreamReader reader = new(stream); // act - IReadOnlyCollection tokens = await Tokenizer.GetTokensAsync(reader); + IReadOnlyCollection tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader); ReadOnlyMemory result = await _parser.ParseAsync(tokens, projectFile); string resultReader = Encoding.UTF8.GetString(result.ToArray()); @@ -64,7 +63,7 @@ public async Task When_Given_TokenizedCodeWithParameter_Should_Return_Parsed_Cod using StreamReader reader = new(stream); // act - IReadOnlyCollection tokens = await Tokenizer.GetTokensAsync(reader); + IReadOnlyCollection tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader); ReadOnlyMemory result = await _parser.ParseAsync(tokens, projectFile); string resultReader = Encoding.UTF8.GetString(result.ToArray()); @@ -108,7 +107,7 @@ public async Task When_Given_TokenizedCodeWithParameterAndBody_Should_Return_Par using StreamReader reader = new(stream); // act - IReadOnlyCollection tokens = await Tokenizer.GetTokensAsync(reader); + IReadOnlyCollection tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader); ReadOnlyMemory result = await _parser.ParseAsync(tokens, projectFile); string resultReader = Encoding.UTF8.GetString(result.ToArray()); diff --git a/ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTestsData.cs b/ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTestsData.cs index eb6d845..1273eb0 100644 --- a/ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTestsData.cs +++ b/ide/tests/Fiona.IDE.Compiler.Tests/Parser/ParserTestsData.cs @@ -1,4 +1,4 @@ -using Fiona.IDE.Compiler.Tokens; +using Fiona.IDE.Tokenizer; namespace Fiona.IDE.Compiler.Tests.Parser; diff --git a/ide/tests/Fiona.IDE.Compiler.Tests/Tokens/TokenizerTests.cs b/ide/tests/Fiona.IDE.Compiler.Tests/Tokens/TokenizerTests.cs index bf757ce..52d09ec 100644 --- a/ide/tests/Fiona.IDE.Compiler.Tests/Tokens/TokenizerTests.cs +++ b/ide/tests/Fiona.IDE.Compiler.Tests/Tokens/TokenizerTests.cs @@ -1,5 +1,5 @@ using Fiona.IDE.Compiler.Tests.Shared; -using Fiona.IDE.Compiler.Tokens; +using Fiona.IDE.Tokenizer; using FluentAssertions; using System.Text; @@ -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 tokens = await Tokenizer.GetTokensAsync(reader); + IReadOnlyCollection tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader); // Assert tokens.Count.Should().Be(5); tokens.First().Value.Should().Be(TokenType.UsingBegin.ToString()); @@ -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 tokens = await Tokenizer.GetTokensAsync(reader); + IReadOnlyCollection tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader); // Assert tokens.Count.Should().Be(9); tokens.First().Value.Should().Be("Token.Test"); @@ -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 tokens = await Tokenizer.GetTokensAsync(reader); + IReadOnlyCollection tokens = await Tokenizer.Tokenizer.GetTokensAsync(reader); // Assert tokens.Count.Should().Be(14); tokens.First().Value.Should().Be(TokenType.UsingBegin.ToString());