Beispiel #1
0
        /// <inheritdoc />
        public override void VisitIdentifierName(IdentifierNameSyntax node)
        {
            if (node is null)
            {
                throw new System.ArgumentNullException(nameof(node));
            }

            switch (node.Parent)
            {
            case ConditionalAccessExpressionSyntax {
                    Parent: ExpressionStatementSyntax _, WhenNotNull : InvocationExpressionSyntax _
            } :

            case ArgumentSyntax _ :
            case InvocationExpressionSyntax {
                    Parent : ExpressionStatementSyntax _
            } :

            case MemberAccessExpressionSyntax {
                    Expression : { } expression
            } when expression == node :
                if (IsInstanceEvent() &&
                    !Scope.HasLocal(node, node.Identifier.ValueText) &&
                    !Scope.HasParameter(node, node.Identifier.ValueText))
                {
                    this.Update(CodeStyleResult.No);
                }

                break;

            case MemberAccessExpressionSyntax {
                    Expression: ThisExpressionSyntax _, Name : { } name
            } when name == node &&
                IsInstanceEvent() :
                this.Update(CodeStyleResult.Yes);
                break;
            }

            bool IsInstanceEvent()
            {
                return(!node.IsInStaticContext() &&
                       node.TryFirstAncestor(out TypeDeclarationSyntax? containingType) &&
                       containingType.TryFindEvent(node.Identifier.ValueText, out var @event) &&
                       !IsStatic(@event));
        /// <inheritdoc />
        public override void VisitIdentifierName(IdentifierNameSyntax node)
        {
            if (node is null)
            {
                throw new System.ArgumentNullException(nameof(node));
            }

            switch (node.Parent)
            {
            case InvocationExpressionSyntax _:
            case ArgumentSyntax {
                    Parent: ArgumentListSyntax {
                        Parent : InvocationExpressionSyntax invocation
                    }
            }
                when invocation.IsNameOf() :
                if (IsInstanceMethod() &&
                    !Scope.HasLocal(node, node.Identifier.ValueText) &&
                    !Scope.HasParameter(node, node.Identifier.ValueText))
                {
                    this.Update(CodeStyleResult.No);
                }

                break;

            case MemberAccessExpressionSyntax memberAccess when memberAccess.Name == node &&
                memberAccess.Expression.IsKind(SyntaxKind.ThisExpression) &&
                IsInstanceMethod():
                this.Update(CodeStyleResult.Yes);
                break;
            }

            bool IsInstanceMethod()
            {
                return(!node.IsInStaticContext() &&
                       node.TryFirstAncestor(out TypeDeclarationSyntax? containingType) &&
                       containingType.TryFindMethod(node.Identifier.Text, out var method) &&
                       !method.Modifiers.Any(SyntaxKind.StaticKeyword) &&
                       !containingType.TryFindMethod(node.Identifier.Text, x => x.Modifiers.Any(SyntaxKind.StaticKeyword), out _) &&
                       !Scope.HasLocal(node, node.Identifier.ValueText) &&
                       !Scope.HasParameter(node, node.Identifier.ValueText));
            }
        }
Beispiel #3
0
        /// <inheritdoc />
        public override void VisitIdentifierName(IdentifierNameSyntax node)
        {
            if (node is null)
            {
                throw new System.ArgumentNullException(nameof(node));
            }

            switch (node.Parent)
            {
            case AssignmentExpressionSyntax assignment when assignment.Left.Contains(node) &&
                !assignment.Parent.IsKind(SyntaxKind.ObjectInitializerExpression):
            case ArrowExpressionClauseSyntax _:
            case ReturnStatementSyntax _:
            case ArgumentSyntax _:
                if (IsInstanceProperty() &&
                    !Scope.HasLocal(node, node.Identifier.ValueText) &&
                    !Scope.HasParameter(node, node.Identifier.ValueText))
                {
                    this.Update(CodeStyleResult.No);
                }

                break;

            case MemberAccessExpressionSyntax memberAccess when memberAccess.Name == node &&
                memberAccess.Expression.IsKind(SyntaxKind.ThisExpression) &&
                IsInstanceProperty():
                this.Update(CodeStyleResult.Yes);
                break;
            }

            bool IsInstanceProperty()
            {
                return(!node.IsInStaticContext() &&
                       node.TryFirstAncestor(out TypeDeclarationSyntax? containingType) &&
                       containingType.TryFindProperty(node.Identifier.ValueText, out var property) &&
                       !property.Modifiers.Any(SyntaxKind.StaticKeyword) &&
                       !Scope.HasLocal(node, node.Identifier.ValueText) &&
                       !Scope.HasParameter(node, node.Identifier.ValueText));
            }
        }