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()); } } } }
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 }