diff --git a/ChangeLog.md b/ChangeLog.md index 1ba6a46101..0b387e81d5 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix analyzer [RCS1246](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1246) ([PR](https://github.com/dotnet/roslynator/pull/1676)) - Fix analyzer [RCS1248](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1248) ([PR](https://github.com/dotnet/roslynator/pull/1677)) - Fix analyzer [RCS1203](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1203) ([PR](https://github.com/dotnet/roslynator/pull/1683)) +- Fix analyzer [RCS1043](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1043) ([PR](https://github.com/dotnet/roslynator/pull/1684)) - Fix refactoring [Check expression for null](https://josefpihrt.github.io/docs/roslynator/refactorings/RR0024) ([PR](https://github.com/dotnet/roslynator/pull/1682)) ## [4.14.0] - 2025-07-26 diff --git a/src/Analyzers/CSharp/Analysis/RemovePartialModifierFromTypeWithSinglePartAnalyzer.cs b/src/Analyzers/CSharp/Analysis/RemovePartialModifierFromTypeWithSinglePartAnalyzer.cs index d3d568093c..85dc3d0dcf 100644 --- a/src/Analyzers/CSharp/Analysis/RemovePartialModifierFromTypeWithSinglePartAnalyzer.cs +++ b/src/Analyzers/CSharp/Analysis/RemovePartialModifierFromTypeWithSinglePartAnalyzer.cs @@ -59,6 +59,12 @@ private static void AnalyzeTypeDeclaration(SyntaxNodeAnalysisContext context) if (_metadataNames.Any(c => symbol.InheritsFrom(c))) return; + foreach (ISymbol member in symbol.GetMembers()) + { + if (member.HasAttribute(MetadataNames.System_Text_RegularExpressions_GeneratedRegexAttribute)) + return; + } + foreach (MemberDeclarationSyntax member in typeDeclaration.Members) { if (member is MethodDeclarationSyntax methodDeclaration diff --git a/src/Core/MetadataNames.cs b/src/Core/MetadataNames.cs index a19d62a4cd..61736b974c 100644 --- a/src/Core/MetadataNames.cs +++ b/src/Core/MetadataNames.cs @@ -63,6 +63,7 @@ internal static class MetadataNames public static readonly MetadataName System_Runtime_Serialization_StreamingContext = MetadataName.Parse("System.Runtime.Serialization.StreamingContext"); public static readonly MetadataName System_Span_T = MetadataName.Parse("System.Span`1"); public static readonly MetadataName System_StringComparison = MetadataName.Parse("System.StringComparison"); + public static readonly MetadataName System_Text_RegularExpressions_GeneratedRegexAttribute = MetadataName.Parse("System.Text.RegularExpressions.GeneratedRegexAttribute"); public static readonly MetadataName System_Text_RegularExpressions_Regex = MetadataName.Parse("System.Text.RegularExpressions.Regex"); public static readonly MetadataName System_Text_RegularExpressions_RegexOptions = MetadataName.Parse("System.Text.RegularExpressions.RegexOptions"); public static readonly MetadataName System_Text_StringBuilder = MetadataName.Parse("System.Text.StringBuilder"); diff --git a/src/Tests/Analyzers.Tests/RCS1043RemovePartialModifierFromTypeWithSinglePartTests.cs b/src/Tests/Analyzers.Tests/RCS1043RemovePartialModifierFromTypeWithSinglePartTests.cs index 4a5fcf26c5..2eb692754d 100644 --- a/src/Tests/Analyzers.Tests/RCS1043RemovePartialModifierFromTypeWithSinglePartTests.cs +++ b/src/Tests/Analyzers.Tests/RCS1043RemovePartialModifierFromTypeWithSinglePartTests.cs @@ -245,4 +245,18 @@ class FrameworkElement } "); } + + [Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemovePartialModifierFromTypeWithSinglePart)] + public async Task TestNoDiagnostic_GeneratedRegexAttribute() + { + await VerifyNoDiagnosticAsync(""" +using System.Text.RegularExpressions; + +partial class C +{ + [GeneratedRegex("^[a-z]{2}$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)] + private static partial Regex Pattern(); +} +""", options: Options.AddAllowedCompilerDiagnosticId("CS8795")); + } }