diff --git a/src/nunit.analyzers.tests/ClassicModelAssertUsage/AreEqualClassicModelAssertUsageCodeFixTests.cs b/src/nunit.analyzers.tests/ClassicModelAssertUsage/AreEqualClassicModelAssertUsageCodeFixTests.cs
index b62e6553..eea3bf9c 100644
--- a/src/nunit.analyzers.tests/ClassicModelAssertUsage/AreEqualClassicModelAssertUsageCodeFixTests.cs
+++ b/src/nunit.analyzers.tests/ClassicModelAssertUsage/AreEqualClassicModelAssertUsageCodeFixTests.cs
@@ -260,7 +260,7 @@ public void VerifyAreEqualFixWhenWithMessageAndArgsArray()
public void Test(object actual, object expected)
{
object[] args = { expected, actual };
- ClassicAssert.AreEqual(expected, actual, ""Expected: {0} Got: {1}"", args);
+ ↓ClassicAssert.AreEqual(expected, actual, ""Expected: {0} Got: {1}"", args);
}");
var fixedCode = TestUtility.WrapMethodInClassNamespaceAndAddUsings(@"
[TestCase(3.0, 3)]
@@ -279,7 +279,7 @@ public void VerifyAreEqualFixWhenWithMessageVariable()
[TestCase(3.0, 3)]
public void Test(object actual, object expected)
{
- ClassicAssert.AreEqual(expected, actual, GetLocalizedFormatSpecification(), expected, actual);
+ ↓ClassicAssert.AreEqual(expected, actual, GetLocalizedFormatSpecification(), expected, actual);
}
private static string GetLocalizedFormatSpecification() => ""Expected: {0} Got: {1}"";
");
diff --git a/src/nunit.analyzers/ClassicModelAssertUsage/ClassicModelAssertUsageCodeFix.cs b/src/nunit.analyzers/ClassicModelAssertUsage/ClassicModelAssertUsageCodeFix.cs
index af3a2ef8..58b12827 100644
--- a/src/nunit.analyzers/ClassicModelAssertUsage/ClassicModelAssertUsageCodeFix.cs
+++ b/src/nunit.analyzers/ClassicModelAssertUsage/ClassicModelAssertUsageCodeFix.cs
@@ -74,7 +74,7 @@ public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
bool argsIsArray = !string.IsNullOrEmpty(diagnostic.Properties[AnalyzerPropertyKeys.ArgsIsArray]);
argumentNamesToArguments.TryGetValue(NUnitFrameworkConstants.NameOfMessageParameter, out ArgumentSyntax? messageArgument);
- if (CodeFixHelper.GetInterpolatedMessageArgumentOrDefault(false, argsIsArray, messageArgument, args) is ArgumentSyntax interpolatedMessageArgument)
+ if (CodeFixHelper.GetInterpolatedMessageArgumentOrDefault(messageArgument, args, unconditional: false, argsIsArray) is ArgumentSyntax interpolatedMessageArgument)
newArguments.Add(interpolatedMessageArgument);
var newArgumentsList = invocationNode.ArgumentList.WithArguments(newArguments);
diff --git a/src/nunit.analyzers/Helpers/CodeFixHelper.cs b/src/nunit.analyzers/Helpers/CodeFixHelper.cs
index 6cf8bb9f..ad3f71c8 100644
--- a/src/nunit.analyzers/Helpers/CodeFixHelper.cs
+++ b/src/nunit.analyzers/Helpers/CodeFixHelper.cs
@@ -38,13 +38,13 @@ internal static class CodeFixHelper
///
/// This is assumed to be arguments for an 'Assert.That(actual, constraint, "...: {0} - {1}", param0, param1)`
/// which needs converting into 'Assert.That(actual, constraint, $"...: {param0} - {param1}").
- /// Unless we cannot, in which case we create 'string.Format(specification, args)'.
+ /// Unless we cannot, in which case we create '() => string.Format(specification, args)'.
///
- /// If the message is not conditional on the test outcome.
- /// The params args is passed as an array iso individual parameters.
/// The argument that corresponds to the composite format string.
/// The list of arguments that correspond to format items.
- public static ArgumentSyntax? GetInterpolatedMessageArgumentOrDefault(bool unconditional, bool argsIsArray, ArgumentSyntax? messageArgument, List args)
+ /// If the message is not conditional on the test outcome.
+ /// The params args is passed as an array instead of individual parameters.
+ public static ArgumentSyntax? GetInterpolatedMessageArgumentOrDefault(ArgumentSyntax? messageArgument, List args, bool unconditional, bool argsIsArray)
{
if (messageArgument is null)
return null;
@@ -86,15 +86,7 @@ internal static class CodeFixHelper
.WithArgumentList(SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(
args.Select(x => x.WithNameColon(null)).Prepend(messageArgument))));
- if (unconditional)
- {
- return SyntaxFactory.Argument(stringFormat);
- }
- else
- {
- var stringFormatLambda = SyntaxFactory.ParenthesizedLambdaExpression(stringFormat);
- return SyntaxFactory.Argument(stringFormatLambda);
- }
+ return SyntaxFactory.Argument(unconditional ? stringFormat : SyntaxFactory.ParenthesizedLambdaExpression(stringFormat));
}
var formatSpecification = literalExpression.Token.ValueText;
@@ -114,17 +106,17 @@ internal static class CodeFixHelper
///
/// The arguments passed to the 'Assert' method.
/// The argument needed for the actual method, any more are assumed messages.
- public static void UpdateStringFormatToFormattableString(bool argsIsArray, List arguments, int minimumNumberOfArguments)
+ public static void UpdateStringFormatToFormattableString(List arguments, int minimumNumberOfArguments, bool argsIsArray)
{
// If only 1 extra argument is passed, it must be a non-formattable message.
if (arguments.Count <= minimumNumberOfArguments + 1)
return;
ArgumentSyntax? message = GetInterpolatedMessageArgumentOrDefault(
- minimumNumberOfArguments == 0,
- argsIsArray,
arguments[minimumNumberOfArguments],
- arguments.Skip(minimumNumberOfArguments + 1).ToList());
+ arguments.Skip(minimumNumberOfArguments + 1).ToList(),
+ unconditional: minimumNumberOfArguments == 0,
+ argsIsArray);
var nextArgument = minimumNumberOfArguments;
if (message is not null)
diff --git a/src/nunit.analyzers/Helpers/DiagnosticsHelper.cs b/src/nunit.analyzers/Helpers/DiagnosticsHelper.cs
index b2c2b910..93f105a9 100644
--- a/src/nunit.analyzers/Helpers/DiagnosticsHelper.cs
+++ b/src/nunit.analyzers/Helpers/DiagnosticsHelper.cs
@@ -9,7 +9,7 @@ internal static class DiagnosticsHelper
{
public static bool LastArgumentIsNonParamsArray(ImmutableArray arguments)
{
- // Find out of the 'params' argument is an existing array and not one created from a params creation.
+ // Find out if the 'params' argument is an existing array and not one created from a params creation.
return arguments[arguments.Length - 1].ArgumentKind != ArgumentKind.ParamArray;
}
diff --git a/src/nunit.analyzers/UpdateStringFormatToInterpolatableString/UpdateStringFormatToInterpolatableStringAnalyzer.cs b/src/nunit.analyzers/UpdateStringFormatToInterpolatableString/UpdateStringFormatToInterpolatableStringAnalyzer.cs
index 3935ecfd..1bdff41b 100644
--- a/src/nunit.analyzers/UpdateStringFormatToInterpolatableString/UpdateStringFormatToInterpolatableStringAnalyzer.cs
+++ b/src/nunit.analyzers/UpdateStringFormatToInterpolatableString/UpdateStringFormatToInterpolatableStringAnalyzer.cs
@@ -123,7 +123,7 @@ private static void AnalyzeNUnit4AssertInvocation(OperationAnalysisContext conte
// The argument after the message is explicitly specified
// Most likely the user thought it was using a format specification with a parameter.
// Or it copied code from some NUnit 3.x source into an NUNit 4 project.
- ReportDiagnostic(context, assertOperation, methodName, formatParameterIndex, false);
+ ReportDiagnostic(context, assertOperation, methodName, formatParameterIndex, argsIsArray: false);
}
}
diff --git a/src/nunit.analyzers/UpdateStringFormatToInterpolatableString/UpdateStringFormatToInterpolatableStringCodeFix.cs b/src/nunit.analyzers/UpdateStringFormatToInterpolatableString/UpdateStringFormatToInterpolatableStringCodeFix.cs
index aff0d62b..19cab7da 100644
--- a/src/nunit.analyzers/UpdateStringFormatToInterpolatableString/UpdateStringFormatToInterpolatableStringCodeFix.cs
+++ b/src/nunit.analyzers/UpdateStringFormatToInterpolatableString/UpdateStringFormatToInterpolatableStringCodeFix.cs
@@ -53,7 +53,7 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
var minimumNumberOfArguments = int.Parse(diagnostic.Properties[AnalyzerPropertyKeys.MinimumNumberOfArguments]!, CultureInfo.InvariantCulture);
bool argsIsArray = !string.IsNullOrEmpty(diagnostic.Properties[AnalyzerPropertyKeys.ArgsIsArray]);
- CodeFixHelper.UpdateStringFormatToFormattableString(argsIsArray, arguments, minimumNumberOfArguments);
+ CodeFixHelper.UpdateStringFormatToFormattableString(arguments, minimumNumberOfArguments, argsIsArray);
var newArgumentsList = invocationNode.ArgumentList.WithArguments(arguments);
var newInvocationNode = invocationNode.WithArgumentList(newArgumentsList);