Skip to content

Conversation

@andrewlock
Copy link
Owner

@andrewlock andrewlock commented Aug 14, 2025

In this PR, you can only choose one source of "metadata attribute" to use for enums:

  • [Display]
  • [Description]
  • [EnumMember] <- New

You can select the source to use by setting the MetadataSource property on the [EnumExtensions] attribute e.g.

[EnumExtensions(MetadataSource = MetadataSource.DisplayAttribute)]
public enum EnumWithDisplayNameInNamespace
{
    First = 0,
    [Display(Name = "2nd")]
    Second = 1,
    Third = 2,
}

Alternatively, you can use MetadataSource.None to choose none of the metadata attributes. In this case, the overloads that take a useMetadataAttributes parameter will not be emitted.

You can set the default metadata source to use for a whole project by setting the EnumGenerator_EnumMetadataSource property in your project:

<PropertyGroup>
  <EnumGenerator_EnumMetadataSource>EnumMemberAttribute</EnumGenerator_EnumMetadataSource>
</PropertyGroup>

The default value is EnumMemberAttribute - TBC, I'm torn between the default being [Display] and [EnumMember]:

  • In favor of [Display] and against [EnumMember]: [Display] is already being used by people with the generator, and is often used in a web context for decorating properties as it's a standard DataAnnotations attribute . [EnumMember] is an entirely new attribute, so making that the default would be breaking for literally everyone upgrading the package.
  • In favor of [EnumMember] and against [Display]: [EnumMember] is available out of the box, whereas [Display] requires a package for .NET FX and .NET Standard 2.0. Arguably it makes more sense as being the default as it's specifically about serialization.

Fixes #73

@github-actions
Copy link

github-actions bot commented Aug 14, 2025

Test Results

    144 files  ±     0      144 suites  ±0   45m 45s ⏱️ + 3m 49s
  6 384 tests + 1 002    6 380 ✅ + 1 002   4 💤 ±0  0 ❌ ±0 
112 400 runs  +17 620  112 328 ✅ +17 620  72 💤 ±0  0 ❌ ±0 

Results for commit 57bd75b. ± Comparison against base commit d3fa4a8.

This pull request removes 12 and adds 1014 tests. Note that renamed tests count towards both.
NetEscapades.EnumGenerators.Tests.EnumGeneratorInterceptorTests ‑ CanGenerateEnumExtensionsWithDescription
NetEscapades.EnumGenerators.Tests.EnumGeneratorInterceptorTests ‑ CanGenerateEnumExtensionsWithDescriptionAndDisplayName
NetEscapades.EnumGenerators.Tests.EnumGeneratorInterceptorTests ‑ CanGenerateEnumExtensionsWithDisplayName
NetEscapades.EnumGenerators.Tests.EnumGeneratorInterceptorTests ‑ CanGenerateEnumExtensionsWithSameDisplayName
NetEscapades.EnumGenerators.Tests.EnumGeneratorInterceptorTests ‑ HandlesStringsWithQuotesAndSlashesInDescription
NetEscapades.EnumGenerators.Tests.EnumGeneratorTests ‑ CanGenerateEnumExtensionsWithDescription
NetEscapades.EnumGenerators.Tests.EnumGeneratorTests ‑ CanGenerateEnumExtensionsWithDescriptionAndDisplayName
NetEscapades.EnumGenerators.Tests.EnumGeneratorTests ‑ CanGenerateEnumExtensionsWithDisplayName
NetEscapades.EnumGenerators.Tests.EnumGeneratorTests ‑ CanGenerateEnumExtensionsWithSameDisplayName
NetEscapades.EnumGenerators.Tests.EnumGeneratorTests ‑ HandlesStringsWithQuotesAndSlashesInDescription
…
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesAsUnderlyingType(value: 3)
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesAsUnderlyingType(value: First)
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesAsUnderlyingType(value: Second)
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesGetNames
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesGetValues
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesGetValuesAsUnderlyingType
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesIsDefined(value: 3)
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesIsDefined(value: First)
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesIsDefined(value: Second)
NetEscapades.EnumGenerators.IntegrationTests.EnumWithEnumMemberInNamespaceExtensionsTests ‑ GeneratesIsDefinedUsingName(name: "-267")
…

♻️ This comment has been updated with latest results.

@andrewlock andrewlock merged commit de7c2cf into main Sep 12, 2025
5 checks passed
@andrewlock andrewlock deleted the refactor-metadata-source branch September 12, 2025 20:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature Request: Support for EnumMember(Value = )

2 participants