Skip to content

Commit

Permalink
Merge pull request #6748 from CollinAlpert/issue_6746
Browse files Browse the repository at this point in the history
Check method name for CA1305
  • Loading branch information
mavasani authored Jul 7, 2023
2 parents 2bf6f36 + 671f1f9 commit 581b145
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -246,9 +246,10 @@ protected override void InitializeWorker(CompilationStartAnalysisContext context
&& x.ArgumentKind == ArgumentKind.DefaultValue);
var nullableType = invocationExpression.Instance?.Type.GetNullableValueTypeUnderlyingType();
var isNullableNumberInvocation = numberTypes.Contains(nullableType, SymbolEqualityComparer.Default);
var isDefaultToStringInvocation = invocationExpression.TargetMethod is { Name: nameof(object.ToString), Parameters.Length: 0 };
var isNullableNumberToStringInvocation = isDefaultToStringInvocation && numberTypes.Contains(nullableType, SymbolEqualityComparer.Default);
if (currentCallHasNullFormatProvider || isNullableNumberInvocation)
if (currentCallHasNullFormatProvider || isNullableNumberToStringInvocation)
{
oaContext.ReportDiagnostic(invocationExpression.CreateDiagnostic(IFormatProviderOptionalRule,
targetMethod.ToDisplayString(SymbolDisplayFormats.ShortSymbolDisplayFormat)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1611,6 +1611,47 @@ public void M({valueType}? x) {{
return VerifyCS.VerifyAnalyzerAsync(code, new DiagnosticResult(SpecifyIFormatProviderAnalyzer.IFormatProviderOptionalRule).WithLocation(0).WithArguments($"{valueType}?.ToString()"));
}

[Theory, WorkItem(6746, "https://github.com/dotnet/roslyn-analyzers/issues/6586")]
[InlineData("int")]
[InlineData("uint")]
[InlineData("long")]
[InlineData("ulong")]
[InlineData("short")]
[InlineData("ushort")]
[InlineData("double")]
[InlineData("float")]
[InlineData("decimal")]
public Task FormatProviderForNullableValueTypesAlreadyProvided_NoDiagnostic(string valueType)
{
var code = $@"
using System.Globalization;
public class Test {{
public void M({valueType}? x) {{
var y = x?.ToString(CultureInfo.CurrentCulture);
}}
}}";

return VerifyCS.VerifyAnalyzerAsync(code);
}

[Theory, WorkItem(6746, "https://github.com/dotnet/roslyn-analyzers/issues/6746")]
[CombinatorialData]
public Task FormatProviderForNullableValueTypes_NoDiagnostic(
[CombinatorialValues("int", "uint", "long", "ulong", "short", "ushort", "double", "float", "decimal")] string valueType,
[CombinatorialValues("GetHashCode", "GetValueOrDefault")] string methodName
)
{
var code = $@"
public class Test {{
public void M({valueType}? x) {{
var y = x.{methodName}();
}}
}}";

return VerifyCS.VerifyAnalyzerAsync(code);
}

private DiagnosticResult GetIFormatProviderAlternateStringRuleCSharpResultAt(int line, int column, string arg1, string arg2, string arg3) =>
#pragma warning disable RS0030 // Do not use banned APIs
VerifyCS.Diagnostic(SpecifyIFormatProviderAnalyzer.IFormatProviderAlternateStringRule)
Expand Down

0 comments on commit 581b145

Please sign in to comment.