tag:github.com,2008:https://github.com/m31coding/M31.FluentAPI/releases Tags from M31.FluentAPI 2025-12-30T13:58:20Z tag:github.com,2008:Repository/606008447/v2.0.0 2025-12-30T14:00:46Z v2.0.0 <p>feat: unsafe accessors (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/48">#48</a>)</p> <p>* chore: migration to .NET 8</p> <p>* test: ThreePrivateMembersClass with UnsafeAccessor</p> <p>* fix: remove requires reflection</p> <p>* wip: use unsafe accessor</p> <p>* fix: publiclyWritable</p> <p>* wip: unsafe accessor</p> <p>* fix: ThreePrivateMembersClass test</p> <p>* test: failing PrivateFluentMethodClass test</p> <p>* feat: InnerBodyForMethodGenerator</p> <p>* test: FluentReturnMultiStepPrivateMethodsClass</p> <p>* test: PrivateConstructorClass</p> <p>* test: GenericClassPrivateConstructor</p> <p>* test: ThreeMemberRecordPrimaryConstructor</p> <p>* test: CanExecuteThreeMemberRecordPrimaryConstructor</p> <p>* fix: ThreeMemberRecordPrimaryConstructor expected</p> <p>* test: ThreeMemberRecordPrimaryConstructor</p> <p>* fix: equality tests</p> <p>* test: GenericClassPrivateDefaultConstructor</p> <p>* wip: UsageTests</p> <p>* test: add GenericClassPrivateConstructor failing usage test</p> <p>* wip: enabled tests</p> <p>* chore: upgrade to .NET 10</p> <p>* chore(M31.FluentApi.Tests): update nuget packages</p> <p>* test: ParameterAnnotationsPublicConstructorClass / ParameterAnnotationsPrivateConstructorClass</p> <p>* chore: address warnings</p> <p>* test: PrivateFluentMethodNullableParameterClass</p> <p>* refactor: extract CreateParameters method</p> <p>* test: PrivateFluentMethodParameterModifiersClass</p> <p>* test: PrivateReadonlyFieldClass (wip)</p> <p>* test: PrivateReadonlyFieldClass</p> <p>* test: PrivateUnderscoreFieldClass</p> <p>* test: PrivateFieldClass</p> <p>* test: PredicatePrivateFieldClass</p> <p>* test: InheritedRecord (wip)</p> <p>* fix: InheritedRecord: CreateStudent.expected.txt</p> <p>* test: InheritedRecord</p> <p>* test: InheritedClassPrivateSetters</p> <p>* test: GetPrivateInitPropertyClass</p> <p>* test: CollectionNullableArrayClass</p> <p>* test: ContinueWithAfterCompoundClass</p> <p>* test: ContinueWithOfOverloadedMethodClass</p> <p>* test: ContinueWithSelfClass</p> <p>* test: CommentedMethodsClass</p> <p>* test: CommentedPropertiesClassAdvanced</p> <p>* test: FluentNullableNoNullableAnnotationPrivateSetClass</p> <p>* test: PublicReadonlyFieldClass</p> <p>* test: PartialClass</p> <p>* test: TryBreakFluentApiClass1</p> <p>* test: TryBreakFluentApiClass2</p> <p>* test: DocumentedStudentClass</p> <p>* test: Student</p> <p>* test: ThreeMemberStruct</p> <p>* usage test: ContinueWithInForkClass</p> <p>* test: move usage tests</p> <p>* usage tests: migrated all tests</p> <p>* fix: declaring class name</p> <p>* test: GenericOverloadedPrivateMethodClass</p> <p>* test: write expected</p> <p>* test: GenericClassWithGenericMethods</p> <p>* fix: test method names</p> <p>* test: PrivateConstructorClassWithParams</p> <p>* fix: remove todo</p> <p>* fix: exlamation mark in set methods</p> <p>* chore: add example and story book project</p> <p>* chore: suppress warnings</p> <p>* chore: mention UnsafeAccessors</p> <p>* chore: 2.0.0 and changelog</p> m31coding tag:github.com,2008:Repository/606008447/v1.12.0 2025-12-20T12:23:02Z v1.12.0 <p>fix: escape keywords in method parameters (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/47">#47</a>)</p> <p>* fix: escape keywords in method parameters</p> <p>* fix: KeywordClass</p> m31coding tag:github.com,2008:Repository/606008447/v1.11.0 2025-08-18T09:26:55Z v1.11.0 <p>feat: documentation comments (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/42">#42</a>)</p> <p>* test: CommentedClass</p> <p>* feat: get comments from symbol info</p> <p>* wip: comments</p> <p>* wip: comments</p> <p>* feat: comment equality and hash methods</p> <p>* Test: DocumentationComments (wip)</p> <p>* test: DocumentationComments</p> <p>* test: Comments.Parse and Comment.GetLine</p> <p>* feat: comment transformer (wip)</p> <p>* test: CommentsTransformer</p> <p>* refactor: add FluentCommentsParser class</p> <p>* feat(CommentsGenerator): HandleMethodSymbolInfo</p> <p>* test(CommentedMethodClass): wip</p> <p>* feat: CommentedMethodSignature</p> <p>* feat: inheritdoc</p> <p>* test: CommentedPropertiesClass</p> <p>* test: CommentedDefaultNullablyPropertyClass (wip)</p> <p>* test: CommentedPropertiesClassAdvanced (wip)</p> <p>* test: CommentedPropertiesClassAdvanced</p> <p>* refactor: remove FluentMethod property</p> <p>* test: CommentedCompoundClass</p> <p>* feat: FluentApiCommentsProvider (wip)</p> <p>* feat: FluentApiCommentsProvider (wip)</p> <p>* fix: warning</p> <p>* fix(CommentsGenerator): distinct single method names</p> <p>* test: CommentedLambdaCollectionClass</p> <p>* fix: CommentedCompoundClass test</p> <p>* fix: remove todo</p> <p>* feat: FluentApiCommentsProvider (wip)</p> <p>* test: improve CommentedCompoundClass test</p> <p>* feat: MethodsToCommentsTemplate</p> <p>* chore: minor improvements</p> <p>* feat: FluentApiCommentsProvider (wip)</p> <p>* test: FluentApiCommentsProviderTests</p> <p>* test: FluentApiComments LambdaCollectionClass</p> <p>* fix: CommentsProvider for compounds</p> <p>* test: RedundantCommentCompoundClass</p> <p>* refactor: renaming</p> <p>* chore: use cancellation token</p> <p>* fix: use NotSupportedException</p> <p>* feat(Example): MyPerson (wip)</p> <p>* refactor: namespaces</p> <p>* fix: unit test</p> <p>* chore: format code</p> <p>* refactor: format code</p> <p>* fix: unit test</p> <p>* test: VoidMethodClass</p> <p>* fix: remove MyPerson test class</p> <p>* test: IncompletelyCommentedPropertyClass</p> <p>* feat(ExampleProject): DocumentedStudent</p> <p>* docs: Documentation comments readme section (wip)</p> <p>* fix: four slashes instead of three</p> <p>* test: DocumentedStudentClass</p> <p>* docs: readme</p> <p>* test: WronglyCommentCompoundClass (wip)</p> <p>* fix: WronglyCommentedClass and WronglyCommentedClass2 tests</p> <p>* fix(SymbolInfoCreator): use regex</p> <p>* fix: readme</p> <p>* chore: bump package version</p> <p>* feat(ExampleProject): DocumentedStudent</p> <p>* fix(BuilderStepMethods): make constructor internal</p> m31coding tag:github.com,2008:Repository/606008447/v1.10.0 2025-03-25T14:43:08Z v1.10.0 <p>feat: Suppress collection methods (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/41">#41</a>)</p> <p>* fix(ExampleProject): suppress function not used warning</p> <p>* feat: suppress withItem and withZeroItems method generation</p> <p>* test: CollectionMemberClassWithSuppression</p> <p>* chore: increase nuget versions to 1.10.0</p> <p>* docs(readme): update</p> <p>* docs(readme): fix typo</p> m31coding tag:github.com,2008:Repository/606008447/v1.9.1 2025-01-25T17:01:00Z v1.9.1 <p>Remove M31.FluentApi.Attributes using from generated code file (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/38">#38</a>)</p> <p>* fix: don't add M31.FluentApi.Attributes using to generated code file</p> <p>* fix: unit tests</p> <p>* chore: bump nuget versions</p> m31coding tag:github.com,2008:Repository/606008447/v1.9.0 2024-09-27T11:02:18Z v1.9.0 <p>feat: Inheritance (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/32">#32</a>)</p> <p>* Inheritance implementation for Fluent API</p> <p>* refactor(ClassInfoFactory): minor changes</p> <p>* test: InheritedClass</p> <p>* fix(ClassInfoFactory): compare to SpecialType in GetMembers</p> <p>* test: InheritedClassProtectedMembers and InheritedClassProtectedSetters</p> <p>* docs: mention inheritance in features</p> <p>* fix: inheritance tests</p> <p>* test: inherited record</p> <p>* improve(ExampleProject): add ExchangeStudent example</p> <p>* test: add failing test CanExecuteInheritedClassPrivateSetters</p> <p>* fix: make test InheritedClassPrivateSetters work</p> <p>* fix: InnerBodyForMethodGenerator</p> <p>* refactor(ClassInfoFactory): use List instead of HashSet</p> <p>* fix: commit generated file</p> <p>* chore: bump nuget version</p> <p>---------</p> <p>Co-authored-by: Oleh Formaniuk &lt;oformaniuk@microsoft.com&gt; <br />Co-authored-by: Kevin Schaal &lt;kevin.schaal@m31coding.com&gt;</p> m31coding tag:github.com,2008:Repository/606008447/v1.8.0 2024-07-18T14:16:41Z v1.8.0 <p>feat: Constructor selection (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/30">#30</a>)</p> <p>* feat: use constructor with least amount of parameters</p> <p>* refactor: rename test</p> <p>* test: GenericClassPrivateConstructor</p> <p>* fix(ConstructorGenerator): add BindingFlags.NonPublic</p> <p>* feat: report diagnostics for missing or ambiguous constructor</p> <p>* chore: adjust analyzer release tracking</p> <p>* fix(Analyzers): remove MissingConstructor diagnosis</p> <p>* test: CanDetectAmbiguousConstructors</p> <p>* chore: increase nuget versions to 1.8</p> <p>* chore(ConstructorGenerator): add doc comment</p> <p>* fix(ClassInfoFactory): comment</p> <p>* refactor(ClassInfoFactory): improve variable name</p> m31coding tag:github.com,2008:Repository/606008447/v1.7.0 2024-06-16T17:55:10Z v1.7.0 <p>feat: Lambda methods by default (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/24">#24</a>)</p> <p>* feat: fluent lambda per default</p> <p>* feat: lambda parameters for compounds</p> <p>* fix: lambda method parameter names</p> <p>* feat(LambdaByDefault): LambdaBuilderInfo for the FluentCollectionAttributeInfo</p> <p>* fix(FluentApiInfoCreator): remove assumptions from TryGetLambdaBuilderInfoOfCollectionType</p> <p>* feat: WithItem method with lambda parameter</p> <p>* test(FluentLambdaCollectionClass): add expected result</p> <p>* test: CanExecuteFluentLambdaCollectionClass</p> <p>* feat: WithItems method with lambda parameters</p> <p>* improve(Readme): feature list and acknowledgements</p> <p>* chore: make FluentLambda obsolete</p> <p>* fix(Readme)</p> <p>* chore: replace FluentLambda with FluentMember in exmaples and tests</p> <p>* chore(Storybook): NestedFluentApis example instead of FluentLambdaExample</p> <p>* fix(ArrayCreator): remove semicolon in CreateCollectionFromEnumerable</p> <p>* fix(ArrayCreator): add using only when needed</p> <p>* test: FluentLambdaCollectionClass2</p> <p>* test: FluentLambdaManyCollectionsClass and FluentLambdaManyPrivateCollectionsClass</p> <p>* improve: property order in FluentLambdaManyPrivateCollectionsClass and FluentLambdaManyCollectionsClass</p> <p>* fix: execution tests</p> <p>* improve(CodeGenerationExecutionTests): blocks between different subtests</p> <p>* test: add failing test TryBreakFluentApiClass3</p> <p>* refactor(CollectionMethodCreator): cleanup</p> <p>* fix: make TryBreakFluentApiClass3 test work</p> <p>* chore: adjust storybook and readme</p> <p>* chore: increase package version to 1.7.0</p> <p>* fix: minor change</p> m31coding tag:github.com,2008:Repository/606008447/v1.6.0 2024-06-09T15:15:04Z v1.6.0 <p>feat: FluentSkippable (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/19">#19</a>)</p> <p>* feat(FluentSkippable): FluentSkippable attribute</p> <p>* feat(FluentSkippable): make SkippableMemberClass test work</p> <p>* refactor(BuilderStepMethodCreator): create static methods from BuilderStepMethods</p> <p>* refactor(BuilderStepMethodCreator): cleanup</p> <p>* feat(FluentSkippable): make SkippableFirstMemberClass test work</p> <p>* test: SkippableSeveralMembersClass</p> <p>* fix(SkippableSeveralMembersClass): remove blank line</p> <p>* feat(FluentSkippable): last step cannot be skipped diagnostic</p> <p>* test: add failing test SkippableLoopClass</p> <p>* Test(SkippableLoopClass): add expected code</p> <p>* test(SkippableLoopClass): add desired CreatedStudent.g.cs</p> <p>* feat(FluentSkippable): BuilderStepsGenerator new version</p> <p>* feat(FluentSkippable): loop handling classes</p> <p>* feat(FluentSkippable): make SkippableLoopClass test work</p> <p>* fix: remove obsolete EmptyInterfaceBuilderMethod class</p> <p>* refactor: rename BuilderStepsGeneration folder and namespace</p> <p>* fix: rename file</p> <p>* test: CanExecuteSkippableLoopClass</p> <p>* fix: rename FirstStepBuilderMethod and SingleStepBuilderMethod classes</p> <p>* test: TarjansSccAlgorithmTests</p> <p>* test: ContinueWithInForkClass</p> <p>* test: SkippableFirstTwoMembersClass</p> <p>* test: SkippableTwoLoopsClass</p> <p>* test: SkippableForkMembersClass</p> <p>* fix: address resharper warnings</p> <p>* feat(FluentSkippable): adjust examples and storybook</p> <p>* docs(Readme): add FluentSkippable</p> <p>* chore: increase nuget versions to 1.6.0</p> m31coding tag:github.com,2008:Repository/606008447/v1.5.0 2024-06-01T11:50:59Z v1.5.0 <p>feat: Support partial classes (<a class="issue-link js-issue-link" href="https://github.com/m31coding/M31.FluentAPI/pull/18">#18</a>)</p> <p>* improve(SourceGenerator): comments</p> <p>* feat: support partial classes</p> <p>* test: PartialClass</p> <p>* refactor(TestClassCodeGenerator): improve naming</p> <p>* improve(FluentLambdaTestClass): Address class in separate file</p> <p>* fix(M31.FluentApi.Tests.csproj): remove item group</p> <p>* fix(FluentLambdaClassInDifferentNamespace): move Address to separate file</p> <p>* fix(FluentLambdaNullablePropertyClass): move Address into separate file</p> <p>* fix(FluentLambdaSingleStepClass): move address to separate file</p> <p>* fix: address Resharper warnings</p> <p>* test(FluentApiAnalyzer): structs, records, and record structs</p> <p>* test: DuplicateMethodPartialClass</p> <p>* chore: increase nuget version to 1.5.0</p> <p>* fix: minor improvements</p> <p>* improve(ListAndDictionary): NotSupportedException instead of NotImplementedException</p> <p>* refactor: minor change</p> m31coding