@@ -53,7 +53,7 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
5353 var syntaxRoot = await context . Document . GetSyntaxRootAsync ( context . CancellationToken ) . ConfigureAwait ( false ) ;
5454 var compilationUnit = ( CompilationUnitSyntax ) syntaxRoot ;
5555
56- foreach ( Diagnostic diagnostic in context . Diagnostics . Where ( d => FixableDiagnostics . Contains ( d . Id ) ) )
56+ foreach ( Diagnostic diagnostic in context . Diagnostics )
5757 {
5858 // do not offer a code fix for SA1200 when there are multiple namespaces in the source file
5959 if ( ( diagnostic . Id == SA1200UsingDirectivesMustBePlacedWithinNamespace . DiagnosticId )
@@ -533,20 +533,50 @@ private List<UsingDirectiveSyntax> GenerateUsings(List<UsingDirectiveSyntax> usi
533533 {
534534 var currentUsing = usingsList [ i ] ;
535535
536- triviaToMove . AddRange ( currentUsing . GetLeadingTrivia ( ) . Where ( tr => tr . IsDirective ) ) ;
536+ triviaToMove . AddRange ( currentUsing . GetLeadingTrivia ( ) . Where ( tr => tr . IsDirective || tr . IsKind ( SyntaxKind . DisabledTextTrivia ) ) ) ;
537537
538538 // preserve leading trivia (excluding directive trivia), indenting each line as appropriate
539539 var newLeadingTrivia = currentUsing
540540 . GetLeadingTrivia ( )
541- . WithoutLeadingWhitespace ( )
542- . Where ( tr => ! tr . IsDirective )
541+ . Where ( tr => ! tr . IsDirective && ! tr . IsKind ( SyntaxKind . DisabledTextTrivia ) )
543542 . ToList ( ) ;
544543
545544 if ( i == 0 )
546545 {
547546 newLeadingTrivia = StripFileHeader ( newLeadingTrivia ) ;
548547 }
549548
549+ // strip any leading whitespace on each line (and also all blank lines)
550+ var k = 0 ;
551+ var startOfLine = true ;
552+ while ( k < newLeadingTrivia . Count )
553+ {
554+ switch ( newLeadingTrivia [ k ] . Kind ( ) )
555+ {
556+ case SyntaxKind . WhitespaceTrivia :
557+ newLeadingTrivia . RemoveAt ( k ) ;
558+ break ;
559+
560+ case SyntaxKind . EndOfLineTrivia :
561+ if ( startOfLine )
562+ {
563+ newLeadingTrivia . RemoveAt ( k ) ;
564+ }
565+ else
566+ {
567+ startOfLine = true ;
568+ k ++ ;
569+ }
570+
571+ break ;
572+
573+ default :
574+ startOfLine = newLeadingTrivia [ k ] . IsDirective ;
575+ k ++ ;
576+ break ;
577+ }
578+ }
579+
550580 for ( var j = newLeadingTrivia . Count - 1 ; j >= 0 ; j -- )
551581 {
552582 if ( newLeadingTrivia [ j ] . IsKind ( SyntaxKind . EndOfLineTrivia ) )
0 commit comments