diff --git a/CSharpEssentials.Enums/Generators/StringEnumGenerator.cs b/CSharpEssentials.Enums/Generators/StringEnumGenerator.cs index bf03382..b3af6a5 100644 --- a/CSharpEssentials.Enums/Generators/StringEnumGenerator.cs +++ b/CSharpEssentials.Enums/Generators/StringEnumGenerator.cs @@ -17,7 +17,9 @@ public void Initialize(IncrementalGeneratorInitializationContext context) static (node, _) => node is EnumDeclarationSyntax, static (ctx, _) => (INamedTypeSymbol)ctx.TargetSymbol) - .Where(static symbol => symbol.DeclaredAccessibility != Accessibility.Private); + .Where(static symbol => + symbol.DeclaredAccessibility != Accessibility.Private && + symbol.ContainingType is null); context.RegisterSourceOutput(enumSymbols, static (spc, enumSymbol) => { diff --git a/CSharpEssentials.Tests/Enums/StringEnumGeneratorTests.cs b/CSharpEssentials.Tests/Enums/StringEnumGeneratorTests.cs index a02ae3d..fb4c952 100644 --- a/CSharpEssentials.Tests/Enums/StringEnumGeneratorTests.cs +++ b/CSharpEssentials.Tests/Enums/StringEnumGeneratorTests.cs @@ -176,6 +176,26 @@ public void Constants_Should_Handle_Consecutive_Uppercase() HttpStatusExtensions.HTTPResponseSnakeCase.Should().Be("httpresponse"); HttpStatusExtensions.HTTPResponseKebabCase.Should().Be("httpresponse"); } + + [Fact] + public void StringEnumGenerator_Should_Not_Generate_Extensions_When_Enum_Is_Nested_In_Class() + { + AssertExtensionsTypeIsMissing("NestedClassStatusExtensions"); + } + + [Fact] + public void StringEnumGenerator_Should_Not_Generate_Extensions_When_Enum_Is_Nested_In_Struct() + { + AssertExtensionsTypeIsMissing("NestedStructStatusExtensions"); + } + + private static void AssertExtensionsTypeIsMissing(string generatedTypeName) + { + typeof(StringEnumGeneratorTests).Assembly + .GetType($"CSharpEssentials.Tests.Enums.{generatedTypeName}") + .Should() + .BeNull(); + } } [StringEnum] @@ -201,3 +221,23 @@ internal enum HttpStatus NotFound, HTTPResponse } + +internal static class NestedEnumContainer +{ + [StringEnum] + public enum NestedClassStatus + { + Pending, + Completed + } +} + +internal struct NestedEnumStructContainer +{ + [StringEnum] + public enum NestedStructStatus + { + Pending, + Completed + } +} diff --git a/README.MD b/README.MD index 1c25c95..ee86c98 100644 --- a/README.MD +++ b/README.MD @@ -6,7 +6,7 @@ [![Build](https://github.com/senrecep/CSharpEssentials/actions/workflows/build.yml/badge.svg)](https://github.com/senrecep/CSharpEssentials/actions/workflows/build.yml) -[![Tests](https://img.shields.io/badge/tests-2785%20passing-brightgreen)](https://github.com/senrecep/CSharpEssentials/actions/workflows/build.yml) +[![Tests](https://img.shields.io/badge/tests-2787%20passing-brightgreen)](https://github.com/senrecep/CSharpEssentials/actions/workflows/build.yml) [![NuGet](https://img.shields.io/nuget/v/CSharpEssentials.svg)](https://www.nuget.org/packages/CSharpEssentials) [![Downloads](https://img.shields.io/nuget/dt/CSharpEssentials.svg)](https://www.nuget.org/packages/CSharpEssentials) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/senrecep/CSharpEssentials/blob/main/LICENCE)