Skip to content

Commit

Permalink
Fix so that empty lines inside of ranged ignores are maintained.
Browse files Browse the repository at this point in the history
closes #742
  • Loading branch information
belav committed Oct 24, 2022
1 parent 509862c commit 3271765
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 21 deletions.
2 changes: 1 addition & 1 deletion Src/CSharpier.Generators/NodePrinterGenerator.sbntxt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ namespace CSharpier.SyntaxPrinter

if (CSharpierIgnore.IsNodeIgnored(syntaxNode))
{
return CSharpierIgnore.PrintWithoutFormatting(syntaxNode);
return CSharpierIgnore.PrintWithoutFormatting(syntaxNode).Trim();
}

context.PrintingDepth++;
Expand Down
40 changes: 40 additions & 0 deletions Src/CSharpier.Tests/FormattingTests/TestFiles/CSharpierIgnore.cst
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,44 @@ public class ClassName2
string keepNewLine;
// csharpier-ignore-end
}

public void KeepLines1()
{
// csharpier-ignore-start
var unformattedWithLine1;

var unformattedWithLine2;
// csharpier-ignore-end
}

public void KeepLines2()
{
// csharpier-ignore-start
string unformattedWithLine1;

string unformattedWithLine2;
// csharpier-ignore-end

string anotherValue;
}
}

public class KeepLines1
{
// csharpier-ignore-start
private string first;

private string second;
// csharpier-ignore-end
}

public class KeepLines2
{
// csharpier-ignore-start
private string first;

private string second;
// csharpier-ignore-end

private string third;
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,44 @@ public class ClassName2
string keepNewLine;
// csharpier-ignore-end
}

public void KeepLines1()
{
// csharpier-ignore-start
var unformattedWithLine1;

var unformattedWithLine2;
// csharpier-ignore-end
}

public void KeepLines2()
{
// csharpier-ignore-start
string unformattedWithLine1;

string unformattedWithLine2;
// csharpier-ignore-end

string anotherValue;
}
}

public class KeepLines1
{
// csharpier-ignore-start
private string first;

private string second;
// csharpier-ignore-end
}

public class KeepLines2
{
// csharpier-ignore-start
private string first;

private string second;
// csharpier-ignore-end

private string third;
}
45 changes: 26 additions & 19 deletions Src/CSharpier/SyntaxPrinter/CSharpierIgnore.cs
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
namespace CSharpier.SyntaxPrinter;

using System.Text;

internal static class CSharpierIgnore
{
public static bool IsNodeIgnored(SyntaxNode syntaxNode)
{
if (
syntaxNode.Parent
is not (
BaseTypeDeclarationSyntax
or BlockSyntax
or CompilationUnitSyntax
or NamespaceDeclarationSyntax
)
)
{
return false;
}

return (Token.HasLeadingComment(syntaxNode, "// csharpier-ignore"));
return syntaxNode.Parent
is BaseTypeDeclarationSyntax
or BlockSyntax
or CompilationUnitSyntax
or NamespaceDeclarationSyntax
&& Token.HasLeadingComment(syntaxNode, "// csharpier-ignore");
}

public static List<Doc> PrintNodesRespectingRangeIgnore<T>(
Expand All @@ -26,29 +20,42 @@ FormattingContext context
) where T : SyntaxNode
{
var statements = new List<Doc>();
var unFormattedCode = new StringBuilder();
var printUnformatted = false;

foreach (var node in list)
{
if (Token.HasLeadingComment(node, "// csharpier-ignore-end"))
{
statements.Add(unFormattedCode.ToString().Trim());
unFormattedCode.Clear();
printUnformatted = false;
}
else if (Token.HasLeadingComment(node, "// csharpier-ignore-start"))
{
printUnformatted = true;
}

statements.Add(
printUnformatted ? PrintWithoutFormatting(node) : Node.Print(node, context)
);
if (printUnformatted)
{
unFormattedCode.Append(PrintWithoutFormatting(node));
}
else
{
statements.Add(Node.Print(node, context));
}
}

if (unFormattedCode.Length > 0)
{
statements.Add(unFormattedCode.ToString().Trim());
}

return statements;
}

public static Doc PrintWithoutFormatting(SyntaxNode syntaxNode)
public static string PrintWithoutFormatting(SyntaxNode syntaxNode)
{
return syntaxNode.GetText().ToString().Trim();
return syntaxNode.GetText().ToString();
}
}
12 changes: 11 additions & 1 deletion Src/CSharpier/SyntaxPrinter/MembersWithForcedLines.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace CSharpier.SyntaxPrinter;

using System.Text;

internal static class MembersWithForcedLines
{
public static List<Doc> Print<T>(
Expand All @@ -11,6 +13,7 @@ FormattingContext context
) where T : MemberDeclarationSyntax
{
var result = new List<Doc> { Doc.HardLine };
var unFormattedCode = new StringBuilder();
var printUnformatted = false;
var lastMemberForcedBlankLine = false;
for (var memberIndex = 0; memberIndex < members.Count; memberIndex++)
Expand All @@ -21,6 +24,8 @@ FormattingContext context
if (Token.HasLeadingComment(member, "// csharpier-ignore-end"))
{
skipAddingLineBecauseIgnoreEnded = true;
result.Add(unFormattedCode.ToString().Trim());
unFormattedCode.Clear();
printUnformatted = false;
}
else if (Token.HasLeadingComment(member, "// csharpier-ignore-start"))
Expand All @@ -35,7 +40,7 @@ FormattingContext context

if (printUnformatted)
{
result.Add(CSharpierIgnore.PrintWithoutFormatting(member));
unFormattedCode.Append(CSharpierIgnore.PrintWithoutFormatting(member));
continue;
}

Expand Down Expand Up @@ -174,6 +179,11 @@ or SyntaxKind.EndRegionDirectiveTrivia
lastMemberForcedBlankLine = blankLineIsForced;
}

if (unFormattedCode.Length > 0)
{
result.Add(unFormattedCode.ToString().Trim());
}

return result;
}
}

0 comments on commit 3271765

Please sign in to comment.