Esempio n. 1
0
        public static void Analyze(SyntaxNodeAnalysisContext context, AccessorListSyntax accessorList)
        {
            if (accessorList.Accessors.Any(f => f.Body != null))
            {
                if (accessorList.IsSingleLine(includeExteriorTrivia: false))
                {
                    context.ReportDiagnostic(DiagnosticDescriptor, accessorList.GetLocation());
                }
                else
                {
                    foreach (AccessorDeclarationSyntax accessor in accessorList.Accessors)
                    {
                        if (ShouldBeFormatted(accessor))
                        {
                            context.ReportDiagnostic(DiagnosticDescriptor, accessor.GetLocation());
                        }
                    }
                }
            }
            else if (accessorList.IsParentKind(SyntaxKind.PropertyDeclaration) &&
                     accessorList.Accessors.All(f => f.AttributeLists.Count == 0) &&
                     !accessorList.IsSingleLine(includeExteriorTrivia: false))
            {
                var propertyDeclaration = (PropertyDeclarationSyntax)accessorList.Parent;

                if (!propertyDeclaration.Identifier.IsMissing &&
                    !accessorList.CloseBraceToken.IsMissing)
                {
                    TextSpan span = TextSpan.FromBounds(
                        propertyDeclaration.Identifier.Span.End,
                        accessorList.CloseBraceToken.Span.Start);

                    if (propertyDeclaration
                        .DescendantTrivia(span)
                        .All(f => f.IsWhitespaceOrEndOfLineTrivia()))
                    {
                        context.ReportDiagnostic(DiagnosticDescriptor, accessorList.GetLocation());
                    }
                }
            }
        }
Esempio n. 2
0
        private static void ReportDiagnostic(SyntaxNodeAnalysisContext context, AccessorListSyntax accessorList, ExpressionSyntax expression)
        {
            context.ReportDiagnostic(
                DiagnosticDescriptors.UseExpressionBodiedMember,
                accessorList.GetLocation());

            SyntaxNode parent = expression.Parent;

            if (parent.IsKind(SyntaxKind.ReturnStatement))
            {
                context.FadeOutToken(FadeOutDescriptor, ((ReturnStatementSyntax)parent).ReturnKeyword);
            }

            context.FadeOutBraces(FadeOutDescriptor, accessorList);
        }
        private static void Analyze(SyntaxNodeAnalysisContext context)
        {
            PropertyDeclarationSyntax node = (PropertyDeclarationSyntax)context.Node;

            AccessorListSyntax accessors = node.AccessorList;

            if (accessors is null)
            {
                return;
            }

            int getIndex = -1;
            int setIndex = int.MaxValue;

            for (int i = 0; i < accessors.Accessors.Count; i++)
            {
                var accessor = accessors.Accessors[i];

                if (accessor.Keyword.IsKind(SyntaxKind.GetKeyword))
                {
                    getIndex = i;
                    continue;
                }

                // SyntaxKind.InitKeyword doesn't exist in the currently used version of Roslyn (it exists in at least 3.9.0)
                if (accessor.Keyword.IsKind(SyntaxKind.SetKeyword) || accessor.Keyword.Text == "init")
                {
                    setIndex = i;
                    continue;
                }
            }

            if (setIndex < getIndex)
            {
                context.ReportDiagnostic(Diagnostic.Create(Rule, accessors.GetLocation()));
            }


            //get, set
        }