diff --git a/ChangeLog.md b/ChangeLog.md index f787f4218c..eaf9396daa 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix analyzer [RCS1264](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1264) ([PR](https://github.com/dotnet/roslynator/pull/1666)) - Fix analyzer [RCS1229](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1229) ([PR](https://github.com/dotnet/roslynator/pull/1667)) +- Fix analyzer [RCS1250](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1250) ([PR](https://github.com/dotnet/roslynator/pull/1652) by @aihnatiuk) ## [4.13.1] - 2025-02-23 diff --git a/src/Analyzers/CSharp/Analysis/ObjectCreation/ImplicitOrExplicitObjectCreationAnalysis.cs b/src/Analyzers/CSharp/Analysis/ObjectCreation/ImplicitOrExplicitObjectCreationAnalysis.cs index 80b90bee1c..392d4fa5aa 100644 --- a/src/Analyzers/CSharp/Analysis/ObjectCreation/ImplicitOrExplicitObjectCreationAnalysis.cs +++ b/src/Analyzers/CSharp/Analysis/ObjectCreation/ImplicitOrExplicitObjectCreationAnalysis.cs @@ -59,7 +59,10 @@ protected override bool UseCollectionExpressionFromImplicit(ref SyntaxNodeAnalys var implicitObjectCreation = (ImplicitObjectCreationExpressionSyntax)context.Node; return implicitObjectCreation.ArgumentList?.Arguments.Any() != true - && implicitObjectCreation.Initializer?.Expressions.Any(f => f.IsKind(SyntaxKind.SimpleAssignmentExpression)) != true + && implicitObjectCreation.Initializer?.Expressions + .Any(f => f.IsKind( + SyntaxKind.SimpleAssignmentExpression, + SyntaxKind.ComplexElementInitializerExpression)) != true && UseCollectionExpression(ref context); } diff --git a/src/Tests/Analyzers.Tests/RCS1250UseImplicitOrExplicitObjectCreationTests.cs b/src/Tests/Analyzers.Tests/RCS1250UseImplicitOrExplicitObjectCreationTests.cs index 26bf4f3ab8..61f082be47 100644 --- a/src/Tests/Analyzers.Tests/RCS1250UseImplicitOrExplicitObjectCreationTests.cs +++ b/src/Tests/Analyzers.Tests/RCS1250UseImplicitOrExplicitObjectCreationTests.cs @@ -1903,4 +1903,31 @@ void M2() """, options: Options.AddConfigOption(ConfigOptionKeys.ObjectCreationTypeStyle, ConfigOptionValues.ObjectCreationTypeStyle_Implicit) .AddConfigOption(ConfigOptionKeys.UseCollectionExpression, false)); } + + [Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.UseImplicitOrExplicitObjectCreation)] + public async Task TestNoDiagnostic_ComplexElementInitializer() + { + await VerifyNoDiagnosticAsync(""" +using System; +using System.Collections; +using System.Collections.Generic; +class C : IEnumerable> +{ + public IEnumerator> GetEnumerator() => throw new System.NotImplementedException(); + + IEnumerator IEnumerable.GetEnumerator() => throw new System.NotImplementedException(); + + public void Add(int arg1, int arg2) + { + } + + static C M() + { + C c = new() { { 1, 2 } }; + return c; + } +} +""", options: Options.AddConfigOption(ConfigOptionKeys.ObjectCreationTypeStyle, ConfigOptionValues.ObjectCreationTypeStyle_Implicit) + .AddConfigOption(ConfigOptionKeys.UseCollectionExpression, true)); + } }