Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trim unnessasary leading lines when removing usings #60672

Merged
Merged
Show file tree
Hide file tree
Changes from 2 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
Original file line number Diff line number Diff line change
Expand Up @@ -1984,5 +1984,39 @@ static void Main(string[] args)
LanguageVersion = LanguageVersion.CSharp10,
}.RunAsync();
}

[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryImports)]
[WorkItem(45866, "https://github.com/dotnet/roslyn/issues/45866")]
public async Task TestUsingGroups_DeleteLeadingBlankLinesIfFirstGroupWasDeleted()
{
await new VerifyCS.Test
{
TestCode =
@"[|{|IDE0005:using System;|}

using System.Collections.Generic;|]

class Program
{
static void Main(string[] args)
{
var argList = new List<string>(args);
}
}
",
FixedCode =
@"using System.Collections.Generic;

class Program
{
static void Main(string[] args)
{
var argList = new List<string>(args);
}
}
",
LanguageVersion = LanguageVersion.CSharp9,
}.RunAsync();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1214,5 +1214,29 @@ Imports System
Event E()
End Class|]")
End Function

<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryImports)>
<WorkItem(45866, "https://github.com/dotnet/roslyn/issues/45866")>
Public Async Function TestImportGroup_DeleteLeadingBlankLinesIfFirstGroupWasDeleted() As Task
Await TestInRegularAndScript1Async(
"[|Imports System.Threading.Tasks

Imports System|]

Class C
Function Test()
Console.WriteLine()
End Function
End Class
",
"Imports System

Class C
Function Test()
Console.WriteLine()
End Function
End Class
")
End Function
End Class
End Namespace
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
using System.Linq;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.Formatting;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Roslyn.Utilities;
Expand Down Expand Up @@ -48,6 +47,8 @@ private static void ProcessUsings(
out SyntaxTriviaList finalTrivia)
{
var currentUsings = new List<UsingDirectiveSyntax>(usings);
var onlyDeletedUsingsBefore = true;
DoctorKrolic marked this conversation as resolved.
Show resolved Hide resolved
var passedLeadngTrivia = false;

finalTrivia = default;
for (var i = 0; i < usings.Count; i++)
Expand Down Expand Up @@ -83,13 +84,29 @@ private static void ProcessUsings(
// want to preserve.
currentUsings[nextIndex] = nextUsing.WithLeadingTrivia(leadingTrivia);
}

passedLeadngTrivia = true;
}
else
{
finalTrivia = leadingTrivia;
}
}
}
else
{
if (onlyDeletedUsingsBefore)
{
DoctorKrolic marked this conversation as resolved.
Show resolved Hide resolved
if (i > 0 && !passedLeadngTrivia)
DoctorKrolic marked this conversation as resolved.
Show resolved Hide resolved
{
var currentUsing = currentUsings[i];
var currentUsingLeadingTrivia = currentUsing.GetLeadingTrivia();
currentUsings[i] = currentUsing.WithLeadingTrivia(currentUsingLeadingTrivia.WithoutLeadingBlankLines());
}

onlyDeletedUsingsBefore = false;
}
}
}

finalUsings = currentUsings.WhereNotNull().ToSyntaxList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.RemoveUnnecessaryImports

Private Function ProcessImports(compilationUnit As CompilationUnitSyntax) As CompilationUnitSyntax
Dim oldImports = compilationUnit.Imports.ToList()
Dim onlyDeletedImportsBefore = True
Dim passedLeadingTrivia = False

Dim remainingTrivia As SyntaxTriviaList = Nothing
For i = 0 To oldImports.Count - 1
Expand All @@ -65,6 +67,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.RemoveUnnecessaryImports
' want to preserve.
oldImports(nextIndex) = nextImport.WithLeadingTrivia(leadingTrivia)
End If

passedLeadingTrivia = True
Else
remainingTrivia = leadingTrivia
End If
Expand All @@ -85,6 +89,16 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.RemoveUnnecessaryImports
oldImports(index) = previousImport.WithTrailingTrivia(trailingTrivia)
End If
End If
Else
If onlyDeletedImportsBefore Then
If i > 0 AndAlso Not passedLeadingTrivia Then
Dim currentImport = oldImports(i)
Dim currentImportLeadingTrivia = currentImport.GetLeadingTrivia()
oldImports(i) = currentImport.WithLeadingTrivia(currentImportLeadingTrivia.WithoutLeadingWhitespaceOrEndOfLine())
End If

onlyDeletedImportsBefore = False
End If
End If
Next

Expand Down