Skip to content

Commit 84fb81c

Browse files
authored
Preserve trivia when fixing CA1865 (#6932)
1 parent 2dbc0e4 commit 84fb81c

File tree

3 files changed

+79
-2
lines changed

3 files changed

+79
-2
lines changed

src/NetAnalyzers/CSharp/Microsoft.NetCore.Analyzers/Performance/CSharpUseStringMethodCharOverloadWithSingleCharacters.Fixer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ protected override void ApplyFix(
8181
.Select(arg => arg!.Syntax));
8282
var argumentListNode = SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(arguments));
8383

84-
editor.ReplaceNode(oldArgumentListNode, argumentListNode);
84+
editor.ReplaceNode(oldArgumentListNode, argumentListNode.WithTriviaFrom(oldArgumentListNode));
8585
}
8686
}
8787
}

src/NetAnalyzers/UnitTests/Microsoft.NetCore.Analyzers/Performance/UseStringMethodCharOverloadWithSingleCharactersTests.cs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Threading.Tasks;
77
using Microsoft.CodeAnalysis;
88
using Microsoft.CodeAnalysis.Testing;
9+
using Test.Utilities;
910
using Xunit;
1011
using VerifyCS = Test.Utilities.CSharpCodeFixVerifier<
1112
Microsoft.CodeAnalysis.CSharp.NetAnalyzers.Microsoft.NetCore.Analyzers.Performance.CSharpUseStringMethodCharOverloadWithSingleCharacters,
@@ -119,6 +120,47 @@ await VerifyCSAsync(
119120
});
120121
}
121122

123+
[Fact]
124+
[WorkItem(6930, "https://github.com/dotnet/roslyn-analyzers/issues/6930")]
125+
public async Task CS_PreservesTrivia()
126+
{
127+
var testCode = $$"""
128+
using System;
129+
130+
public class TestClass
131+
{
132+
public void TestMethod(string str)
133+
{
134+
if (str != "abc"
135+
|| 2 == str.IndexOf{|CA1865:(".", StringComparison.Ordinal)|}
136+
|| str == "test")
137+
{
138+
return;
139+
}
140+
}
141+
}
142+
""";
143+
144+
var fixedCode = $$"""
145+
using System;
146+
147+
public class TestClass
148+
{
149+
public void TestMethod(string str)
150+
{
151+
if (str != "abc"
152+
|| 2 == str.IndexOf('.')
153+
|| str == "test")
154+
{
155+
return;
156+
}
157+
}
158+
}
159+
""";
160+
161+
await VerifyCSAsync(testCode, ReferenceAssemblies.NetStandard.NetStandard21, fixedCode);
162+
}
163+
122164
[Theory]
123165
[MemberData(nameof(IndexOfLastIndexOfMethods))]
124166
public async Task CS_IndexOfLastIndexOf_PreservesStartsIndexAndCount(string method)
@@ -346,6 +388,41 @@ End Class
346388
await VerifyVBAsync(testCode, ReferenceAssemblies.NetStandard.NetStandard21);
347389
}
348390

391+
[Fact]
392+
[WorkItem(6930, "https://github.com/dotnet/roslyn-analyzers/issues/6930")]
393+
public async Task VB_PreservesTrivia()
394+
{
395+
var testCode = $$"""
396+
Imports System
397+
398+
Public Class TestClass
399+
Public Sub TestMethod(str As String)
400+
If str <> "abc" _
401+
Or 2 = str.IndexOf{|CA1865:(".", StringComparison.Ordinal)|} _
402+
Or str = "test"
403+
Return
404+
End If
405+
End Sub
406+
End Class
407+
""";
408+
409+
var fixedCode = $$"""
410+
Imports System
411+
412+
Public Class TestClass
413+
Public Sub TestMethod(str As String)
414+
If str <> "abc" _
415+
Or 2 = str.IndexOf("."c) _
416+
Or str = "test"
417+
Return
418+
End If
419+
End Sub
420+
End Class
421+
""";
422+
423+
await VerifyVBAsync(testCode, ReferenceAssemblies.NetStandard.NetStandard21, fixedCode);
424+
}
425+
349426
[Theory]
350427
[MemberData(nameof(Methods))]
351428
public async Task VB_RegularStringLiteral(string method)

src/NetAnalyzers/VisualBasic/Microsoft.NetCore.Analyzers/Performance/BasicUseStringMethodCharOverloadWithSingleCharacters.Fixer.vb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ Namespace Microsoft.NetCore.VisualBasic.Analyzers.Performance
7171
[Select](Function(arg) TryCast(model.GetOperation(arg), IArgumentOperation)).Where(Function(arg) PreserveArgument(arg)).[Select](Function(arg) arg.Syntax))
7272
Dim argumentListNode = SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(arguments))
7373

74-
editor.ReplaceNode(oldArgumentListNode, argumentListNode)
74+
editor.ReplaceNode(oldArgumentListNode, argumentListNode.WithTriviaFrom(oldArgumentListNode))
7575
End Sub
7676
End Class
7777
End Class

0 commit comments

Comments
 (0)