protected override ExpressionSyntax GetNewExpression(ExpressionSyntax expression, FluentAssertionsDiagnosticProperties properties) { if (properties.VisitorName == nameof(DictionaryShouldContainPairAnalyzer.ShouldContainKeyAndContainValueSyntaxVisitor)) { var renameKeyArguments = NodeReplacement.RenameAndExtractArguments("ContainKey", "Contain"); var removeValueArguments = NodeReplacement.RemoveAndExtractArguments("ContainValue"); var newExpression = GetNewExpression(expression, NodeReplacement.RemoveMethodBefore("ContainValue"), renameKeyArguments, removeValueArguments); var newArguments = MergeContainKeyAndContainValueArguments(renameKeyArguments.Arguments, removeValueArguments.Arguments); return(GetNewExpression(newExpression, NodeReplacement.WithArguments("Contain", newArguments))); } else if (properties.VisitorName == nameof(DictionaryShouldContainPairAnalyzer.ShouldContainValueAndContainKeySyntaxVisitor)) { var removeKeyArguments = NodeReplacement.RemoveAndExtractArguments("ContainKey"); var renameValueArguments = NodeReplacement.RenameAndExtractArguments("ContainValue", "Contain"); var newExpression = GetNewExpression(expression, NodeReplacement.RemoveMethodBefore("ContainKey"), removeKeyArguments, renameValueArguments); var newArguments = MergeContainKeyAndContainValueArguments(removeKeyArguments.Arguments, renameValueArguments.Arguments); return(GetNewExpression(newExpression, NodeReplacement.WithArguments("Contain", newArguments))); } else { throw new InvalidOperationException($"Invalid visitor name - {properties.VisitorName}"); } }
protected override ExpressionSyntax GetNewExpression(ExpressionSyntax expression, FluentAssertionsDiagnosticProperties properties) { if (properties.VisitorName == nameof(NumericShouldBeInRangeAnalyzer.BeGreaterOrEqualToAndBeLessOrEqualToSyntaxVisitor)) { var removeLess = NodeReplacement.RemoveAndExtractArguments("BeLessOrEqualTo"); var newExpression = GetNewExpression(expression, removeLess); var renameGreater = NodeReplacement.RenameAndExtractArguments("BeGreaterOrEqualTo", "BeInRange"); newExpression = GetNewExpression(newExpression, renameGreater); var arguments = renameGreater.Arguments.InsertRange(1, removeLess.Arguments); return(GetNewExpression(newExpression, NodeReplacement.WithArguments("BeInRange", arguments))); } else if (properties.VisitorName == nameof(NumericShouldBeInRangeAnalyzer.BeLessOrEqualToAndBeGreaterOrEqualToSyntaxVisitor)) { var removeGreater = NodeReplacement.RemoveAndExtractArguments("BeGreaterOrEqualTo"); var newExpression = GetNewExpression(expression, removeGreater); var renameLess = NodeReplacement.RenameAndExtractArguments("BeLessOrEqualTo", "BeInRange"); newExpression = GetNewExpression(newExpression, renameLess); var arguments = removeGreater.Arguments.InsertRange(1, renameLess.Arguments); return(GetNewExpression(newExpression, NodeReplacement.WithArguments("BeInRange", arguments))); } throw new System.InvalidOperationException($"Invalid visitor name - {properties.VisitorName}"); }
private ExpressionSyntax ReplaceWithMessage(ExpressionSyntax expression, string whichOrAnd, string renameMethod, string prefix = "", string postfix = "") { var replacements = new[] { NodeReplacement.Remove(whichOrAnd), NodeReplacement.Remove("Message"), NodeReplacement.RemoveOccurrence("Should", occurrence: 2) }; var newExpression = GetNewExpression(expression, replacements); var rename = NodeReplacement.RenameAndExtractArguments(renameMethod, "WithMessage"); newExpression = GetNewExpression(newExpression, rename); ArgumentSyntax newArgument = null; switch (rename.Arguments[0].Expression) { case IdentifierNameSyntax identifier: newArgument = SF.Argument(SF.ParseExpression($"$\"{prefix}{{{identifier.Identifier.Text}}}{postfix}\"")); break; case LiteralExpressionSyntax literal: newArgument = SF.Argument(SF.ParseExpression($"\"{prefix}{literal.Token.ValueText}{postfix}\"")); break; } var replacement = NodeReplacement.WithArguments("WithMessage", rename.Arguments.Replace(rename.Arguments[0], newArgument)); return(GetNewExpression(newExpression, replacement)); }