Skip to content
This repository was archived by the owner on Jul 12, 2022. It is now read-only.

Commit 6aa8070

Browse files
committed
Fix multiline copyright header rule
1 parent 32fec62 commit 6aa8070

File tree

4 files changed

+111
-10
lines changed

4 files changed

+111
-10
lines changed

src/Microsoft.DotNet.CodeFormatting.Tests/Rules/CopyrightHeaderRuleTests.cs

+75
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,25 @@ class C
2929

3030
var expected = @"// test
3131
32+
class C
33+
{
34+
}";
35+
Verify(source, expected);
36+
37+
}
38+
39+
[Fact]
40+
public void CSharpSimpleMultiline()
41+
{
42+
_options.CopyrightHeader = ImmutableArray.Create("test1", "test2");
43+
var source = @"
44+
class C
45+
{
46+
}";
47+
48+
var expected = @"// test1
49+
// test2
50+
3251
class C
3352
{
3453
}";
@@ -48,6 +67,62 @@ class C
4867

4968
var expected = @"// test
5069
70+
class C
71+
{
72+
}";
73+
Verify(source, expected);
74+
75+
}
76+
77+
[Fact]
78+
public void CSharpPreserveExistingMultiline()
79+
{
80+
_options.CopyrightHeader = ImmutableArray.Create("test1", "test2");
81+
var source = @"// test1
82+
// test2
83+
84+
class C
85+
{
86+
}";
87+
88+
var expected = @"// test1
89+
// test2
90+
91+
class C
92+
{
93+
}";
94+
Verify(source, expected);
95+
96+
}
97+
98+
[Fact]
99+
public void CSharpPreserveExistingWithCommentMultiline()
100+
{
101+
_options.CopyrightHeader = ImmutableArray.Create("test1", "test2");
102+
var source = @"// test1
103+
// test2
104+
105+
106+
107+
108+
109+
// test3
110+
111+
112+
class C
113+
{
114+
}";
115+
116+
var expected = @"// test1
117+
// test2
118+
119+
120+
121+
122+
123+
// test3
124+
125+
51126
class C
52127
{
53128
}";

src/Microsoft.DotNet.CodeFormatting/Rules/CopyrightHeaderRule.CSharp.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,14 @@ protected override bool IsLineComment(SyntaxTrivia trivia)
3232
return trivia.Kind() == SyntaxKind.SingleLineCommentTrivia;
3333
}
3434

35-
protected override bool IsWhiteSpaceOrNewLine(SyntaxTrivia trivia)
35+
protected override bool IsWhitespace(SyntaxTrivia trivia)
3636
{
37-
return
38-
trivia.Kind() == SyntaxKind.WhitespaceTrivia ||
39-
trivia.Kind() == SyntaxKind.EndOfLineTrivia;
37+
return trivia.Kind() == SyntaxKind.WhitespaceTrivia;
38+
}
39+
40+
protected override bool IsNewLine(SyntaxTrivia trivia)
41+
{
42+
return trivia.Kind() == SyntaxKind.EndOfLineTrivia;
4043
}
4144

4245
protected override SyntaxTrivia CreateLineComment(string commentText)

src/Microsoft.DotNet.CodeFormatting/Rules/CopyrightHeaderRule.VisualBasic.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,14 @@ protected override bool IsLineComment(SyntaxTrivia trivia)
3131
return trivia.Kind() == SyntaxKind.CommentTrivia;
3232
}
3333

34-
protected override bool IsWhiteSpaceOrNewLine(SyntaxTrivia trivia)
34+
protected override bool IsWhitespace(SyntaxTrivia trivia)
3535
{
36-
return
37-
trivia.Kind() == SyntaxKind.WhitespaceTrivia ||
38-
trivia.Kind() == SyntaxKind.EndOfLineTrivia;
36+
return trivia.Kind() == SyntaxKind.WhitespaceTrivia;
37+
}
38+
39+
protected override bool IsNewLine(SyntaxTrivia trivia)
40+
{
41+
return trivia.Kind() == SyntaxKind.EndOfLineTrivia;
3942
}
4043

4144
protected override SyntaxTrivia CreateLineComment(string commentText)

src/Microsoft.DotNet.CodeFormatting/Rules/CopyrightHeaderRule.cs

+22-2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ private List<string> GetExistingHeader(SyntaxTriviaList triviaList)
7979
{
8080
headerList.Add(GetCommentText(triviaList[i].ToFullString()));
8181
i++;
82+
MoveToNextLineOrTrivia(triviaList, ref i);
8283
}
8384

8485
return headerList;
@@ -113,7 +114,25 @@ private SyntaxTriviaList RemoveExistingHeader(SyntaxTriviaList oldList)
113114

114115
private void MovePastBlankLines(SyntaxTriviaList list, ref int index)
115116
{
116-
while (index < list.Count && IsWhiteSpaceOrNewLine(list[index]))
117+
while (index < list.Count && (IsWhitespace(list[index]) || IsNewLine(list[index])))
118+
{
119+
index++;
120+
}
121+
}
122+
123+
private void MoveToNextLineOrTrivia(SyntaxTriviaList list, ref int index)
124+
{
125+
MovePastWhitespaces(list, ref index);
126+
127+
if (index < list.Count && IsNewLine(list[index]))
128+
{
129+
index++;
130+
}
131+
}
132+
133+
private void MovePastWhitespaces(SyntaxTriviaList list, ref int index)
134+
{
135+
while (index < list.Count && IsWhitespace(list[index]))
117136
{
118137
index++;
119138
}
@@ -123,7 +142,8 @@ private void MovePastBlankLines(SyntaxTriviaList list, ref int index)
123142

124143
protected abstract bool IsLineComment(SyntaxTrivia trivia);
125144

126-
protected abstract bool IsWhiteSpaceOrNewLine(SyntaxTrivia trivia);
145+
protected abstract bool IsWhitespace(SyntaxTrivia trivia);
146+
protected abstract bool IsNewLine(SyntaxTrivia trivia);
127147

128148
protected abstract SyntaxTrivia CreateLineComment(string commentText);
129149

0 commit comments

Comments
 (0)