@@ -50,39 +50,34 @@ private static void AnalyzeBlock(SyntaxNodeAnalysisContext context, SyntaxList<S
5050 {
5151 foreach ( var variable in localDecl . Declaration . Variables )
5252 {
53- if ( variable . Initializer ? . Value is InvocationExpressionSyntax indexOfCall )
53+ if ( variable . Initializer ? . Value is InvocationExpressionSyntax indexOfCall && IsIndexOfCall ( indexOfCall , context ) )
5454 {
55- if ( IsIndexOfCall ( indexOfCall , context ) )
55+ // Look ahead for Substring call using this variable
56+ var variableName = variable . Identifier . Text ;
57+ if ( FindSubstringUsage ( statements . Skip ( i + 1 ) , variableName , out var substringLocation ) )
5658 {
57- // Look ahead for Substring call using this variable
58- var variableName = variable . Identifier . Text ;
59- if ( FindSubstringUsage ( statements . Skip ( i + 1 ) , variableName , out var substringLocation ) )
60- {
61- var diagnostic = Diagnostic . Create (
62- DiagnosticDescriptors . UseSpanForIndexOfSubstring ,
63- substringLocation ) ;
64- context . ReportDiagnostic ( diagnostic ) ;
65- }
59+ var diagnostic = Diagnostic . Create (
60+ DiagnosticDescriptors . UseSpanForIndexOfSubstring ,
61+ substringLocation ) ;
62+ context . ReportDiagnostic ( diagnostic ) ;
6663 }
6764 }
6865 }
6966 }
7067 // Look for assignment of IndexOf to existing variable
71- else if ( statements [ i ] is ExpressionStatementSyntax exprStmt &&
72- exprStmt . Expression is AssignmentExpressionSyntax assignment &&
73- assignment . Left is IdentifierNameSyntax identifier &&
74- assignment . Right is InvocationExpressionSyntax indexOfCall )
68+ else if ( statements [ i ] is ExpressionStatementSyntax exprStmt
69+ && exprStmt . Expression is AssignmentExpressionSyntax assignment
70+ && assignment . Left is IdentifierNameSyntax identifier
71+ && assignment . Right is InvocationExpressionSyntax indexOfCall
72+ && IsIndexOfCall ( indexOfCall , context ) )
7573 {
76- if ( IsIndexOfCall ( indexOfCall , context ) )
74+ var variableName = identifier . Identifier . Text ;
75+ if ( FindSubstringUsage ( statements . Skip ( i + 1 ) , variableName , out var substringLocation ) )
7776 {
78- var variableName = identifier . Identifier . Text ;
79- if ( FindSubstringUsage ( statements . Skip ( i + 1 ) , variableName , out var substringLocation ) )
80- {
81- var diagnostic = Diagnostic . Create (
82- DiagnosticDescriptors . UseSpanForIndexOfSubstring ,
83- substringLocation ) ;
84- context . ReportDiagnostic ( diagnostic ) ;
85- }
77+ var diagnostic = Diagnostic . Create (
78+ DiagnosticDescriptors . UseSpanForIndexOfSubstring ,
79+ substringLocation ) ;
80+ context . ReportDiagnostic ( diagnostic ) ;
8681 }
8782 }
8883 }
@@ -120,8 +115,7 @@ private static bool FindSubstringUsage(
120115
121116 foreach ( var statement in statements )
122117 {
123- var invocations = statement . DescendantNodes ( ) . OfType < InvocationExpressionSyntax > ( ) ;
124- foreach ( var invocation in invocations )
118+ foreach ( var invocation in statement . DescendantNodes ( ) . OfType < InvocationExpressionSyntax > ( ) )
125119 {
126120 if ( invocation . Expression is MemberAccessExpressionSyntax memberAccess &&
127121 memberAccess . Name . Identifier . Text == "Substring" )
0 commit comments