Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 47 additions & 8 deletions Src/CSharpier.Core/CSharp/SyntaxPrinter/UsingDirectives.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ or SyntaxKind.UndefDirectiveTrivia
}
}

if (Token.HasLeadingCommentMatching(usings[0], CSharpierIgnore.IgnoreStartRegex))
{
initialComments.Clear();
}

docs.Add(Token.PrintLeadingTrivia([.. initialComments], context));
if (keepUsingsUntilEndIf)
{
Expand All @@ -94,6 +99,7 @@ or SyntaxKind.UndefDirectiveTrivia
}

var isFirst = true;
var prevShouldFormat = true;
var index = 0;
var reorderedDirectives = false;
foreach (var groupOfUsingData in GroupUsings(usingList, [.. triviaWithinIf], context))
Expand All @@ -102,10 +108,15 @@ or SyntaxKind.UndefDirectiveTrivia
{
if (!isFirst)
{
docs.Add(Doc.HardLine);
if (usingData.ShouldFormat || prevShouldFormat)
{
docs.Add(Doc.HardLine);
}
}

if (usingData.LeadingTrivia != Doc.Null)
prevShouldFormat = usingData.ShouldFormat;

if (usingData.LeadingTrivia != Doc.Null && usingData.ShouldFormat)
{
docs.Add(usingData.LeadingTrivia);
}
Expand All @@ -117,7 +128,11 @@ or SyntaxKind.UndefDirectiveTrivia
}

index++;
docs.Add(UsingDirective.Print(usingData.Using, context, printExtraLines));
docs.Add(
usingData.ShouldFormat
? UsingDirective.Print(usingData.Using, context, printExtraLines)
: CSharpierIgnore.PrintWithoutFormatting(usingData.Using, context)
);
}

isFirst = false;
Expand Down Expand Up @@ -159,10 +174,23 @@ PrintingContext context
var directiveGroup = new List<UsingData>();
var ifCount = 0;
var isFirst = true;
var shouldFormat = true;

foreach (var usingDirective in usings)
{
var openIf = ifCount > 0;
var openIfOrIgnore = ifCount > 0;
if (Token.HasLeadingCommentMatching(usingDirective, CSharpierIgnore.IgnoreEndRegex))
{
openIfOrIgnore = true;
shouldFormat = true;
}
else if (
Token.HasLeadingCommentMatching(usingDirective, CSharpierIgnore.IgnoreStartRegex)
)
{
shouldFormat = false;
}

foreach (var directive in usingDirective.GetLeadingTrivia().Where(o => o.IsDirective))
{
if (directive.RawSyntaxKind() is SyntaxKind.IfDirectiveTrivia)
Expand All @@ -182,25 +210,35 @@ PrintingContext context
{
Using = usingDirective,
LeadingTrivia = PrintLeadingTrivia(usingDirective),
ShouldFormat = shouldFormat,
}
);
}
else
{
if (openIf)
if (openIfOrIgnore)
{
directiveGroup.Add(
new UsingData { LeadingTrivia = PrintLeadingTrivia(usingDirective) }
new UsingData
{
LeadingTrivia = PrintLeadingTrivia(usingDirective),
ShouldFormat = shouldFormat,
}
);
}

var usingData = new UsingData
{
Using = usingDirective,
LeadingTrivia = !openIf ? PrintLeadingTrivia(usingDirective) : Doc.Null,
LeadingTrivia = !openIfOrIgnore ? PrintLeadingTrivia(usingDirective) : Doc.Null,
ShouldFormat = shouldFormat,
};

if (usingDirective.GlobalKeyword.RawSyntaxKind() != SyntaxKind.None)
if (!shouldFormat)
{
directiveGroup.Add(usingData);
}
else if (usingDirective.GlobalKeyword.RawSyntaxKind() != SyntaxKind.None)
{
if (usingDirective.Alias is not null)
{
Expand Down Expand Up @@ -274,6 +312,7 @@ private class UsingData
{
public Doc LeadingTrivia { get; init; } = Doc.Null;
public UsingDirectiveSyntax? Using { get; init; }
public required bool ShouldFormat { get; init; } = true;
}

private static bool IsSystemName(NameSyntax value)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// csharpier-ignore-start

using B;

using A;

// csharpier-ignore-end
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// csharpier-ignore-start

using B;

using A;

// csharpier-ignore-end
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using C;
using D;

// csharpier-ignore-start

using B;

using A;

// csharpier-ignore-end
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using D;
using C;

// csharpier-ignore-start

using B;

using A;

// csharpier-ignore-end
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using C;
using D;
// csharpier-ignore-start

using B;

using A;

// csharpier-ignore-end
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// csharpier-ignore-start

using B;

using A;

// csharpier-ignore-end
using D;
using C;
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using C;
using D;
// csharpier-ignore-start

using B;

using A;

// csharpier-ignore-end





// csharpier-ignore-start

using F;

using E;

// csharpier-ignore-end
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// csharpier-ignore-start

using B;

using A;

// csharpier-ignore-end
using D;
using C;




// csharpier-ignore-start

using F;

using E;

// csharpier-ignore-end

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using C;
using D;
// csharpier-ignore-start
#if BUILD_MSI_TASKS


using System;
using Microsoft.
Build.Framework;


#endif

// csharpier-ignore-end

namespace RepoTasks;

class ClassName { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using C;
// csharpier-ignore-start
#if BUILD_MSI_TASKS


using System;
using Microsoft.
Build.Framework;


#endif

// csharpier-ignore-end
using D;
namespace RepoTasks;

class ClassName { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using C;
using D;
// csharpier-ignore-start
#if BUILD_MSI_TASKS


using System;
using Microsoft.
Build.Framework;

// csharpier-ignore-end

using B;
using A;
#endif



namespace RepoTasks;

class ClassName { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using C;
// csharpier-ignore-start
#if BUILD_MSI_TASKS


using System;
using Microsoft.
Build.Framework;

// csharpier-ignore-end


using B;
using A;
#endif

using D;
namespace RepoTasks;

class ClassName { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using C;
using D;
#if BUILD_MSI_TASKS

using System;
using Microsoft.Build.Framework;
// csharpier-ignore-start


using B;
using A;

// csharpier-ignore-end
#endif



namespace RepoTasks;

class ClassName { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using C;
#if BUILD_MSI_TASKS


using System;
using Microsoft.
Build.Framework;
// csharpier-ignore-start


using B;
using A;
// csharpier-ignore-end
#endif

using D;
namespace RepoTasks;

class ClassName { }
Loading