@@ -78,12 +78,38 @@ protected override void HandleXmlElement(SyntaxNodeAnalysisContext context, IEnu
7878 return ;
7979 }
8080
81- var xmlParameterNames = syntaxList
82- . Select ( XmlCommentHelper . GetFirstAttributeOrDefault < XmlNameAttributeSyntax > )
83- . Select ( x => new Tuple < string , Location > ( x ? . Identifier ? . Identifier . ValueText , x ? . Identifier . GetLocation ( ) ) )
84- . ToImmutableArray ( ) ;
81+ var parentParameters = parameterList . Value ;
8582
86- VerifyParameters ( context , parameterList . Value , xmlParameterNames , identifierLocation ) ;
83+ var index = 0 ;
84+ foreach ( var syntax in syntaxList )
85+ {
86+ var nameAttributeSyntax = XmlCommentHelper . GetFirstAttributeOrDefault < XmlNameAttributeSyntax > ( syntax ) ;
87+ var nameAttributeText = nameAttributeSyntax ? . Identifier ? . Identifier . ValueText ;
88+ var location = nameAttributeSyntax ? . Identifier ? . Identifier . GetLocation ( ) ;
89+
90+ // Make sure we ignore violations that should be reported by SA1613 instead.
91+ if ( string . IsNullOrWhiteSpace ( nameAttributeText ) )
92+ {
93+ return ;
94+ }
95+
96+ var parentParameter = parentParameters . FirstOrDefault ( s => s . Identifier . Text == nameAttributeText ) ;
97+ if ( parentParameter == null )
98+ {
99+ context . ReportDiagnostic ( Diagnostic . Create ( MissingParameterDescriptor , location ?? identifierLocation , nameAttributeText ) ) ;
100+ }
101+ else if ( parentParameters . Length <= index || parentParameters [ index ] != parentParameter )
102+ {
103+ context . ReportDiagnostic (
104+ Diagnostic . Create (
105+ OrderDescriptor ,
106+ location ?? identifierLocation ,
107+ nameAttributeText ,
108+ parentParameters . IndexOf ( parentParameter ) + 1 ) ) ;
109+ }
110+
111+ index ++ ;
112+ }
87113 }
88114
89115 /// <inheritdoc/>
@@ -108,41 +134,35 @@ protected override void HandleCompleteDocumentation(SyntaxNodeAnalysisContext co
108134 }
109135
110136 // We are working with an <include> element
111- var xmlParameterNames = completeDocumentation . Nodes ( )
137+ var xmlParamTags = completeDocumentation . Nodes ( )
112138 . OfType < XElement > ( )
113- . Where ( e => e . Name == XmlCommentHelper . ParamXmlTag )
114- . SelectMany ( p => p . Attributes ( ) . Where ( a => a . Name == "name" ) )
115- . Select ( a => new Tuple < string , Location > ( a . Value , null ) )
116- . ToImmutableArray ( ) ;
139+ . Where ( e => e . Name == XmlCommentHelper . ParamXmlTag ) ;
117140
118- VerifyParameters ( context , parameterList . Value , xmlParameterNames , identifierLocation ) ;
119- }
141+ var parentParameters = parameterList . Value ;
120142
121- private static void VerifyParameters ( SyntaxNodeAnalysisContext context , ImmutableArray < ParameterSyntax > parentParameters , ImmutableArray < Tuple < string , Location > > documentationParameters , Location identifierLocation )
122- {
123143 var index = 0 ;
124-
125- foreach ( var documentedParameter in documentationParameters )
144+ foreach ( var paramTag in xmlParamTags )
126145 {
146+ var nameAttributeText = paramTag . Attributes ( ) . FirstOrDefault ( a => a . Name == "name" ) ? . Value ;
147+
127148 // Make sure we ignore violations that should be reported by SA1613 instead.
128- if ( string . IsNullOrWhiteSpace ( documentedParameter . Item1 ) )
149+ if ( string . IsNullOrWhiteSpace ( nameAttributeText ) )
129150 {
130151 return ;
131152 }
132153
133- var parentParameter = parentParameters . FirstOrDefault ( s => s . Identifier . Text == documentedParameter . Item1 ) ;
134-
154+ var parentParameter = parentParameters . FirstOrDefault ( s => s . Identifier . Text == nameAttributeText ) ;
135155 if ( parentParameter == null )
136156 {
137- context . ReportDiagnostic ( Diagnostic . Create ( MissingParameterDescriptor , documentedParameter . Item2 ?? identifierLocation , documentedParameter . Item1 ) ) ;
157+ context . ReportDiagnostic ( Diagnostic . Create ( MissingParameterDescriptor , identifierLocation , nameAttributeText ) ) ;
138158 }
139159 else if ( parentParameters . Length <= index || parentParameters [ index ] != parentParameter )
140160 {
141161 context . ReportDiagnostic (
142162 Diagnostic . Create (
143163 OrderDescriptor ,
144- documentedParameter . Item2 ?? identifierLocation ,
145- documentedParameter . Item1 ,
164+ identifierLocation ,
165+ nameAttributeText ,
146166 parentParameters . IndexOf ( parentParameter ) + 1 ) ) ;
147167 }
148168
0 commit comments