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

feat: support enum naming strategies for DescriptionAttribute and Enu… #1507

Merged
merged 1 commit into from
Sep 29, 2024

Conversation

latonz
Copy link
Contributor

@latonz latonz commented Sep 29, 2024

Adds support for the System.ComponentModel.DescriptionAttribute and System.Runtime.Serialization.EnumMemberAttribute as enum naming strategies.
Fixes #1079

@latonz latonz added the enhancement New feature or request label Sep 29, 2024
@latonz latonz self-assigned this Sep 29, 2024
@latonz latonz added enhancement New feature or request and removed enhancement New feature or request labels Sep 29, 2024
@latonz latonz marked this pull request as ready for review September 29, 2024 17:22
@latonz latonz merged commit 35fbd7c into riok:main Sep 29, 2024
18 of 19 checks passed
@latonz latonz deleted the 1079-enum-naming-strategies branch September 29, 2024 17:23
@josetr
Copy link

josetr commented Oct 15, 2024

@latonz Are there any plans to allow empty names?

Newtonsoft did support [EnumMember(Value = "")]].

Use case: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeActionKind

@latonz
Copy link
Contributor Author

latonz commented Oct 15, 2024

@josetr IMO this should already work:

[Fact]
public void EnumToStringWithSerializationEnumMemberAttributeNamingStrategy()
{
var source = TestSourceBuilder.MapperWithBodyAndTypes(
"[MapEnum(EnumMappingStrategy.ByName, NamingStrategy = EnumNamingStrategy.SerializationEnumMemberAttribute)] public partial string ToStr(E source);",
"""
public enum E
{
[System.Runtime.Serialization.EnumMember(Value = "A1")] A,
[System.Runtime.Serialization.EnumMember(Value = "")] B,
[System.Runtime.Serialization.EnumMember(Value = null)] C,
[System.Runtime.Serialization.EnumMember)] D,
E,
}
"""
);
TestHelper
.GenerateMapper(source, TestHelperOptions.AllowInfoDiagnostics)
.Should()
.HaveSingleMethodBody(
"""
return source switch
{
global::E.A => "A1",
global::E.B => "",
global::E.C => "C",
global::E.D => "D",
global::E.E => "E",
_ => source.ToString(),
};
"""
)
.HaveDiagnostics(
DiagnosticDescriptors.EnumNamingAttributeMissing,
"The EnumMemberAttribute to build the name of the enum member C (2) is missing",
"The EnumMemberAttribute to build the name of the enum member D (3) is missing",
"The EnumMemberAttribute to build the name of the enum member E (4) is missing"
)
.HaveAssertedAllDiagnostics();
}

Can you elaborate on what exactly doesn't work as expected?

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.

Add support for enum name sources (EnumMemberAttribute and DescriptionAttribute)
2 participants