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

Create analyzer and codefix for templates #35

Merged
merged 1 commit into from
Dec 9, 2024
Merged

Create analyzer and codefix for templates #35

merged 1 commit into from
Dec 9, 2024

Conversation

kzu
Copy link
Member

@kzu kzu commented Dec 9, 2024

Templates need to adhere to some minimal rules:

  1. File-local visibility and partial
  2. Record struct themselves (since they will be partial of another record struct)
  3. Optional primary ctor with Value parameter to allow template code to operate on the underlying value of the struct id as needed.

We now enforce these rules via an analyzer and provide a codefix to help authoring.

@kzu kzu added the enhancement New feature or request label Dec 9, 2024
Templates need to adhere to some minimal rules:
1. File-local visibility and partial
2. Record struct themselves (since they will be partial of another record struct)
3. Optional primary ctor with Value parameter to allow template code to operate on the underlying value of the struct id as needed.

We now enforce these rules via an analyzer and provide a codefix to help authoring.
@kzu kzu enabled auto-merge (rebase) December 9, 2024 22:04
@devlooped-bot
Copy link
Member

devlooped-bot commented Dec 9, 2024

52 passed 52 passed

🧪 Details on Microsoft Windows 10.0.20348

✅ StructId.CodeTemplateTests.AddsStructIdNamespace
✅ StructId.CodeTemplateTests.PreservesPrimaryConstructor
✅ StructId.CodeTemplateTests.RemovesFileLocalTypes
✅ 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.ImplementsFormattable
✅ 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.TemplateAnalyzerTests.ClassNoTemplate
✅ StructId.TemplateAnalyzerTests.ClassRecordNoTemplate
✅ StructId.TemplateAnalyzerTests.RecordStructNoTemplate
✅ StructId.TemplateAnalyzerTests.TemplateNotTSelf
✅ StructId.TemplateAnalyzerTests.TemplateRecordClassNotStruct
✅ StructId.TemplateAnalyzerTests.TemplateRecordStructNotFile
✅ StructId.TemplateAnalyzerTests.TemplateRecordStructNotPartial
✅ StructId.TemplateAnalyzerTests.TemplateStructNotRecord
✅ StructId.TemplateAnalyzerTests.TemplateWithNonValueConstructor
✅ 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 💜

@kzu kzu merged commit 492c571 into main Dec 9, 2024
9 of 11 checks passed
@kzu kzu deleted the dev/authoring branch December 9, 2024 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants