@@ -279,7 +279,7 @@ private IEnumerable<string> Indent(IEnumerable<string> codeLines, bool forceTrai
279279 inProcedure = true ;
280280 }
281281 line . InsideProcedureTypeOrEnum = inProcedure || enumStart ;
282- inProcedure = inProcedure && ! line . IsProcudureEnd && ! line . IsEnumOrTypeEnd ;
282+ inProcedure = inProcedure && ! line . IsProcedureEnd && ! line . IsEnumOrTypeEnd ;
283283 if ( line . IsProcedureStart || line . IsEnumOrTypeStart )
284284 {
285285 indents = 0 ;
@@ -311,6 +311,8 @@ private IEnumerable<string> GenerateCodeLineStrings(IEnumerable<LogicalCodeLine>
311311 var lines = logical . ToArray ( ) ;
312312 var header = true ;
313313 var inEnumType = false ;
314+ var propertyGroupIdentifier = string . Empty ;
315+
314316 for ( var i = 0 ; i < lines . Length ; i ++ )
315317 {
316318 indent . Add ( lines [ i ] ) ;
@@ -328,19 +330,42 @@ private IEnumerable<string> GenerateCodeLineStrings(IEnumerable<LogicalCodeLine>
328330 {
329331 header = false ;
330332 SpaceHeader ( indent , settings ) ;
333+
334+ propertyGroupIdentifier = lines [ i ] . IsPropertyStart
335+ ? ExtractPropertyIdentifier ( lines [ i ] . ToString ( ) )
336+ : string . Empty ;
337+
331338 continue ;
332339 }
333- if ( ! lines [ i ] . IsEnumOrTypeEnd && ! lines [ i ] . IsProcudureEnd )
340+ if ( ! lines [ i ] . IsEnumOrTypeEnd && ! lines [ i ] . IsProcedureEnd )
334341 {
335342 continue ;
336343 }
344+
337345 while ( ++ i < lines . Length && lines [ i ] . IsEmpty ) { }
338346 if ( i != lines . Length )
339347 {
340- if ( settings . LinesBetweenProcedures > 0 )
348+ var linesBetweenProcedures = settings . LinesBetweenProcedures ;
349+
350+ if ( lines [ i ] . IsPropertyStart )
351+ {
352+ var propertyIdentifier = ExtractPropertyIdentifier ( lines [ i ] . ToString ( ) ) ;
353+ if ( propertyIdentifier . Equals ( propertyGroupIdentifier , StringComparison . InvariantCultureIgnoreCase )
354+ && settings . GroupRelatedProperties )
355+ {
356+ linesBetweenProcedures = 0 ;
357+ }
358+ else
359+ {
360+ propertyGroupIdentifier = propertyIdentifier ;
361+ }
362+ }
363+
364+ if ( linesBetweenProcedures > 0 )
341365 {
342- indent . Add ( new LogicalCodeLine ( Enumerable . Repeat ( new AbsoluteCodeLine ( string . Empty , settings ) , settings . LinesBetweenProcedures ) , settings ) ) ;
366+ indent . Add ( new LogicalCodeLine ( Enumerable . Repeat ( new AbsoluteCodeLine ( string . Empty , settings ) , linesBetweenProcedures ) , settings ) ) ;
343367 }
368+
344369 indent . Add ( lines [ i ] ) ;
345370 }
346371 else if ( forceTrailingNewLines && i == lines . Length )
@@ -361,6 +386,12 @@ private IEnumerable<string> GenerateCodeLineStrings(IEnumerable<LogicalCodeLine>
361386 return output ;
362387 }
363388
389+ private static string ExtractPropertyIdentifier ( string line )
390+ {
391+ var declarationElementsStartingAtGetLetOrSet = line . ToString ( ) . Split ( ' ' ) . SkipWhile ( c => ! c . EndsWith ( "et" ) ) . ToArray ( ) ;
392+ return declarationElementsStartingAtGetLetOrSet [ 1 ] . Split ( new string [ ] { "(" } , StringSplitOptions . None ) . FirstOrDefault ( ) ;
393+ }
394+
364395 private static void SpaceHeader ( IList < LogicalCodeLine > header , IIndenterSettings settings )
365396 {
366397 var commentSkipped = false ;
0 commit comments