Exemplo n.º 1
0
        private static Task <Document> CallAnyInsteadOfUsingCountAsync(
            Document document,
            BinaryExpressionSyntax binaryExpression,
            CancellationToken cancellationToken)
        {
            BinaryExpressionInfo binaryExpressionInfo = SyntaxInfo.BinaryExpressionInfo(binaryExpression);

            if (binaryExpressionInfo.Left is not MemberAccessExpressionSyntax memberAccessExpression)
            {
                memberAccessExpression = (MemberAccessExpressionSyntax)binaryExpressionInfo.Right;
            }

            SimpleNameSyntax name = memberAccessExpression.Name;

            ExpressionSyntax newExpression = SimpleMemberInvocationExpression(
                memberAccessExpression.Expression,
                IdentifierName("Any").WithLeadingTrivia(name.GetLeadingTrivia()),
                ArgumentList().WithTrailingTrivia(name.GetTrailingTrivia()));

            if (binaryExpression.IsKind(SyntaxKind.EqualsExpression))
            {
                newExpression = LogicalNotExpression(newExpression.WithoutLeadingTrivia().Parenthesize());
            }

            newExpression = newExpression
                            .WithTriviaFrom(binaryExpression)
                            .WithFormatterAnnotation();

            return(document.ReplaceNodeAsync(binaryExpression, newExpression, cancellationToken));
        }
Exemplo n.º 2
0
 private static SimpleNameSyntax ChangeName(SimpleNameSyntax simpleName, string newName)
 {
     return(simpleName.WithIdentifier(
                Identifier(
                    simpleName.GetLeadingTrivia(),
                    newName,
                    simpleName.GetTrailingTrivia())));
 }
        public override SyntaxNode VisitConditionalAccessExpression(ConditionalAccessExpressionSyntax node)
        {
            ExpressionSyntax whenNotNull = node.WhenNotNull;

            if (whenNotNull?.IsKind(SyntaxKind.MemberBindingExpression) == true)
            {
                var memberBinding = (MemberBindingExpressionSyntax)whenNotNull;

                SimpleNameSyntax name = memberBinding.Name;

                if (name != null &&
                    _textSpans.Contains(name.Span))
                {
                    _textSpans.Remove(node.Span);

                    var expression = (ExpressionSyntax)base.Visit(node.Expression);

                    InvocationExpressionSyntax invocation = InvocationExpression(
                        memberBinding.WithName(IdentifierName(_methodName).WithLeadingTrivia(name.GetLeadingTrivia())),
                        ArgumentList().WithTrailingTrivia(memberBinding.GetTrailingTrivia()));

                    return(node
                           .WithExpression(expression)
                           .WithWhenNotNull(invocation));
                }
            }

            return(base.VisitConditionalAccessExpression(node));
        }