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.
Description
Extend the provisioning generator's assembly-level
CodeGenEnumValueAttributeso appended compatibility enum members can be hidden from IntelliSense and marked obsolete.Today the attribute supports:
Add optional metadata such as:
The generated enum member should include:
Motivation
CodeGenEnumValueAttributeis 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
CodeGenEnumValueAttributeforEditorBrowsable(EditorBrowsableState.Never)and an obsolete message.EnumValueCustomizationResolver.ProvisioningEnumProvider.docs/custom-code-attributes.md.