Skip to content

fix: align enum metadata generator and reflection fallback (#409) - #414

Open
mkarimdev wants to merge 1 commit into
shibayan:masterfrom
mkarimdev:fix/enum-metadata-alignment
Open

mkarimdev wants to merge 1 commit into
shibayan:masterfrom
mkarimdev:fix/enum-metadata-alignment

Conversation

@mkarimdev

Copy link
Copy Markdown

Fixes #409

Summary of Changes

  1. Reflection Fallback Alignment (EnumMetadataRegistry.cs):

    • Updated CreateFallbackMetadata<TEnum>() to preserve declaration-order indexing during alias deduplication (.DistinctBy(x => x.value)), matching EnumMetadataGenerator's .GroupBy().Select(group => group.First()).
    • Updated secondary sorting to preserve declaration order index (x.index) following DisplayAttribute.GetOrder(). Unannotated members and equal-order members now follow declaration sequence rather than underlying constant numeric value.
  2. Source Generator Attribute Matching (EnumMetadataGenerator.cs):

    • Updated AnalyzeMember attribute resolution to support derived DisplayAttribute subclasses (IsDisplayAttribute), guaranteeing parity with runtime GetCustomAttribute<DisplayAttribute>().
  3. Parity Testing (EnumMetadataRegistryTests.cs & Sharprompt.Tests.csproj):

    • Added Sharprompt.SourceGenerator.csproj as an Analyzer reference in Sharprompt.Tests.csproj so compile-time generator registrations run during test execution.
    • Implemented AssertMetadataParity<TEnum>() test helper asserting identical item sequences and text selector mappings between TryGet<TEnum>() (generator) and CreateFallbackMetadata<TEnum>() (fallback).
    • Added parity test cases covering aliased enums, explicit Display.Order with unannotated members, and out-of-order declarations.

Verification

  • dotnet build -c Release (0 Warnings, 0 Errors)
  • dotnet test -c Release --no-build -f net10.0 (356 Passed — 5 new parity tests)
  • dotnet format --verify-no-changes (0 formatting issues)

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.

Align enum behavior between generated metadata and the fallback

1 participant