private static void AnalyzeAccessorDeclaration(SyntaxNodeAnalysisContext context) { var accessor = (AccessorDeclarationSyntax)context.Node; BlockSyntax body = accessor.Body; if (body != null) { AnalyzeAccessorDeclarationBlock(context, accessor, body); } else { ArrowExpressionClauseSyntax expressionBody = accessor.ExpressionBody; if (expressionBody?.ContainsDirectives == false) { BodyStyle style = context.GetBodyStyle(); if (style.IsDefault) return; if (style.UseBlock) { ReportDiagnostic(context, expressionBody); return; } if (style.UseBlockWhenExpressionIsMultiLine == true && expressionBody.Expression?.IsMultiLine() == true) { ReportDiagnostic(context, expressionBody); } } } }
private static void AnalyzeIndexerDeclaration(SyntaxNodeAnalysisContext context) { var indexerDeclaration = (IndexerDeclarationSyntax)context.Node; ArrowExpressionClauseSyntax expressionBody = indexerDeclaration.ExpressionBody; if (expressionBody?.ContainsDirectives == false) { BodyStyle style = context.GetBodyStyle(); if (style.IsDefault) return; if (style.UseBlock) { ReportDiagnostic(context, expressionBody); return; } if (style.UseBlockWhenDeclarationIsMultiLine == true && indexerDeclaration.SyntaxTree.IsMultiLineSpan(indexerDeclaration.HeaderSpan())) { ReportDiagnostic(context, expressionBody); return; } if (style.UseBlockWhenExpressionIsMultiLine == true && expressionBody.Expression?.IsMultiLine() == true) { ReportDiagnostic(context, expressionBody); } } }
private static void AnalyzeMethodDeclaration(SyntaxNodeAnalysisContext context) { var methodDeclaration = (MethodDeclarationSyntax)context.Node; BlockSyntax body = methodDeclaration.Body; if (body != null) { if (body.ContainsDirectives) return; BodyStyle style = context.GetBodyStyle(); if (style.IsDefault) return; BlockExpressionAnalysis analysis = BlockExpressionAnalysis.Create(body); if (!analysis.Success) return; if (!style.UseExpression) return; if (style.UseBlockWhenDeclarationIsMultiLine == true && methodDeclaration.SyntaxTree.IsMultiLineSpan(methodDeclaration.HeaderSpan())) { return; } AnalyzeBlock(context, body, analysis, style); } else { ArrowExpressionClauseSyntax expressionBody = methodDeclaration.ExpressionBody; if (expressionBody?.ContainsDirectives == false) { BodyStyle style = context.GetBodyStyle(); if (style.IsDefault) return; if (style.UseBlock) { ReportDiagnostic(context, expressionBody); return; } if (style.UseBlockWhenDeclarationIsMultiLine == true && methodDeclaration.SyntaxTree.IsMultiLineSpan(methodDeclaration.HeaderSpan())) { ReportDiagnostic(context, expressionBody); return; } if (style.UseBlockWhenExpressionIsMultiLine == true && expressionBody.Expression?.IsMultiLine() == true) { ReportDiagnostic(context, expressionBody); } } } }
private static void AnalyzeAccessorDeclarationBlock( SyntaxNodeAnalysisContext context, AccessorDeclarationSyntax accessor, BlockSyntax body) { if (body.ContainsDirectives) return; if (accessor.AttributeLists.Any()) return; BodyStyle style = context.GetBodyStyle(); if (style.IsDefault) return; bool isGetter = accessor.IsKind(SyntaxKind.GetAccessorDeclaration); BlockExpressionAnalysis analysis = BlockExpressionAnalysis.Create(body, allowExpressionStatement: !isGetter); ExpressionSyntax expression = analysis.Expression; if (expression == null) return; if (!style.UseExpression) return; if (style.UseBlockWhenExpressionIsMultiLine == true && expression.IsMultiLine()) { return; } if (isGetter && accessor.Parent is AccessorListSyntax accessorList && accessorList.Accessors.Count == 1) { if (!SyntaxTriviaAnalysis.IsExteriorTriviaEmptyOrWhitespace(accessorList.OpenBraceToken)) return; if (!SyntaxTriviaAnalysis.IsExteriorTriviaEmptyOrWhitespace(accessor.Keyword)) return; if (!SyntaxTriviaAnalysis.IsExteriorTriviaEmptyOrWhitespace(body.OpenBraceToken)) return; if (style.UseBlockWhenDeclarationIsMultiLine == true) { switch (accessorList.Parent.Kind()) { case SyntaxKind.PropertyDeclaration: { if (accessor.SyntaxTree.IsMultiLineSpan(((PropertyDeclarationSyntax)accessorList.Parent).HeaderSpan())) return; break; } case SyntaxKind.IndexerDeclaration: { if (accessor.SyntaxTree.IsMultiLineSpan(((IndexerDeclarationSyntax)accessorList.Parent).HeaderSpan())) return; break; } default: { SyntaxDebug.Fail(accessorList.Parent); break; } } return; } ReportDiagnostic(context, accessorList); return; } if (!accessor.Keyword.TrailingTrivia.IsEmptyOrWhitespace()) return; if (!SyntaxTriviaAnalysis.IsExteriorTriviaEmptyOrWhitespace(body.OpenBraceToken)) return; if (!accessor.Keyword.LeadingTrivia.IsEmptyOrWhitespace()) return; ReportDiagnostic(context, body); }