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));
        }