示例#1
0
        private static void AnalyzeAccessorDeclaration(SyntaxNodeAnalysisContext context)
        {
            var accessor = (AccessorDeclarationSyntax)context.Node;

            BlockSyntax block = accessor.Body;

            if (block == null)
            {
                return;
            }

            SyntaxToken openBrace = block.OpenBraceToken;

            if (openBrace.IsMissing)
            {
                return;
            }

            if (DiagnosticRules.FormatAccessorBracesOnSingleLineWhenExpressionIsOnSingleLine.IsEffective(context) &&
                accessor.SyntaxTree.IsMultiLineSpan(TextSpan.FromBounds(accessor.Keyword.SpanStart, accessor.Span.End)) &&
                CanBeMadeSingleLine(accessor))
            {
                DiagnosticHelpers.ReportDiagnostic(
                    context,
                    DiagnosticRules.FormatAccessorBracesOnSingleLineWhenExpressionIsOnSingleLine,
                    accessor);
            }

            AccessorBracesStyle style = context.GetAccessorBracesStyle();

            if (style == AccessorBracesStyle.None)
            {
                return;
            }

            if (accessor.SyntaxTree.IsSingleLineSpan(TextSpan.FromBounds(accessor.Keyword.SpanStart, accessor.Span.End)))
            {
                if (style == AccessorBracesStyle.MultiLine ||
                    !CanBeMadeSingleLine(accessor))
                {
                    DiagnosticHelpers.ReportDiagnostic(
                        context,
                        DiagnosticRules.FormatAccessorBraces,
                        block.OpenBraceToken,
                        "multiple lines");
                }
            }
            else if (style == AccessorBracesStyle.SingleLineWhenExpressionIsOnSingleLine &&
                     CanBeMadeSingleLine(accessor))
            {
                DiagnosticHelpers.ReportDiagnostic(
                    context,
                    DiagnosticRules.FormatAccessorBraces,
                    block.OpenBraceToken,
                    "a single line");
            }
        }