Skip to content

Commit 78eff0d

Browse files
authored
Merge pull request #3254 from NextTurn/sa1011
Fix SA1011 for function pointer unmanaged calling convention list
2 parents 7ae1443 + da6bc8a commit 78eff0d

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp9/SpacingRules/SA1011CSharp9UnitTests.cs

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

44
namespace StyleCop.Analyzers.Test.CSharp9.SpacingRules
55
{
6+
using System.Threading;
7+
using System.Threading.Tasks;
68
using StyleCop.Analyzers.Test.CSharp8.SpacingRules;
9+
using Xunit;
10+
using static StyleCop.Analyzers.Test.Verifiers.StyleCopCodeFixVerifier<
11+
StyleCop.Analyzers.SpacingRules.SA1011ClosingSquareBracketsMustBeSpacedCorrectly,
12+
StyleCop.Analyzers.SpacingRules.TokenSpacingCodeFixProvider>;
713

814
public class SA1011CSharp9UnitTests : SA1011CSharp8UnitTests
915
{
16+
[Fact]
17+
public async Task TestFunctionPointerUnmanagedCallingConventionListAsync()
18+
{
19+
var testCode = @"public class TestClass
20+
{
21+
unsafe delegate* unmanaged[Stdcall {|#0:]|}<void> FuncPtr1;
22+
unsafe delegate* unmanaged[Stdcall{|#1:]|} <void> FuncPtr2;
23+
}
24+
";
25+
26+
var fixedCode = @"public class TestClass
27+
{
28+
unsafe delegate* unmanaged[Stdcall]<void> FuncPtr1;
29+
unsafe delegate* unmanaged[Stdcall]<void> FuncPtr2;
30+
}
31+
";
32+
33+
var expected = new[]
34+
{
35+
Diagnostic().WithArguments(" not", "preceded").WithLocation(0),
36+
Diagnostic().WithArguments(" not", "followed").WithLocation(1),
37+
};
38+
39+
await VerifyCSharpFixAsync(testCode, expected, fixedCode, CancellationToken.None).ConfigureAwait(false);
40+
}
1041
}
1142
}

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/SyntaxKindEx.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,6 @@ internal static class SyntaxKindEx
5151
public const SyntaxKind NullableDirectiveTrivia = (SyntaxKind)9055;
5252
public const SyntaxKind WithInitializerExpression = (SyntaxKind)9062;
5353
public const SyntaxKind RecordDeclaration = (SyntaxKind)9063;
54+
public const SyntaxKind FunctionPointerUnmanagedCallingConventionList = (SyntaxKind)9066;
5455
}
5556
}

StyleCop.Analyzers/StyleCop.Analyzers/SpacingRules/SA1011ClosingSquareBracketsMustBeSpacedCorrectly.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ namespace StyleCop.Analyzers.SpacingRules
1010
using Microsoft.CodeAnalysis.CSharp.Syntax;
1111
using Microsoft.CodeAnalysis.Diagnostics;
1212
using StyleCop.Analyzers.Helpers;
13+
using StyleCop.Analyzers.Lightup;
1314

1415
/// <summary>
1516
/// A closing square bracket within a C# statement is not spaced correctly.
@@ -114,6 +115,11 @@ private static void HandleCloseBracketToken(SyntaxTreeAnalysisContext context, S
114115
suppressFollowingSpaceError = false;
115116
break;
116117

118+
case SyntaxKind.LessThanToken:
119+
precedesSpecialCharacter = token.Parent.IsKind(SyntaxKindEx.FunctionPointerUnmanagedCallingConventionList);
120+
suppressFollowingSpaceError = false;
121+
break;
122+
117123
case SyntaxKind.GreaterThanToken:
118124
precedesSpecialCharacter = nextToken.Parent.IsKind(SyntaxKind.TypeArgumentList);
119125
break;

0 commit comments

Comments
 (0)