public MethodDeclarationSyntax Transform(MethodDeclarationSyntax node, IExpectedExceptionModel model) { var indentation = Whitespace(new string (' ', 2)); var baseIndentation = node.Body !.GetLeadingTrivia(); var bodyIndentation = baseIndentation.Add(indentation); var assertThatArgsIndentation = bodyIndentation.Add(indentation).Add(indentation); var bodyStatement = node.Body.Statements.Last(); var lambdaExpression = CreateLambdaExpression(bodyStatement); var assertThat = MemberAccess(IdentifierName("Assert"), "That") .WithLeadingTrivia(bodyIndentation); var assertThrowsArgumentList = SeparatedList <ArgumentSyntax> ( NodeOrTokenList( Argument(lambdaExpression.WithLeadingTrivia(assertThatArgsIndentation)), Token(SyntaxKind.CommaToken).WithTrailingTrivia(Whitespace(Formatting.NewLine)), Argument(model.AsConstraintExpression(assertThatArgsIndentation.ToFullString())) )); var assertThatThrows = InvocationExpression( assertThat.WithTrailingTrivia(Whitespace(" ")), ArgumentList( Token(SyntaxKind.OpenParenToken).WithTrailingTrivia(Whitespace(Formatting.NewLine)), assertThrowsArgumentList, Token(SyntaxKind.CloseParenToken))); return(node.WithBody( node.Body.WithStatements( node.Body.Statements.Replace( node.Body.Statements.Last(), ExpressionStatement(assertThatThrows).WithTrailingTrivia(Whitespace(Formatting.NewLine)))))); }
public MethodDeclarationSyntax Transform(MethodDeclarationSyntax node, IExpectedExceptionModel model) { var toRemove = model.GetAttributeSyntax().GetAwaiter().GetResult() ?? throw new ArgumentException($"Unable to get syntax tree of syntax node {nameof(node)}.\r\nNode: ({node.ToString()})."); var newLists = new SyntaxList <AttributeListSyntax> ( node.AttributeLists .Select(list => RemoveFromList(list, toRemove)) .Where(list => list.Attributes.Any())); return(node.WithAttributeLists(newLists)); }