@@ -15,6 +15,8 @@ namespace StyleCop.Analyzers.ReadabilityRules
1515 using Microsoft . CodeAnalysis . CodeFixes ;
1616 using Microsoft . CodeAnalysis . CSharp ;
1717 using Microsoft . CodeAnalysis . CSharp . Syntax ;
18+ using Microsoft . CodeAnalysis . Options ;
19+ using Microsoft . CodeAnalysis . Text ;
1820 using StyleCop . Analyzers . Helpers ;
1921 using StyleCop . Analyzers . Settings . ObjectModel ;
2022
@@ -58,18 +60,20 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
5860 private static async Task < Document > GetTransformedDocumentAsync ( Document document , Diagnostic diagnostic , CancellationToken cancellationToken )
5961 {
6062 var syntaxRoot = await document . GetSyntaxRootAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
63+ var sourceText = await document . GetTextAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
64+ var options = document . Project . Solution . Workspace . Options ;
6165 var settings = SettingsHelper . GetStyleCopSettingsInCodeFix ( document . Project . AnalyzerOptions , syntaxRoot . SyntaxTree , cancellationToken ) ;
6266 var tokensToReplace = new Dictionary < SyntaxToken , SyntaxToken > ( ) ;
6367
64- AddTokensToReplaceToMap ( tokensToReplace , syntaxRoot , diagnostic , settings ) ;
68+ AddTokensToReplaceToMap ( tokensToReplace , syntaxRoot , sourceText , options , diagnostic , settings ) ;
6569
6670 var newSyntaxRoot = syntaxRoot . ReplaceTokens ( tokensToReplace . Keys , ( original , rewritten ) => tokensToReplace [ original ] ) ;
6771 var newDocument = document . WithSyntaxRoot ( newSyntaxRoot . WithoutFormatting ( ) ) ;
6872
6973 return newDocument ;
7074 }
7175
72- private static void AddTokensToReplaceToMap ( Dictionary < SyntaxToken , SyntaxToken > tokensToReplace , SyntaxNode syntaxRoot , Diagnostic diagnostic , StyleCopSettings settings )
76+ private static void AddTokensToReplaceToMap ( Dictionary < SyntaxToken , SyntaxToken > tokensToReplace , SyntaxNode syntaxRoot , SourceText sourceText , OptionSet options , Diagnostic diagnostic , StyleCopSettings settings )
7377 {
7478 var attributeListSyntax = ( AttributeListSyntax ) syntaxRoot . FindNode ( diagnostic . Location . SourceSpan ) ;
7579
@@ -81,9 +85,10 @@ private static void AddTokensToReplaceToMap(Dictionary<SyntaxToken, SyntaxToken>
8185 if ( diagnostic . Properties . ContainsKey ( SA1134AttributesMustNotShareLine . FixWithNewLineBeforeKey ) )
8286 {
8387 var token = attributeListSyntax . OpenBracketToken ;
88+ var endOfLineTrivia = FormattingHelper . GetEndOfLineForCodeFix ( token , sourceText , options ) ;
8489 var prevToken = token . GetPreviousToken ( ) ;
8590
86- tokensToReplace [ prevToken ] = prevToken . WithTrailingTrivia ( prevToken . TrailingTrivia . WithoutTrailingWhitespace ( ) . Add ( SyntaxFactory . CarriageReturnLineFeed ) ) ;
91+ tokensToReplace [ prevToken ] = prevToken . WithTrailingTrivia ( prevToken . TrailingTrivia . WithoutTrailingWhitespace ( ) . Add ( endOfLineTrivia ) ) ;
8792
8893 var newLeadingTrivia = token . LeadingTrivia . Insert ( 0 , indentationTrivia ) ;
8994 tokensToReplace [ token ] = token . WithLeadingTrivia ( newLeadingTrivia ) ;
@@ -92,9 +97,10 @@ private static void AddTokensToReplaceToMap(Dictionary<SyntaxToken, SyntaxToken>
9297 if ( diagnostic . Properties . ContainsKey ( SA1134AttributesMustNotShareLine . FixWithNewLineAfterKey ) )
9398 {
9499 var token = attributeListSyntax . CloseBracketToken ;
100+ var endOfLineTrivia = FormattingHelper . GetEndOfLineForCodeFix ( token , sourceText , options ) ;
95101 var nextToken = token . GetNextToken ( ) ;
96102
97- tokensToReplace [ token ] = token . WithTrailingTrivia ( token . TrailingTrivia . WithoutTrailingWhitespace ( ) . Add ( SyntaxFactory . CarriageReturnLineFeed ) ) ;
103+ tokensToReplace [ token ] = token . WithTrailingTrivia ( token . TrailingTrivia . WithoutTrailingWhitespace ( ) . Add ( endOfLineTrivia ) ) ;
98104
99105 var newLeadingTrivia = nextToken . LeadingTrivia . Insert ( 0 , indentationTrivia ) ;
100106 tokensToReplace [ nextToken ] = nextToken . WithLeadingTrivia ( newLeadingTrivia ) ;
@@ -115,12 +121,14 @@ protected override async Task<SyntaxNode> FixAllInDocumentAsync(FixAllContext fi
115121 }
116122
117123 var syntaxRoot = await document . GetSyntaxRootAsync ( fixAllContext . CancellationToken ) . ConfigureAwait ( false ) ;
124+ var sourceText = await document . GetTextAsync ( fixAllContext . CancellationToken ) . ConfigureAwait ( false ) ;
125+ var options = document . Project . Solution . Workspace . Options ;
118126 var settings = SettingsHelper . GetStyleCopSettingsInCodeFix ( document . Project . AnalyzerOptions , syntaxRoot . SyntaxTree , fixAllContext . CancellationToken ) ;
119127 var tokensToReplace = new Dictionary < SyntaxToken , SyntaxToken > ( ) ;
120128
121129 foreach ( var diagnostic in diagnostics )
122130 {
123- AddTokensToReplaceToMap ( tokensToReplace , syntaxRoot , diagnostic , settings ) ;
131+ AddTokensToReplaceToMap ( tokensToReplace , syntaxRoot , sourceText , options , diagnostic , settings ) ;
124132 }
125133
126134 var newSyntaxRoot = syntaxRoot . ReplaceTokens ( tokensToReplace . Keys , ( original , rewritten ) => tokensToReplace [ original ] ) ;
0 commit comments