Skip to content

Generalize value templates too, automatically adding Ulid to Dapper#40

Merged
kzu merged 1 commit intomainfrom
dev/valuetemplates
Dec 11, 2024
Merged

Generalize value templates too, automatically adding Ulid to Dapper#40
kzu merged 1 commit intomainfrom
dev/valuetemplates

Conversation

@kzu
Copy link
Copy Markdown
Member

@kzu kzu commented Dec 11, 2024

A new templatized value feature allows built-in compiled template support for Ulid as a value type for struct ids. The template follows the same pattern as the struct id template (pending analyzer/codefix) and the dapper generator has been extended to consider them when emitting the registration code.

We keep the original custom handler support too, which would still win over templatized one if users provide a type handler in the compilation themselves (as shown in the functional tests via the StringUlidHandler type.

@kzu kzu added the enhancement New feature or request label Dec 11, 2024
@kzu kzu enabled auto-merge (rebase) December 11, 2024 20:32
@devlooped-bot
Copy link
Copy Markdown
Member

devlooped-bot commented Dec 11, 2024

61 passed 61 passed
61 passed 61 passed
61 passed 61 passed

🧪 Details on macOS Unix 14.7.1

✅ StructId.CodeTemplateTests.AddsStructIdNamespace
✅ StructId.CodeTemplateTests.AppliesValueTemplate
✅ StructId.CodeTemplateTests.PreservesPrimaryConstructor
✅ StructId.CodeTemplateTests.PreservesTrivia
✅ StructId.CodeTemplateTests.RemovesFileLocalTypes
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructorInGlobalNamespace
✅ StructId.ConstructorGeneratorTests.GenerateRecordStringConstructor
✅ StructId.DapperGeneratorTests.GenerateCustomHandler
✅ StructId.DapperGeneratorTests.GenerateHandler
✅ StructId.DapperGeneratorTests.GenerateTempletizedHandler
✅ StructId.DapperGeneratorTests.SkipsUnsupported
✅ StructId.Functional.FunctionalTests.CustomTemplate
✅ StructId.Functional.FunctionalTests.EntityFramework
✅ StructId.Functional.FunctionalTests.EqualityTest
✅ StructId.Functional.FunctionalTests.GuidImplementUtf8SpanFormattable
✅ StructId.Functional.FunctionalTests.ImplementsFormattable
✅ StructId.Functional.FunctionalTests.ImplicitAndExplicitCast
✅ StructId.Functional.FunctionalTests.Newtonsoft
✅ StructId.Functional.FunctionalTests.SpanFormattableIdsImplementISpanFormattable
✅ StructId.Functional.FunctionalTests.StringIdDoesNotImplementISpanFormattable
✅ StructId.Functional.UlidTests.Dapper
✅ StructId.Functional.UlidTests.DapperUlid
✅ StructId.Functional.UlidTests.EntityFramework
✅ StructId.NewtonsoftJsonGeneratorTests.DoesNotGenerateIfNewtonsoftJsonNotPresent
✅ StructId.NewtonsoftJsonGeneratorTests.GenerateIfNewtonsoftJsonPresent
✅ StructId.RecordAnalyzerTests.ClassNotStructId
✅ StructId.RecordAnalyzerTests.PartialRecordStructNotReadonly
✅ StructId.RecordAnalyzerTests.PartialStringRecordStructNotReadonly
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructNoStructId
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructNotPartial
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructWithNonValueConstructor
✅ StructId.RecordAnalyzerTests.ReadonlyStringRecordStructNotPartial
✅ StructId.RecordAnalyzerTests.RecordStructNoStructId
✅ StructId.RecordAnalyzerTests.RecordStructNotReadonlyNorPartial
✅ StructId.RecordAnalyzerTests.StructNotStructId
✅ StructId.RecordCodeFixTests.AddPartialKeyword
✅ StructId.RecordCodeFixTests.AddReadOnlyModifier
✅ StructId.RecordCodeFixTests.ChangeRecordStruct
✅ StructId.RecordCtorCodeFixTests.RemoveCtor
✅ StructId.RecordCtorCodeFixTests.RenameValue
✅ StructId.TemplateAnalyzerTests.ClassNoTemplate
✅ StructId.TemplateAnalyzerTests.ClassRecordNoTemplate
✅ StructId.TemplateAnalyzerTests.PartialTSelfNotFileLocal
✅ StructId.TemplateAnalyzerTests.RecordStructNoTemplate
✅ StructId.TemplateAnalyzerTests.TemplateNotTSelf
✅ StructId.TemplateAnalyzerTests.TemplateRecordClassNotStruct
✅ StructId.TemplateAnalyzerTests.TemplateRecordStructNotFile
✅ StructId.TemplateAnalyzerTests.TemplateRecordStructNotPartial
✅ StructId.TemplateAnalyzerTests.TemplateStructNotRecord
✅ StructId.TemplateAnalyzerTests.TemplateWithNonValueConstructor
✅ StructId.TemplateCodeFixTests.AddFileLocal
✅ StructId.TemplateCodeFixTests.AddFileLocalToPartial
✅ StructId.TemplateCodeFixTests.AddPartialKeyword
✅ StructId.TemplateCodeFixTests.ChangeClassToRecordStruct
✅ StructId.TemplateCodeFixTests.ChangeStructToRecordStruct
✅ StructId.TemplateCodeFixTests.RemoveInternalKeyword
✅ StructId.TemplateCodeFixTests.RemovePublicKeyword
✅ StructId.TemplateCodeFixTests.RenameTSelf
✅ StructId.TemplateGeneratorTests.GenerateComparable
✅ StructId.TemplateGeneratorTests.GenerateComparableExplicitImpl

🧪 Details on Ubuntu 22.04.5 LTS

✅ StructId.CodeTemplateTests.AddsStructIdNamespace
✅ StructId.CodeTemplateTests.AppliesValueTemplate
✅ StructId.CodeTemplateTests.PreservesPrimaryConstructor
✅ StructId.CodeTemplateTests.PreservesTrivia
✅ StructId.CodeTemplateTests.RemovesFileLocalTypes
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructorInGlobalNamespace
✅ StructId.ConstructorGeneratorTests.GenerateRecordStringConstructor
✅ StructId.DapperGeneratorTests.GenerateCustomHandler
✅ StructId.DapperGeneratorTests.GenerateHandler
✅ StructId.DapperGeneratorTests.GenerateTempletizedHandler
✅ StructId.DapperGeneratorTests.SkipsUnsupported
✅ StructId.Functional.FunctionalTests.CustomTemplate
✅ StructId.Functional.FunctionalTests.EntityFramework
✅ StructId.Functional.FunctionalTests.EqualityTest
✅ StructId.Functional.FunctionalTests.GuidImplementUtf8SpanFormattable
✅ StructId.Functional.FunctionalTests.ImplementsFormattable
✅ StructId.Functional.FunctionalTests.ImplicitAndExplicitCast
✅ StructId.Functional.FunctionalTests.Newtonsoft
✅ StructId.Functional.FunctionalTests.SpanFormattableIdsImplementISpanFormattable
✅ StructId.Functional.FunctionalTests.StringIdDoesNotImplementISpanFormattable
✅ StructId.Functional.UlidTests.Dapper
✅ StructId.Functional.UlidTests.DapperUlid
✅ StructId.Functional.UlidTests.EntityFramework
✅ StructId.NewtonsoftJsonGeneratorTests.DoesNotGenerateIfNewtonsoftJsonNotPresent
✅ StructId.NewtonsoftJsonGeneratorTests.GenerateIfNewtonsoftJsonPresent
✅ StructId.RecordAnalyzerTests.ClassNotStructId
✅ StructId.RecordAnalyzerTests.PartialRecordStructNotReadonly
✅ StructId.RecordAnalyzerTests.PartialStringRecordStructNotReadonly
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructNoStructId
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructNotPartial
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructWithNonValueConstructor
✅ StructId.RecordAnalyzerTests.ReadonlyStringRecordStructNotPartial
✅ StructId.RecordAnalyzerTests.RecordStructNoStructId
✅ StructId.RecordAnalyzerTests.RecordStructNotReadonlyNorPartial
✅ StructId.RecordAnalyzerTests.StructNotStructId
✅ StructId.RecordCodeFixTests.AddPartialKeyword
✅ StructId.RecordCodeFixTests.AddReadOnlyModifier
✅ StructId.RecordCodeFixTests.ChangeRecordStruct
✅ StructId.RecordCtorCodeFixTests.RemoveCtor
✅ StructId.RecordCtorCodeFixTests.RenameValue
✅ StructId.TemplateAnalyzerTests.ClassNoTemplate
✅ StructId.TemplateAnalyzerTests.ClassRecordNoTemplate
✅ StructId.TemplateAnalyzerTests.PartialTSelfNotFileLocal
✅ StructId.TemplateAnalyzerTests.RecordStructNoTemplate
✅ StructId.TemplateAnalyzerTests.TemplateNotTSelf
✅ StructId.TemplateAnalyzerTests.TemplateRecordClassNotStruct
✅ StructId.TemplateAnalyzerTests.TemplateRecordStructNotFile
✅ StructId.TemplateAnalyzerTests.TemplateRecordStructNotPartial
✅ StructId.TemplateAnalyzerTests.TemplateStructNotRecord
✅ StructId.TemplateAnalyzerTests.TemplateWithNonValueConstructor
✅ StructId.TemplateCodeFixTests.AddFileLocal
✅ StructId.TemplateCodeFixTests.AddFileLocalToPartial
✅ StructId.TemplateCodeFixTests.AddPartialKeyword
✅ StructId.TemplateCodeFixTests.ChangeClassToRecordStruct
✅ StructId.TemplateCodeFixTests.ChangeStructToRecordStruct
✅ StructId.TemplateCodeFixTests.RemoveInternalKeyword
✅ StructId.TemplateCodeFixTests.RemovePublicKeyword
✅ StructId.TemplateCodeFixTests.RenameTSelf
✅ StructId.TemplateGeneratorTests.GenerateComparable
✅ StructId.TemplateGeneratorTests.GenerateComparableExplicitImpl

🧪 Details on Microsoft Windows 10.0.20348

✅ StructId.CodeTemplateTests.AddsStructIdNamespace
✅ StructId.CodeTemplateTests.AppliesValueTemplate
✅ StructId.CodeTemplateTests.PreservesPrimaryConstructor
✅ StructId.CodeTemplateTests.PreservesTrivia
✅ StructId.CodeTemplateTests.RemovesFileLocalTypes
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructorInGlobalNamespace
✅ StructId.ConstructorGeneratorTests.GenerateRecordStringConstructor
✅ StructId.DapperGeneratorTests.GenerateCustomHandler
✅ StructId.DapperGeneratorTests.GenerateHandler
✅ StructId.DapperGeneratorTests.GenerateTempletizedHandler
✅ StructId.DapperGeneratorTests.SkipsUnsupported
✅ StructId.Functional.FunctionalTests.CustomTemplate
✅ StructId.Functional.FunctionalTests.EntityFramework
✅ StructId.Functional.FunctionalTests.EqualityTest
✅ StructId.Functional.FunctionalTests.GuidImplementUtf8SpanFormattable
✅ StructId.Functional.FunctionalTests.ImplementsFormattable
✅ StructId.Functional.FunctionalTests.ImplicitAndExplicitCast
✅ StructId.Functional.FunctionalTests.Newtonsoft
✅ StructId.Functional.FunctionalTests.SpanFormattableIdsImplementISpanFormattable
✅ StructId.Functional.FunctionalTests.StringIdDoesNotImplementISpanFormattable
✅ StructId.Functional.UlidTests.Dapper
✅ StructId.Functional.UlidTests.DapperUlid
✅ StructId.Functional.UlidTests.EntityFramework
✅ StructId.NewtonsoftJsonGeneratorTests.DoesNotGenerateIfNewtonsoftJsonNotPresent
✅ StructId.NewtonsoftJsonGeneratorTests.GenerateIfNewtonsoftJsonPresent
✅ StructId.RecordAnalyzerTests.ClassNotStructId
✅ StructId.RecordAnalyzerTests.PartialRecordStructNotReadonly
✅ StructId.RecordAnalyzerTests.PartialStringRecordStructNotReadonly
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructNoStructId
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructNotPartial
✅ StructId.RecordAnalyzerTests.ReadonlyRecordStructWithNonValueConstructor
✅ StructId.RecordAnalyzerTests.ReadonlyStringRecordStructNotPartial
✅ StructId.RecordAnalyzerTests.RecordStructNoStructId
✅ StructId.RecordAnalyzerTests.RecordStructNotReadonlyNorPartial
✅ StructId.RecordAnalyzerTests.StructNotStructId
✅ StructId.RecordCodeFixTests.AddPartialKeyword
✅ StructId.RecordCodeFixTests.AddReadOnlyModifier
✅ StructId.RecordCodeFixTests.ChangeRecordStruct
✅ StructId.RecordCtorCodeFixTests.RemoveCtor
✅ StructId.RecordCtorCodeFixTests.RenameValue
✅ StructId.TemplateAnalyzerTests.ClassNoTemplate
✅ StructId.TemplateAnalyzerTests.ClassRecordNoTemplate
✅ StructId.TemplateAnalyzerTests.PartialTSelfNotFileLocal
✅ StructId.TemplateAnalyzerTests.RecordStructNoTemplate
✅ StructId.TemplateAnalyzerTests.TemplateNotTSelf
✅ StructId.TemplateAnalyzerTests.TemplateRecordClassNotStruct
✅ StructId.TemplateAnalyzerTests.TemplateRecordStructNotFile
✅ StructId.TemplateAnalyzerTests.TemplateRecordStructNotPartial
✅ StructId.TemplateAnalyzerTests.TemplateStructNotRecord
✅ StructId.TemplateAnalyzerTests.TemplateWithNonValueConstructor
✅ StructId.TemplateCodeFixTests.AddFileLocal
✅ StructId.TemplateCodeFixTests.AddFileLocalToPartial
✅ StructId.TemplateCodeFixTests.AddPartialKeyword
✅ StructId.TemplateCodeFixTests.ChangeClassToRecordStruct
✅ StructId.TemplateCodeFixTests.ChangeStructToRecordStruct
✅ StructId.TemplateCodeFixTests.RemoveInternalKeyword
✅ StructId.TemplateCodeFixTests.RemovePublicKeyword
✅ StructId.TemplateCodeFixTests.RenameTSelf
✅ StructId.TemplateGeneratorTests.GenerateComparable
✅ StructId.TemplateGeneratorTests.GenerateComparableExplicitImpl

from dotnet-retest v0.6.3 on .NET 8.0.11 with 💜

A new templatized value feature allows built-in compiled template support for Ulid as a value type for struct ids. The template follows the same pattern as the struct id template (pending analyzer/codefix) and the dapper generator has been extended to consider them when emitting the registration code.

We keep the original custom handler support too, which would still win over templatized one if users provide a type handler in the compilation themselves (as shown in the functional tests via the `StringUlidHandler` type.
@kzu kzu force-pushed the dev/valuetemplates branch from 8c4ada7 to 6e537da Compare December 11, 2024 20:37
@kzu kzu merged commit c526032 into main Dec 11, 2024
@kzu kzu deleted the dev/valuetemplates branch December 11, 2024 20:39
@devlooped devlooped locked and limited conversation to collaborators Jan 11, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants