@@ -50,6 +50,7 @@ CancellationToken cancellationToken
5050 cSharpParseOptions ,
5151 cancellationToken : cancellationToken
5252 ) ;
53+ this . CompareFunc = Compare ;
5354 }
5455
5556 public string CompareSource ( )
@@ -148,14 +149,16 @@ SyntaxNode formattedStart
148149 return Equal ;
149150 }
150151
152+ #pragma warning disable CA1822
151153 private CompareResult CompareLists < T > (
152- IReadOnlyList < T > originalList ,
153- IReadOnlyList < T > formattedList ,
154- Func < T , T , CompareResult > comparer ,
155- Func < T , TextSpan > getSpan ,
154+ T originalList ,
155+ T formattedList ,
156+ Func < SyntaxToken , SyntaxToken , CompareResult > comparer ,
157+ Func < SyntaxToken , TextSpan > getSpan ,
156158 TextSpan originalParentSpan ,
157159 TextSpan newParentSpan
158160 )
161+ where T : IReadOnlyList < SyntaxToken >
159162 {
160163 for ( var x = 0 ; x < originalList . Count || x < formattedList . Count ; x ++ )
161164 {
@@ -169,25 +172,71 @@ TextSpan newParentSpan
169172 return NotEqual ( getSpan ( originalList [ x ] ) , newParentSpan ) ;
170173 }
171174
172- if (
173- originalList [ x ] is SyntaxNode originalNode
174- && formattedList [ x ] is SyntaxNode formattedNode
175- )
175+ var result = comparer ( originalList [ x ] , formattedList [ x ] ) ;
176+ if ( result . IsInvalid )
177+ {
178+ return result ;
179+ }
180+ }
181+
182+ return Equal ;
183+ }
184+ #pragma warning restore CA1822
185+
186+ private CompareResult CompareLists < T > (
187+ T originalList ,
188+ T formattedList ,
189+ Func < SyntaxNode , SyntaxNode , CompareResult > comparer ,
190+ Func < SyntaxNode , TextSpan > getSpan ,
191+ TextSpan originalParentSpan ,
192+ TextSpan newParentSpan
193+ )
194+ where T : IReadOnlyList < SyntaxNode >
195+ {
196+ for ( var x = 0 ; x < originalList . Count || x < formattedList . Count ; x ++ )
197+ {
198+ if ( x == originalList . Count )
199+ {
200+ return NotEqual ( originalParentSpan , getSpan ( formattedList [ x ] ) ) ;
201+ }
202+
203+ if ( x == formattedList . Count )
176204 {
177- this . originalStack . Push ( ( originalNode , originalNode . Parent ) ) ;
178- this . formattedStack . Push ( ( formattedNode , formattedNode . Parent ) ) ;
205+ return NotEqual ( getSpan ( originalList [ x ] ) , newParentSpan ) ;
179206 }
180- else
207+
208+ var originalNode = originalList [ x ] ;
209+ var formattedNode = formattedList [ x ] ;
210+ this . originalStack . Push ( ( originalNode , originalNode . Parent ) ) ;
211+ this . formattedStack . Push ( ( formattedNode , formattedNode . Parent ) ) ;
212+ }
213+
214+ return Equal ;
215+ }
216+
217+ private static SyntaxToken [ ] AllSeparatorsButLast ( in SeparatedSyntaxList < SyntaxNode > list )
218+ {
219+ if ( list . Count <= 1 )
220+ {
221+ return [ ] ;
222+ }
223+
224+ var tokens = new SyntaxToken [ list . Count - 1 ] ;
225+ var tokenIndex = 0 ;
226+
227+ foreach ( var element in list . GetWithSeparators ( ) )
228+ {
229+ if ( element . IsToken )
181230 {
182- var result = comparer ( originalList [ x ] , formattedList [ x ] ) ;
183- if ( result . IsInvalid )
231+ tokens [ tokenIndex ++ ] = element . AsToken ( ) ;
232+ if ( tokenIndex == tokens . Length )
184233 {
185- return result ;
234+ break ;
186235 }
187236 }
188237 }
189238
190- return Equal ;
239+ return tokens ;
191240 }
192241
193242 private static CompareResult NotEqual ( SyntaxNode ? originalNode , SyntaxNode ? formattedNode )
@@ -210,6 +259,8 @@ private static CompareResult NotEqual(TextSpan? originalSpan, TextSpan? formatte
210259 } ;
211260 }
212261
262+ private Func < SyntaxToken , SyntaxToken , CompareResult > CompareFunc { get ; }
263+
213264 private CompareResult Compare ( SyntaxToken originalToken , SyntaxToken formattedToken )
214265 {
215266 return this . Compare ( originalToken , formattedToken , null , null ) ;
0 commit comments