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 <oformaniuk@microsoft.com>
<br />Co-authored-by: Kevin Schaal <kevin.schaal@m31coding.com></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