Skip to content

Commit d9999d9

Browse files
committed
Update SA1018 for function pointers
1 parent dea685c commit d9999d9

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

StyleCop.Analyzers/StyleCop.Analyzers.CodeFixes/SpacingRules/SA1018CodeFixProvider.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ private static async Task<Document> GetTransformedDocumentAsync(Document documen
8888
{
8989
var syntaxRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
9090

91-
var nullableType = (NullableTypeSyntax)syntaxRoot.FindNode(diagnostic.Location.SourceSpan);
92-
var questionToken = nullableType.QuestionToken;
91+
var questionToken = syntaxRoot.FindToken(diagnostic.Location.SourceSpan.Start);
9392
var precedingToken = questionToken.GetPreviousToken();
9493

9594
var triviaList = precedingToken.TrailingTrivia.AddRange(questionToken.LeadingTrivia);

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,45 @@
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.SA1018NullableTypeSymbolsMustNotBePrecededBySpace,
12+
StyleCop.Analyzers.SpacingRules.SA1018CodeFixProvider>;
713

814
public partial class SA1018CSharp9UnitTests : SA1018CSharp8UnitTests
915
{
16+
[Fact]
17+
[WorkItem(3970, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3970")]
18+
public async Task TestFunctionPointerNullableTypeSpacingAsync()
19+
{
20+
var testCode = @"#nullable enable
21+
22+
public class TestClass
23+
{
24+
private unsafe delegate*<string {|#0:?|}, void> field1;
25+
private unsafe delegate*<string {|#1:?|}[], void> field2;
26+
}
27+
";
28+
29+
var fixedCode = @"#nullable enable
30+
31+
public class TestClass
32+
{
33+
private unsafe delegate*<string?, void> field1;
34+
private unsafe delegate*<string?[], void> field2;
35+
}
36+
";
37+
38+
var expected = new[]
39+
{
40+
Diagnostic().WithLocation(0),
41+
Diagnostic().WithLocation(1),
42+
};
43+
44+
await VerifyCSharpFixAsync(testCode, expected, fixedCode, CancellationToken.None).ConfigureAwait(false);
45+
}
1046
}
1147
}

0 commit comments

Comments
 (0)