diff --git a/README.md b/README.md index af1c6d7..9a626c5 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,10 @@ Installation is simple, just install via dotnet add package ClosureOSS.Calendare.VSyntaxReader ~~~ +# Usage + +Refer to the examples in the VSyntaxReader.Examples folder. + # Scope ## Supported RFC's diff --git a/VSyntaxReader.Examples/packages.lock.json b/VSyntaxReader.Examples/packages.lock.json index 7fdb2c0..6ba5be7 100644 --- a/VSyntaxReader.Examples/packages.lock.json +++ b/VSyntaxReader.Examples/packages.lock.json @@ -10,8 +10,8 @@ }, "LinkDotNet.StringBuilder": { "type": "Transitive", - "resolved": "3.2.0", - "contentHash": "lCVle+mEP4RKmsvWYLsXC3aR3byETFej3HN/L2xQ5yPIK/lzTjtWHLMObk90/9mbeOnv2cooWBtMVEMNh8aM/g==" + "resolved": "3.3.0", + "contentHash": "WtPuxOokoW4n867vlcy7oL2JWclsBWfDl7N7KYuTlI48IXqOtf6knxtYO4ldJeDUGc8AHt9gvATaKyU4YhlRGA==" }, "NodaTime": { "type": "Transitive", @@ -20,8 +20,8 @@ }, "NodaTime.Serialization.SystemTextJson": { "type": "Transitive", - "resolved": "1.3.0", - "contentHash": "Zf9sdKrfcId0rvZLOB7Yncy/cfCv20TdQ84IKE6CkcWW33u1wsRvmYUbfaP5MYUm+9vp9Yoi3G2vN1/9nZ/JCA==", + "resolved": "1.3.1", + "contentHash": "Ndo6VK/TwyIjcppiHY3I3p1iFM+dkjIghiSR/eC3rzu0whoV2GY9F5xCERf5BZDmkI4HuExlA4UE/smDV46SkQ==", "dependencies": { "NodaTime": "[3.0.0, 4.0.0)" } @@ -29,9 +29,9 @@ "ClosureOSS.Calendare.VSyntaxReader": { "type": "Project", "dependencies": { - "LinkDotNet.StringBuilder": "[3.2.0, )", + "LinkDotNet.StringBuilder": "[3.3.0, )", "NodaTime": "[3.3.0, )", - "NodaTime.Serialization.SystemTextJson": "[1.3.0, )" + "NodaTime.Serialization.SystemTextJson": "[1.3.1, )" } } } diff --git a/VSyntaxReader.Tests/PropertiesGeneric/ListComparerTest.cs b/VSyntaxReader.Tests/PropertiesGeneric/ListComparerTest.cs index 0438cb9..04ddada 100644 --- a/VSyntaxReader.Tests/PropertiesGeneric/ListComparerTest.cs +++ b/VSyntaxReader.Tests/PropertiesGeneric/ListComparerTest.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Calendare.VSyntaxReader.Components; -using Calendare.VSyntaxReader.Models; +using Calendare.VSyntaxReader.Components; using Calendare.VSyntaxReader.Operations; using Calendare.VSyntaxReader.Properties; -using NodaTime; using Xunit.Abstractions; namespace VSyntaxReader.Tests.PropertiesGeneric; diff --git a/VSyntaxReader.Tests/PropertiesGeneric/MergeTest.cs b/VSyntaxReader.Tests/PropertiesGeneric/MergeTest.cs index 101102c..e7c9f42 100644 --- a/VSyntaxReader.Tests/PropertiesGeneric/MergeTest.cs +++ b/VSyntaxReader.Tests/PropertiesGeneric/MergeTest.cs @@ -1,5 +1,4 @@ -using System; -using System.Linq; +using System.Linq; using Calendare.VSyntaxReader.Components; using Calendare.VSyntaxReader.Models; using Calendare.VSyntaxReader.Properties; diff --git a/VSyntaxReader.Tests/packages.lock.json b/VSyntaxReader.Tests/packages.lock.json index 75053db..c3d8218 100644 --- a/VSyntaxReader.Tests/packages.lock.json +++ b/VSyntaxReader.Tests/packages.lock.json @@ -43,8 +43,8 @@ }, "LinkDotNet.StringBuilder": { "type": "Transitive", - "resolved": "3.2.0", - "contentHash": "lCVle+mEP4RKmsvWYLsXC3aR3byETFej3HN/L2xQ5yPIK/lzTjtWHLMObk90/9mbeOnv2cooWBtMVEMNh8aM/g==" + "resolved": "3.3.0", + "contentHash": "WtPuxOokoW4n867vlcy7oL2JWclsBWfDl7N7KYuTlI48IXqOtf6knxtYO4ldJeDUGc8AHt9gvATaKyU4YhlRGA==" }, "Microsoft.CodeCoverage": { "type": "Transitive", @@ -77,8 +77,8 @@ }, "NodaTime.Serialization.SystemTextJson": { "type": "Transitive", - "resolved": "1.3.0", - "contentHash": "Zf9sdKrfcId0rvZLOB7Yncy/cfCv20TdQ84IKE6CkcWW33u1wsRvmYUbfaP5MYUm+9vp9Yoi3G2vN1/9nZ/JCA==", + "resolved": "1.3.1", + "contentHash": "Ndo6VK/TwyIjcppiHY3I3p1iFM+dkjIghiSR/eC3rzu0whoV2GY9F5xCERf5BZDmkI4HuExlA4UE/smDV46SkQ==", "dependencies": { "NodaTime": "[3.0.0, 4.0.0)" } @@ -126,9 +126,9 @@ "ClosureOSS.Calendare.VSyntaxReader": { "type": "Project", "dependencies": { - "LinkDotNet.StringBuilder": "[3.2.0, )", + "LinkDotNet.StringBuilder": "[3.3.0, )", "NodaTime": "[3.3.0, )", - "NodaTime.Serialization.SystemTextJson": "[1.3.0, )" + "NodaTime.Serialization.SystemTextJson": "[1.3.1, )" } } } diff --git a/VSyntaxReader/Line.cs b/VSyntaxReader/Line.cs index 449299e..309776a 100644 --- a/VSyntaxReader/Line.cs +++ b/VSyntaxReader/Line.cs @@ -1,6 +1,6 @@ namespace Calendare.VSyntaxReader; -public class Line +sealed class Line { public required string Raw { get; set; } public int LineNo { get; set; } diff --git a/VSyntaxReader/LineReader.cs b/VSyntaxReader/LineReader.cs index 69034f6..c5663e3 100644 --- a/VSyntaxReader/LineReader.cs +++ b/VSyntaxReader/LineReader.cs @@ -4,7 +4,7 @@ namespace Calendare.VSyntaxReader; -public class LineReader +sealed class LineReader { private readonly Stream Stream; private readonly int BufferSize = 256; diff --git a/VSyntaxReader/Models/CaldavPeriodExtensions.cs b/VSyntaxReader/Models/CaldavPeriodExtensions.cs index a9e8483..5f282c3 100644 --- a/VSyntaxReader/Models/CaldavPeriodExtensions.cs +++ b/VSyntaxReader/Models/CaldavPeriodExtensions.cs @@ -8,11 +8,11 @@ public static class CaldavPeriodExtension { public static List ToNormalizedInZone(this IEnumerable dates, DateTimeZone referenceTimeZone) { - return dates.Select(x => x.Start.GetNormalizedInZone(referenceTimeZone)).Where(x => x != null).Select(x => x!.Value).ToList(); + return [.. dates.Select(x => x.Start.GetNormalizedInZone(referenceTimeZone)).Where(x => x != null).Select(x => x!.Value)]; } public static List ToNormalized(this IEnumerable dates, DateTimeZone referenceTimeZone) { - return dates.Select(x => x.Start.ToInstant(referenceTimeZone)).Where(x => x != null).Select(x => x!.Value).ToList(); + return [.. dates.Select(x => x.Start.ToInstant(referenceTimeZone)).Where(x => x != null).Select(x => x!.Value)]; } } diff --git a/VSyntaxReader/Models/FreeBusyEntry.cs b/VSyntaxReader/Models/FreeBusyEntry.cs index 70f72e7..acec9f9 100644 --- a/VSyntaxReader/Models/FreeBusyEntry.cs +++ b/VSyntaxReader/Models/FreeBusyEntry.cs @@ -2,7 +2,7 @@ namespace Calendare.VSyntaxReader.Models; -public class FreeBusyEntry +public sealed class FreeBusyEntry { public FreeBusyStatus Status { get; set; } = FreeBusyStatus.Busy; public Interval Period { get; set; } diff --git a/VSyntaxReader/Operations/FreeBusyNode.cs b/VSyntaxReader/Operations/FreeBusyNode.cs index 894568c..b022d8a 100644 --- a/VSyntaxReader/Operations/FreeBusyNode.cs +++ b/VSyntaxReader/Operations/FreeBusyNode.cs @@ -5,7 +5,7 @@ namespace Calendare.VSyntaxReader.Operations; -public class FreeBusyList : LinkedList +sealed class FreeBusyList : LinkedList { public bool Insert(Interval period, FreeBusyStatus status, bool punching = false, int priority = 0) diff --git a/VSyntaxReader/Operations/RecurrenceCalculator.cs b/VSyntaxReader/Operations/RecurrenceCalculator.cs index 974adfe..b9a5f26 100644 --- a/VSyntaxReader/Operations/RecurrenceCalculator.cs +++ b/VSyntaxReader/Operations/RecurrenceCalculator.cs @@ -7,7 +7,7 @@ namespace Calendare.VSyntaxReader.Operations; -public class RecurrenceCalculator +public sealed class RecurrenceCalculator { public CaldavRecurrence Rule { get; init; } public ZonedDateTime ReferenceDate { get; private set; } diff --git a/VSyntaxReader/Parsers/CalendarParser.cs b/VSyntaxReader/Parsers/CalendarParser.cs index c741ca1..4b3dba4 100644 --- a/VSyntaxReader/Parsers/CalendarParser.cs +++ b/VSyntaxReader/Parsers/CalendarParser.cs @@ -8,7 +8,7 @@ namespace Calendare.VSyntaxReader.Parsers; -public class CalendarParser : ICalendarParser +public sealed class CalendarParser : ICalendarParser { private readonly CalendarBuilder Builder; diff --git a/VSyntaxReader/Parsers/LineParser.cs b/VSyntaxReader/Parsers/LineParser.cs index 291b743..84da60d 100644 --- a/VSyntaxReader/Parsers/LineParser.cs +++ b/VSyntaxReader/Parsers/LineParser.cs @@ -8,7 +8,7 @@ namespace Calendare.VSyntaxReader.Parsers; /// /// Original source for regex expressions and comments is Ical.Net \src\Ical.Net\Serialization\SimpleDeserializer.cs /// -public partial class LineParser +partial class LineParser { private const string NameGroup = "name"; private const string ValueGroup = "value"; diff --git a/VSyntaxReader/Parsers/RecurrenceRuleParser.cs b/VSyntaxReader/Parsers/RecurrenceRuleParser.cs index d92f6a8..56b50e1 100644 --- a/VSyntaxReader/Parsers/RecurrenceRuleParser.cs +++ b/VSyntaxReader/Parsers/RecurrenceRuleParser.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; -using System.Security.Cryptography; using System.Text.RegularExpressions; using Calendare.VSyntaxReader.Models; using NodaTime; diff --git a/VSyntaxReader/Properties/IProperty.cs b/VSyntaxReader/Properties/IProperty.cs index 54dadf0..46b4f17 100644 --- a/VSyntaxReader/Properties/IProperty.cs +++ b/VSyntaxReader/Properties/IProperty.cs @@ -22,7 +22,7 @@ public string Serialize() sb.Append(Raw.Value); if (!IsValid) { - sb.Append($" ###ERR"); + sb.Append(" ###ERR"); } return sb.ToString().WrapLine(); } diff --git a/VSyntaxReader/SerializeExtensions.cs b/VSyntaxReader/SerializeExtensions.cs index cbc030a..108ecfd 100644 --- a/VSyntaxReader/SerializeExtensions.cs +++ b/VSyntaxReader/SerializeExtensions.cs @@ -3,7 +3,7 @@ namespace Calendare.VSyntaxReader; -public static class SerializeExtensions +static class SerializeExtensions { public const int MaxCharactersPerLine = 75; public const string LineBreak = "\r\n"; diff --git a/VSyntaxReader/VSyntaxReader.csproj b/VSyntaxReader/VSyntaxReader.csproj index 023b80e..c36b518 100644 --- a/VSyntaxReader/VSyntaxReader.csproj +++ b/VSyntaxReader/VSyntaxReader.csproj @@ -31,8 +31,8 @@ - + - + \ No newline at end of file diff --git a/VSyntaxReader/packages.lock.json b/VSyntaxReader/packages.lock.json index 12604cd..381e49b 100644 --- a/VSyntaxReader/packages.lock.json +++ b/VSyntaxReader/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "LinkDotNet.StringBuilder": { "type": "Direct", - "requested": "[3.2.0, )", - "resolved": "3.2.0", - "contentHash": "lCVle+mEP4RKmsvWYLsXC3aR3byETFej3HN/L2xQ5yPIK/lzTjtWHLMObk90/9mbeOnv2cooWBtMVEMNh8aM/g==" + "requested": "[3.3.0, )", + "resolved": "3.3.0", + "contentHash": "WtPuxOokoW4n867vlcy7oL2JWclsBWfDl7N7KYuTlI48IXqOtf6knxtYO4ldJeDUGc8AHt9gvATaKyU4YhlRGA==" }, "Nerdbank.GitVersioning": { "type": "Direct", @@ -22,9 +22,9 @@ }, "NodaTime.Serialization.SystemTextJson": { "type": "Direct", - "requested": "[1.3.0, )", - "resolved": "1.3.0", - "contentHash": "Zf9sdKrfcId0rvZLOB7Yncy/cfCv20TdQ84IKE6CkcWW33u1wsRvmYUbfaP5MYUm+9vp9Yoi3G2vN1/9nZ/JCA==", + "requested": "[1.3.1, )", + "resolved": "1.3.1", + "contentHash": "Ndo6VK/TwyIjcppiHY3I3p1iFM+dkjIghiSR/eC3rzu0whoV2GY9F5xCERf5BZDmkI4HuExlA4UE/smDV46SkQ==", "dependencies": { "NodaTime": "[3.0.0, 4.0.0)" } @@ -33,9 +33,9 @@ "net8.0": { "LinkDotNet.StringBuilder": { "type": "Direct", - "requested": "[3.2.0, )", - "resolved": "3.2.0", - "contentHash": "lCVle+mEP4RKmsvWYLsXC3aR3byETFej3HN/L2xQ5yPIK/lzTjtWHLMObk90/9mbeOnv2cooWBtMVEMNh8aM/g==" + "requested": "[3.3.0, )", + "resolved": "3.3.0", + "contentHash": "WtPuxOokoW4n867vlcy7oL2JWclsBWfDl7N7KYuTlI48IXqOtf6knxtYO4ldJeDUGc8AHt9gvATaKyU4YhlRGA==" }, "Nerdbank.GitVersioning": { "type": "Direct", @@ -51,9 +51,9 @@ }, "NodaTime.Serialization.SystemTextJson": { "type": "Direct", - "requested": "[1.3.0, )", - "resolved": "1.3.0", - "contentHash": "Zf9sdKrfcId0rvZLOB7Yncy/cfCv20TdQ84IKE6CkcWW33u1wsRvmYUbfaP5MYUm+9vp9Yoi3G2vN1/9nZ/JCA==", + "requested": "[1.3.1, )", + "resolved": "1.3.1", + "contentHash": "Ndo6VK/TwyIjcppiHY3I3p1iFM+dkjIghiSR/eC3rzu0whoV2GY9F5xCERf5BZDmkI4HuExlA4UE/smDV46SkQ==", "dependencies": { "NodaTime": "[3.0.0, 4.0.0)" } @@ -62,9 +62,9 @@ "net9.0": { "LinkDotNet.StringBuilder": { "type": "Direct", - "requested": "[3.2.0, )", - "resolved": "3.2.0", - "contentHash": "lCVle+mEP4RKmsvWYLsXC3aR3byETFej3HN/L2xQ5yPIK/lzTjtWHLMObk90/9mbeOnv2cooWBtMVEMNh8aM/g==" + "requested": "[3.3.0, )", + "resolved": "3.3.0", + "contentHash": "WtPuxOokoW4n867vlcy7oL2JWclsBWfDl7N7KYuTlI48IXqOtf6knxtYO4ldJeDUGc8AHt9gvATaKyU4YhlRGA==" }, "Nerdbank.GitVersioning": { "type": "Direct", @@ -80,9 +80,9 @@ }, "NodaTime.Serialization.SystemTextJson": { "type": "Direct", - "requested": "[1.3.0, )", - "resolved": "1.3.0", - "contentHash": "Zf9sdKrfcId0rvZLOB7Yncy/cfCv20TdQ84IKE6CkcWW33u1wsRvmYUbfaP5MYUm+9vp9Yoi3G2vN1/9nZ/JCA==", + "requested": "[1.3.1, )", + "resolved": "1.3.1", + "contentHash": "Ndo6VK/TwyIjcppiHY3I3p1iFM+dkjIghiSR/eC3rzu0whoV2GY9F5xCERf5BZDmkI4HuExlA4UE/smDV46SkQ==", "dependencies": { "NodaTime": "[3.0.0, 4.0.0)" }