Skip to content

Commit 86cceed

Browse files
Issue #3369: Updated SA1117 to also handle target-typed new
1 parent fc62ca0 commit 86cceed

2 files changed

Lines changed: 55 additions & 0 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp9/ReadabilityRules/SA1117CSharp9UnitTests.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,56 @@
33

44
namespace StyleCop.Analyzers.Test.CSharp9.ReadabilityRules
55
{
6+
using System.Threading;
7+
using System.Threading.Tasks;
8+
using Microsoft.CodeAnalysis.Testing;
69
using StyleCop.Analyzers.Test.CSharp8.ReadabilityRules;
10+
using Xunit;
11+
using static StyleCop.Analyzers.Test.Verifiers.StyleCopDiagnosticVerifier<StyleCop.Analyzers.ReadabilityRules.SA1117ParametersMustBeOnSameLineOrSeparateLines>;
712

813
public class SA1117CSharp9UnitTests : SA1117CSharp8UnitTests
914
{
15+
[Fact]
16+
public async Task TestValidTargetTypedNewExpressionAsync()
17+
{
18+
var testCode = @"
19+
class Foo
20+
{
21+
public Foo(int a, int b, int c)
22+
{
23+
}
24+
25+
public void Method()
26+
{
27+
Foo x = new(
28+
1,
29+
2,
30+
3);
31+
}
32+
}";
33+
34+
await VerifyCSharpDiagnosticAsync(testCode, DiagnosticResult.EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false);
35+
}
36+
37+
[Fact]
38+
public async Task TestInvalidTargetTypedNewExpressionAsync()
39+
{
40+
var testCode = @"
41+
class Foo
42+
{
43+
public Foo(int a, int b, int c)
44+
{
45+
}
46+
47+
public void Method()
48+
{
49+
Foo x = new(1,
50+
2, 3);
51+
}
52+
}";
53+
54+
DiagnosticResult expected = Diagnostic().WithLocation(11, 16);
55+
await VerifyCSharpDiagnosticAsync(testCode, expected, CancellationToken.None).ConfigureAwait(false);
56+
}
1057
}
1158
}

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1117ParametersMustBeOnSameLineOrSeparateLines.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ internal class SA1117ParametersMustBeOnSameLineOrSeparateLines : DiagnosticAnaly
7272
private static readonly Action<SyntaxNodeAnalysisContext> IndexerDeclarationAction = HandleIndexerDeclaration;
7373
private static readonly Action<SyntaxNodeAnalysisContext> InvocationExpressionAction = HandleInvocationExpression;
7474
private static readonly Action<SyntaxNodeAnalysisContext> ObjectCreationExpressionAction = HandleObjectCreationExpression;
75+
private static readonly Action<SyntaxNodeAnalysisContext> ImplicitObjectCreationExpressionAction = HandleImplicitObjectCreationExpression;
7576
private static readonly Action<SyntaxNodeAnalysisContext> ElementAccessExpressionAction = HandleElementAccessExpression;
7677
private static readonly Action<SyntaxNodeAnalysisContext> ElementBindingExpressionAction = HandleElementBindingExpression;
7778
private static readonly Action<SyntaxNodeAnalysisContext> ArrayCreationExpressionAction = HandleArrayCreationExpression;
@@ -96,6 +97,7 @@ public override void Initialize(AnalysisContext context)
9697
context.RegisterSyntaxNodeAction(IndexerDeclarationAction, SyntaxKind.IndexerDeclaration);
9798
context.RegisterSyntaxNodeAction(InvocationExpressionAction, SyntaxKind.InvocationExpression);
9899
context.RegisterSyntaxNodeAction(ObjectCreationExpressionAction, SyntaxKind.ObjectCreationExpression);
100+
context.RegisterSyntaxNodeAction(ImplicitObjectCreationExpressionAction, SyntaxKindEx.ImplicitObjectCreationExpression);
99101
context.RegisterSyntaxNodeAction(ElementAccessExpressionAction, SyntaxKind.ElementAccessExpression);
100102
context.RegisterSyntaxNodeAction(ElementBindingExpressionAction, SyntaxKind.ElementBindingExpression);
101103
context.RegisterSyntaxNodeAction(ArrayCreationExpressionAction, SyntaxKind.ArrayCreationExpression);
@@ -128,6 +130,12 @@ private static void HandleObjectCreationExpression(SyntaxNodeAnalysisContext con
128130
HandleArgumentListSyntax(context, objectCreation.ArgumentList);
129131
}
130132

133+
private static void HandleImplicitObjectCreationExpression(SyntaxNodeAnalysisContext context)
134+
{
135+
var implicitObjectCreation = (ImplicitObjectCreationExpressionSyntaxWrapper)context.Node;
136+
HandleArgumentListSyntax(context, implicitObjectCreation.ArgumentList);
137+
}
138+
131139
private static void HandleIndexerDeclaration(SyntaxNodeAnalysisContext context)
132140
{
133141
var indexerDeclaration = (IndexerDeclarationSyntax)context.Node;

0 commit comments

Comments
 (0)