private static void AnalyzePossibleContains(SyntaxNodeAnalysisContext context) { var invocationExpression = (InvocationExpressionSyntax)context.Node; if (invocationExpression is null) { return; } IMethodSymbol methodSymbol = context.SemanticModel.GetExtensionMethodSymbol(invocationExpression); if (methodSymbol is null) { return; } if (!SymbolUtility.IsLinqIEnumerableWithPredicate(methodSymbol, "Any")) { return; } if (invocationExpression.ArgumentList != null) { foreach (var argument in invocationExpression.ArgumentList.Arguments) { // If simple lambda and the left side of a binary expression with == token is an identifier, use contains if (argument.Expression is SimpleLambdaExpressionSyntax simpleLambdaExpression && simpleLambdaExpression.Body is BinaryExpressionSyntax binaryExpression) { if (binaryExpression.OperatorToken.Kind() == SyntaxKind.EqualsEqualsToken) { var parameter = simpleLambdaExpression.Parameter.Identifier; if (binaryExpression.Left is IdentifierNameSyntax leftIdentifier && leftIdentifier.Identifier.ValueText == parameter.ValueText) { context.ReportDiagnostic(Diagnostic.Create(Rule, argument.GetLocation())); } else if (binaryExpression.Right is IdentifierNameSyntax rightIdentifier && rightIdentifier.Identifier.ValueText == parameter.ValueText) { context.ReportDiagnostic(Diagnostic.Create(Rule, argument.GetLocation())); } } } } }