private static bool IsLastStatementJumpStatement(StatementSyntax statement) { if (statement == null) { return(false); } SyntaxKind kind = statement.Kind(); if (kind == SyntaxKind.Block) { statement = ((BlockSyntax)statement).Statements.LastOrDefault(); if (statement == null) { return(false); } kind = statement.Kind(); } return(kind.IsKind( SyntaxKind.ReturnStatement, SyntaxKind.ContinueStatement, SyntaxKind.BreakStatement, SyntaxKind.ThrowStatement)); }
internal static bool IsNestedMethod(this SyntaxKind kind) { return(kind.IsKind( SyntaxKind.SimpleLambdaExpression, SyntaxKind.ParenthesizedLambdaExpression, SyntaxKind.AnonymousMethodExpression, SyntaxKind.LocalFunctionStatement)); }
internal static bool IsLoop(this SyntaxKind kind) { return(kind.IsKind( SyntaxKind.ForStatement, SyntaxKind.ForEachStatement, SyntaxKind.WhileStatement, SyntaxKind.DoStatement)); }
public static bool CanCreate(SyntaxKind kind) { return(kind.IsKind( SyntaxKind.MethodDeclaration, SyntaxKind.PropertyDeclaration, SyntaxKind.IndexerDeclaration, SyntaxKind.EventDeclaration, SyntaxKind.VariableDeclarator)); }
public static void Analyze(SyntaxNodeAnalysisContext context, MemberInvocationExpression invocation) { InvocationExpressionSyntax invocationExpression = invocation.InvocationExpression; SemanticModel semanticModel = context.SemanticModel; CancellationToken cancellationToken = context.CancellationToken; if (!semanticModel.TryGetExtensionMethodInfo(invocationExpression, out MethodInfo methodInfo, ExtensionMethodKind.Reduced, cancellationToken)) { return; } if (!methodInfo.IsLinqExtensionOfIEnumerableOfTWithoutParameters("Count")) { return; } string propertyName = CSharpUtility.GetCountOrLengthPropertyName(invocation.Expression, semanticModel, cancellationToken); if (propertyName != null) { context.ReportDiagnostic( DiagnosticDescriptors.UseCountOrLengthPropertyInsteadOfCountMethod, Location.Create(context.Node.SyntaxTree, TextSpan.FromBounds(invocation.Name.Span.Start, invocationExpression.Span.End)), ImmutableDictionary.CreateRange(new KeyValuePair <string, string>[] { new KeyValuePair <string, string>("PropertyName", propertyName) }), propertyName); } else { bool isFixable = false; SyntaxNode parent = invocationExpression.Parent; SyntaxKind kind = parent.Kind(); if (kind.IsKind( SyntaxKind.EqualsExpression, SyntaxKind.NotEqualsExpression)) { var equalsExpression = (BinaryExpressionSyntax)parent; if (equalsExpression.Left == invocationExpression) { if (equalsExpression.Right.IsNumericLiteralExpression("0")) { isFixable = true; } } else if (equalsExpression.Left.IsNumericLiteralExpression("0")) { isFixable = true; } } else if (kind.IsKind( SyntaxKind.GreaterThanExpression, SyntaxKind.GreaterThanOrEqualExpression, SyntaxKind.LessThanExpression, SyntaxKind.LessThanOrEqualExpression)) { isFixable = true; } if (isFixable) { context.ReportDiagnostic(DiagnosticDescriptors.UseAnyMethodInsteadOfCountMethod, parent); } } }