Skip to content

Commit c9d14da

Browse files
dgounarisjjonescz
andauthored
Fix issue with disappearing newlines after multiline documentation comment (#77521)
* Fix issue with disappearing newlines after multiline documentation comments * Fix formatting issues * Convert LineBreaksAfterLeading to local function * Update function syntax to match conventions Co-authored-by: Jan Jones <jan.jones.cz@gmail.com> * Fix compilation errors --------- Co-authored-by: Jan Jones <jan.jones.cz@gmail.com>
1 parent 3382aa6 commit c9d14da

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public override SyntaxToken VisitToken(SyntaxToken token)
100100
isTrailing: false,
101101
indentAfterLineBreak: NeedsIndentAfterLineBreak(token),
102102
mustHaveSeparator: false,
103-
lineBreaksAfter: 0));
103+
lineBreaksAfter: lineBreaksAfterLeading(token)));
104104

105105
var nextToken = this.GetNextRelevantToken(token);
106106

@@ -118,6 +118,22 @@ public override SyntaxToken VisitToken(SyntaxToken token)
118118
lineBreaksAfter: lineBreaksAfter));
119119

120120
return tk;
121+
122+
static int lineBreaksAfterLeading(SyntaxToken syntaxToken)
123+
{
124+
if (syntaxToken.LeadingTrivia.Count < 2)
125+
{
126+
return 0;
127+
}
128+
129+
if (syntaxToken.LeadingTrivia[^2].IsKind(SyntaxKind.MultiLineDocumentationCommentTrivia) &&
130+
syntaxToken.LeadingTrivia[^1].IsKind(SyntaxKind.EndOfLineTrivia))
131+
{
132+
return 1;
133+
}
134+
135+
return 0;
136+
}
121137
}
122138
finally
123139
{
@@ -1247,7 +1263,7 @@ private static bool EndsInLineBreak(SyntaxTrivia trivia)
12471263
}
12481264
else
12491265
{
1250-
return IsLineBreak(node.GetLastToken());
1266+
return !node.IsKind(SyntaxKind.MultiLineDocumentationCommentTrivia) && IsLineBreak(node.GetLastToken());
12511267
}
12521268
}
12531269

src/Compilers/CSharp/Test/Syntax/Syntax/SyntaxNormalizerTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3790,6 +3790,26 @@ void goo()
37903790
"}");
37913791
}
37923792

3793+
[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/76856")]
3794+
public void TestNormalizeDocumentationMultiLineCommentsWithTrailingNewline()
3795+
{
3796+
TestNormalizeStatement("""
3797+
/**
3798+
*
3799+
* Escape XML special characters
3800+
*/
3801+
private String EscapeXML(String str)
3802+
{
3803+
""", """
3804+
///
3805+
///
3806+
/// Escape XML special characters
3807+
//////
3808+
private String EscapeXML(String str)
3809+
{
3810+
""");
3811+
}
3812+
37933813
[Fact]
37943814
public void TestNormalizeEOL()
37953815
{

0 commit comments

Comments
 (0)