Skip to content

Commit c74913b

Browse files
Updated SA1008OpeningParenthesisMustBeSpacedCorrectly to disallow a leading space before a lambda in a collection expression
#3931
1 parent f5843ae commit c74913b

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp12/SpacingRules/SA1008CSharp12UnitTests.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ namespace StyleCop.Analyzers.Test.CSharp12.SpacingRules
55
{
66
using System.Threading;
77
using System.Threading.Tasks;
8+
using Microsoft.CodeAnalysis.Testing;
89
using StyleCop.Analyzers.Test.CSharp11.SpacingRules;
910
using Xunit;
1011

@@ -28,5 +29,26 @@ public async Task TestTupleUsingAliasAsync()
2829
var expected = Diagnostic(DescriptorPreceded).WithLocation(0);
2930
await VerifyCSharpFixAsync(testCode, expected, fixedCode, CancellationToken.None).ConfigureAwait(false);
3031
}
32+
33+
[Fact]
34+
[WorkItem(3931, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3931")]
35+
public async Task TestParenthesizedLambdaInCollectionExpressionAsync()
36+
{
37+
var testCode = @"
38+
class TestClass
39+
{
40+
private System.Action[] actions = [ [|(|]) => {}];
41+
}
42+
";
43+
44+
var fixedCode = @"
45+
class TestClass
46+
{
47+
private System.Action[] actions = [() => {}];
48+
}
49+
";
50+
51+
await VerifyCSharpFixAsync(testCode, DiagnosticResult.EmptyDiagnosticResults, fixedCode, CancellationToken.None).ConfigureAwait(false);
52+
}
3153
}
3254
}

StyleCop.Analyzers/StyleCop.Analyzers/SpacingRules/SA1008OpeningParenthesisMustBeSpacedCorrectly.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,8 @@ private static void HandleOpenParenToken(SyntaxTreeAnalysisContext context, Synt
248248

249249
case SyntaxKind.ParameterList:
250250
var partOfLambdaExpression = token.Parent.Parent.IsKind(SyntaxKind.ParenthesizedLambdaExpression);
251-
haveLeadingSpace = partOfLambdaExpression;
251+
var startOfCollectionExpression = prevToken.IsKind(SyntaxKind.OpenBracketToken) && prevToken.Parent.IsKind(SyntaxKindEx.CollectionExpression);
252+
haveLeadingSpace = partOfLambdaExpression && !startOfCollectionExpression;
252253
break;
253254

254255
case SyntaxKindEx.TupleType:

0 commit comments

Comments
 (0)