提交 6608853f 编写于 作者: J jnm2

Do not remove .ToString() from base

上级 70ddf3d9
......@@ -750,6 +750,55 @@ public static void PrintRightAligned ( String[] strings )
Console.WriteLine ($""{i}.{str[||].PadRight(maxLength, ' ')}"");
}
}
}");
}
[Fact, WorkItem(42669, "https://github.com/dotnet/roslyn/issues/42669")]
public async Task MissingOnBaseToString()
{
await TestMissingAsync(
@"class C
{
public override string ToString() => $""Test: {base[||].ToString()}"";
}");
}
[Fact, WorkItem(42669, "https://github.com/dotnet/roslyn/issues/42669")]
public async Task MissingOnBaseToStringEvenWhenNotOverridden()
{
await TestMissingAsync(
@"class C
{
string M() => $""Test: {base[||].ToString()}"";
}");
}
[Fact, WorkItem(42669, "https://github.com/dotnet/roslyn/issues/42669")]
public async Task MissingOnBaseToStringWithArgument()
{
await TestMissingAsync(
@"class Base
{
public string ToString(string format) => format;
}
class Derived : Base
{
public override string ToString() => $""Test: {base[||].ToString(""a"")}"";
}");
}
[Fact, WorkItem(42669, "https://github.com/dotnet/roslyn/issues/42669")]
public async Task PadLeftSimplificationIsStillOfferedOnBaseToString()
{
await TestInRegularAndScriptAsync(
@"class C
{
public override string ToString() => $""Test: {base.ToString()[||].PadLeft(10)}"";
}",
@"class C
{
public override string ToString() => $""Test: {base.ToString(),10}"";
}");
}
}
......
......@@ -510,6 +510,59 @@ Class C
Sub M(someValue As String)
Dim v = $""prefix {[||]PadLeft(3)} suffix""
End Sub
End Class")
End Function
<Fact, WorkItem(42669, "https://github.com/dotnet/roslyn/issues/42669")>
Public Async Function MissingOnBaseToString() As Task
Await TestMissingAsync(
"Class C
Public Overrides Function ToString() As String
Return $""Test: {MyBase[||].ToString()}""
End Function
End Class")
End Function
<Fact, WorkItem(42669, "https://github.com/dotnet/roslyn/issues/42669")>
Public Async Function MissingOnBaseToStringEvenWhenNotOverridden() As Task
Await TestMissingAsync(
"Class C
Function M() As String
Return $""Test: {MyBase[||].ToString()}""
End Function
End Class")
End Function
<Fact, WorkItem(42669, "https://github.com/dotnet/roslyn/issues/42669")>
Public Async Function MissingOnBaseToStringWithArgument() As Task
Await TestMissingAsync(
"Class Base
Public Function ToString(format As String) As String
Return format
End Function
End Class
Class Derived
Inherits Base
Public Overrides Function ToString() As String
Return $""Test: {MyBase[||].ToString(""a"")}""
End Function
End Class")
End Function
<Fact, WorkItem(42669, "https://github.com/dotnet/roslyn/issues/42669")>
Public Async Function PadLeftSimplificationIsStillOfferedOnBaseToString() As Task
Await TestInRegularAndScriptAsync(
"Class C
Public Overrides Function ToString() As String
Return $""Test: {MyBase.ToString()[||].PadLeft(10)}""
End Function
End Class",
"Class C
Public Overrides Function ToString() As String
Return $""Test: {MyBase.ToString(),10}""
End Function
End Class")
End Function
End Class
......
......@@ -3,9 +3,11 @@
// See the LICENSE file in the project root for more information.
using Microsoft.CodeAnalysis.CSharp.EmbeddedLanguages.VirtualChars;
using Microsoft.CodeAnalysis.CSharp.LanguageServices;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars;
using Microsoft.CodeAnalysis.LanguageServices;
using Microsoft.CodeAnalysis.SimplifyInterpolation;
namespace Microsoft.CodeAnalysis.CSharp.SimplifyInterpolation
......@@ -16,5 +18,8 @@ internal class CSharpSimplifyInterpolationDiagnosticAnalyzer : AbstractSimplifyI
{
protected override IVirtualCharService GetVirtualCharService()
=> CSharpVirtualCharService.Instance;
protected override ISyntaxFacts GetSyntaxFacts()
=> CSharpSyntaxFacts.Instance;
}
}
......@@ -14,6 +14,7 @@
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Editing;
using Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars;
using Microsoft.CodeAnalysis.LanguageServices;
using Microsoft.CodeAnalysis.Operations;
using Microsoft.CodeAnalysis.Shared.Extensions;
......@@ -63,7 +64,8 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context)
interpolationSyntax.Parent is TInterpolatedStringExpressionSyntax interpolatedString)
{
Helpers.UnwrapInterpolation<TInterpolationSyntax, TExpressionSyntax>(
document.GetRequiredLanguageService<IVirtualCharService>(), interpolation, out var unwrapped,
document.GetRequiredLanguageService<IVirtualCharService>(),
document.GetRequiredLanguageService<ISyntaxFactsService>(), interpolation, out var unwrapped,
out var alignment, out var negate, out var formatString, out _);
if (unwrapped == null)
......
......@@ -7,6 +7,7 @@
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars;
using Microsoft.CodeAnalysis.LanguageServices;
using Microsoft.CodeAnalysis.Operations;
namespace Microsoft.CodeAnalysis.SimplifyInterpolation
......@@ -27,6 +28,8 @@ protected AbstractSimplifyInterpolationDiagnosticAnalyzer()
protected abstract IVirtualCharService GetVirtualCharService();
protected abstract ISyntaxFacts GetSyntaxFacts();
public override DiagnosticAnalyzerCategory GetAnalyzerCategory()
=> DiagnosticAnalyzerCategory.SemanticSpanAnalysis;
......@@ -56,8 +59,8 @@ private void AnalyzeInterpolation(OperationAnalysisContext context)
}
Helpers.UnwrapInterpolation<TInterpolationSyntax, TExpressionSyntax>(
GetVirtualCharService(), interpolation, out _, out var alignment, out _, out var formatString,
out var unnecessaryLocations);
GetVirtualCharService(), GetSyntaxFacts(), interpolation, out _, out var alignment, out _,
out var formatString, out var unnecessaryLocations);
if (alignment == null && formatString == null)
{
......
......@@ -8,6 +8,7 @@
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars;
using Microsoft.CodeAnalysis.LanguageServices;
using Microsoft.CodeAnalysis.Operations;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Text;
......@@ -18,7 +19,7 @@ namespace Microsoft.CodeAnalysis.SimplifyInterpolation
internal static class Helpers
{
public static void UnwrapInterpolation<TInterpolationSyntax, TExpressionSyntax>(
IVirtualCharService virtualCharService, IInterpolationOperation interpolation,
IVirtualCharService virtualCharService, ISyntaxFacts syntaxFacts, IInterpolationOperation interpolation,
out TExpressionSyntax? unwrapped, out TExpressionSyntax? alignment, out bool negate,
out string? formatString, out ImmutableArray<Location> unnecessaryLocations)
where TInterpolationSyntax : SyntaxNode
......@@ -38,7 +39,7 @@ internal static class Helpers
if (interpolation.FormatString == null)
{
UnwrapFormatString(virtualCharService, expression, out expression, out formatString, unnecessarySpans);
UnwrapFormatString(virtualCharService, syntaxFacts, expression, out expression, out formatString, unnecessarySpans);
}
unwrapped = expression.Syntax as TExpressionSyntax;
......@@ -67,11 +68,12 @@ private static IOperation Unwrap(IOperation expression)
}
private static void UnwrapFormatString(
IVirtualCharService virtualCharService, IOperation expression, out IOperation unwrapped,
IVirtualCharService virtualCharService, ISyntaxFacts syntaxFacts, IOperation expression, out IOperation unwrapped,
out string? formatString, List<TextSpan> unnecessarySpans)
{
if (expression is IInvocationOperation { TargetMethod: { Name: nameof(ToString) } } invocation &&
HasNonImplicitInstance(invocation))
HasNonImplicitInstance(invocation) &&
!syntaxFacts.IsBaseExpression(invocation.Instance.Syntax))
{
if (invocation.Arguments.Length == 1 &&
invocation.Arguments[0].Value is ILiteralOperation { ConstantValue: { HasValue: true, Value: string value } } literal)
......
......@@ -4,8 +4,10 @@
Imports Microsoft.CodeAnalysis.Diagnostics
Imports Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars
Imports Microsoft.CodeAnalysis.LanguageServices
Imports Microsoft.CodeAnalysis.SimplifyInterpolation
Imports Microsoft.CodeAnalysis.VisualBasic.EmbeddedLanguages.VirtualChars
Imports Microsoft.CodeAnalysis.VisualBasic.LanguageServices
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.VisualBasic.SimplifyInterpolation
......@@ -16,5 +18,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.SimplifyInterpolation
Protected Overrides Function GetVirtualCharService() As IVirtualCharService
Return VisualBasicVirtualCharService.Instance
End Function
Protected Overrides Function GetSyntaxFacts() As ISyntaxFacts
Return VisualBasicSyntaxFacts.Instance
End Function
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册