Skip to content

[FEATURE REQ] Support EditorBrowsable and Obsolete in CodeGenEnumValue #61963

Description

Description

Extend the provisioning generator's assembly-level CodeGenEnumValueAttribute so appended compatibility enum members can be hidden from IntelliSense and marked obsolete.

Today the attribute supports:

[assembly: CodeGenEnumValue("SampleKind", "LegacyKind", 4, WireName = "legacy-kind")]

Add optional metadata such as:

[assembly: CodeGenEnumValue(
    "SampleKind",
    "LegacyKind",
    4,
    WireName = "legacy-kind",
    EditorBrowsableNever = true,
    ObsoleteMessage = "Use NewKind instead.")]

The generated enum member should include:

[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("Use NewKind instead.")]
[DataMember(Name = "legacy-kind")]
LegacyKind = 4

Motivation

CodeGenEnumValueAttribute is used to append previously shipped enum members during TypeSpec migrations. These members must remain for binary/source compatibility, but they should not be suggested for new code when a newly generated replacement member exists.

Scope

  • Add optional properties to CodeGenEnumValueAttribute for EditorBrowsable(EditorBrowsableState.Never) and an obsolete message.
  • Parse the new named arguments in EnumValueCustomizationResolver.
  • Emit the corresponding attributes from ProvisioningEnumProvider.
  • Add generator tests and update docs/custom-code-attributes.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions