Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor code templates processing, move more to compiled #33

Merged
merged 1 commit into from
Dec 9, 2024
Merged

Conversation

kzu
Copy link
Member

@kzu kzu commented Dec 9, 2024

Refactor resource and compiled templates to use a unified CodeTemplate implementation that simplifies the application of a template for a given target struct id.

This allowed to also simplify quite a bit the tests.

Most templates are now simple compiled ones, except for the ones that need custom logic that isn't just checking target value type (TId) compatiblity.

In particular: ctor generation is dynamic since users can provide their own ctor, so we can't just apply them as compiled templates.

EF, Dapper and Newtonsoft.Json need conditional checking on type presense, so they cannot be ported either.

Regardless, we now have a single unified way of authoring templates for either scenario. This infolves using always file-only types, which removes cross-template dependencies we had with a hardcoded TSelf/TId pair.

@kzu kzu added the tech debt label Dec 9, 2024
@kzu kzu force-pushed the dev/refactor branch 2 times, most recently from 4ee20c2 to 91deeaf Compare December 9, 2024 06:02
@kzu kzu enabled auto-merge (rebase) December 9, 2024 06:02
@devlooped-bot
Copy link
Member

devlooped-bot commented Dec 9, 2024

35 passed 35 passed
35 passed 35 passed
35 passed 35 passed

🧪 Details on macOS Unix 14.7.1

✅ StructId.CodeTemplateTests.AddsStructIdNamespace
✅ StructId.CodeTemplateTests.PreservesPrimaryConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructorInGlobalNamespace
✅ StructId.ConstructorGeneratorTests.GenerateRecordStringConstructor
✅ StructId.DapperGeneratorTests.GenerateHandler
✅ StructId.DapperGeneratorTests.SkipsUnsupported
✅ StructId.Functional.FunctionalTests.CustomTemplate
✅ StructId.Functional.FunctionalTests.Dapper
✅ StructId.Functional.FunctionalTests.EntityFramework
✅ StructId.Functional.FunctionalTests.EqualityTest
✅ StructId.Functional.FunctionalTests.GuidImplementUtf8SpanFormattable
✅ StructId.Functional.FunctionalTests.ImplicitAndExplicitCast
✅ StructId.Functional.FunctionalTests.Newtonsoft
✅ StructId.Functional.FunctionalTests.SpanFormattableIdsImplementISpanFormattable
✅ StructId.Functional.FunctionalTests.StringIdDoesNotImplementISpanFormattable
✅ 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.TemplateGeneratorTests.GenerateComparable
✅ StructId.TemplateGeneratorTests.GenerateComparableExplicitImpl

🧪 Details on Ubuntu 22.04.5 LTS

✅ StructId.CodeTemplateTests.AddsStructIdNamespace
✅ StructId.CodeTemplateTests.PreservesPrimaryConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructorInGlobalNamespace
✅ StructId.ConstructorGeneratorTests.GenerateRecordStringConstructor
✅ StructId.DapperGeneratorTests.GenerateHandler
✅ StructId.DapperGeneratorTests.SkipsUnsupported
✅ StructId.Functional.FunctionalTests.CustomTemplate
✅ StructId.Functional.FunctionalTests.Dapper
✅ StructId.Functional.FunctionalTests.EntityFramework
✅ StructId.Functional.FunctionalTests.EqualityTest
✅ StructId.Functional.FunctionalTests.GuidImplementUtf8SpanFormattable
✅ StructId.Functional.FunctionalTests.ImplicitAndExplicitCast
✅ StructId.Functional.FunctionalTests.Newtonsoft
✅ StructId.Functional.FunctionalTests.SpanFormattableIdsImplementISpanFormattable
✅ StructId.Functional.FunctionalTests.StringIdDoesNotImplementISpanFormattable
✅ 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.TemplateGeneratorTests.GenerateComparable
✅ StructId.TemplateGeneratorTests.GenerateComparableExplicitImpl

🧪 Details on Microsoft Windows 10.0.20348

✅ StructId.CodeTemplateTests.AddsStructIdNamespace
✅ StructId.CodeTemplateTests.PreservesPrimaryConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructor
✅ StructId.ConstructorGeneratorTests.GenerateRecordConstructorInGlobalNamespace
✅ StructId.ConstructorGeneratorTests.GenerateRecordStringConstructor
✅ StructId.DapperGeneratorTests.GenerateHandler
✅ StructId.DapperGeneratorTests.SkipsUnsupported
✅ StructId.Functional.FunctionalTests.CustomTemplate
✅ StructId.Functional.FunctionalTests.Dapper
✅ StructId.Functional.FunctionalTests.EntityFramework
✅ StructId.Functional.FunctionalTests.EqualityTest
✅ StructId.Functional.FunctionalTests.GuidImplementUtf8SpanFormattable
✅ StructId.Functional.FunctionalTests.ImplicitAndExplicitCast
✅ StructId.Functional.FunctionalTests.Newtonsoft
✅ StructId.Functional.FunctionalTests.SpanFormattableIdsImplementISpanFormattable
✅ StructId.Functional.FunctionalTests.StringIdDoesNotImplementISpanFormattable
✅ 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.TemplateGeneratorTests.GenerateComparable
✅ StructId.TemplateGeneratorTests.GenerateComparableExplicitImpl

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

Refactor resource and compiled templates to use a unified CodeTemplate implementation that simplifies the application of a template for a given target struct id.

This allowed to also simplify quite a bit the tests.

Most templates are now simple compiled ones, except for the ones that need custom logic that isn't just checking target value type (TId) compatiblity.

In particular: ctor generation is dynamic since users can provide their own ctor, so we can't just apply them as compiled templates.

EF, Dapper and Newtonsoft.Json need conditional checking on type presense, so they cannot be ported either.

Regardless, we now have a single unified way of authoring templates for either scenario. This infolves using always file-only types, which removes cross-template dependencies we had with a hardcoded TSelf/TId pair.
@kzu kzu merged commit 8030671 into main Dec 9, 2024
11 checks passed
@kzu kzu deleted the dev/refactor branch December 9, 2024 06:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants