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

Drastically simply packing and namespace management #53

Merged
merged 1 commit into from
Dec 22, 2024
Merged

Conversation

kzu
Copy link
Member

@kzu kzu commented Dec 22, 2024

The ability to customize the namespace of the struct id types seemed a bit of a corner case and it was introducing non-trivial complexity in scenarios involving transitive project references (analyzers are transitive, as well as buildTransitive targets, but analyzer options, contentFiles -with or without compile action- are not). This was leading to hack over hack for no serious gain.

So even if we keep the CodeTemplate behavior intact should we figure out how to properly handle changing the namespace, this change removes the copying and content updating on the static files, which are now simply included via nuget's contentFiles feature plus buildAction=Compile. This provides the behavior we're looking for:

  • Interfaces and types required for struct ids are only added to the project referencing the package
  • using and codegen for struct ids is supported in projects referencing the "core" one: analyzers are already transitive, we just make the templates transitive too via targets (since we can't via contentFiles).

@kzu kzu added the enhancement New feature or request label Dec 22, 2024
@kzu kzu enabled auto-merge (rebase) December 22, 2024 23:36
@devlooped-bot
Copy link
Member

devlooped-bot commented Dec 22, 2024

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

🧪 Details on macOS Unix 14.7.2

✅ 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 💜

The ability to customize the namespace of the struct id types seemed a bit of a corner case and it was introducing non-trivial complexity in scenarios involving transitive project references (analyzers are transitive, as well as buildTransitive targets, but analyzer options, contentFiles -with or without compile action- are not). This was leading to hack over hack for no serious gain.

So even if we keep the CodeTemplate behavior intact should we figure out how to properly handle changing the namespace, this change removes the copying and content updating on the static files, which are now simply included via nuget's contentFiles feature plus buildAction=Compile. This provides the behavior we're looking for:

- Interfaces and types required for struct ids are only added to the project referencing the package
- using and codegen for struct ids is supported in projects referencing the "core" one: analyzers are already transitive, we just make the templates transitive too via targets (since we can't via contentFiles).
@kzu kzu merged commit 4c7159d into main Dec 22, 2024
11 checks passed
@kzu kzu deleted the dev/packaging branch December 22, 2024 23:48
@devlooped devlooped locked and limited conversation to collaborators Jan 22, 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