Skip to content

Commit fcc8f10

Browse files
authored
Modify LSP folding ranges to account for AutoCollapse (#79551)
* Modify LSP folding ranges to account for AutoCollapse VS editor uses VSFoldingRangeKind.Implementation to determine which regions need to be collapsed during it's CollapseToDefinitions implementation (https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_git/VSEditor?path=/src/Editor/VisualStudio/Impl/ViewAdapter/IOleCommandTarget.cs&version=GBmain&line=2454&lineEnd=2455&lineStartColumn=1&lineEndColumn=1&lineStyle=plain&_a=contents) This commit ensures that we set this flag when our BlockSpan.AutoCollapse flag is set (which indicates that it should be collapsed when Collapse to Definitions is invoked). https://github.com/dotnet/roslyn/blob/5f51f252332bd2bff80831c2c95f119aab9bb768/src/Features/Core/Portable/Structure/BlockSpan.cs#L64 Addresses the LSP C# equivalent of https://developercommunity.visualstudio.com/t/Blazor:-Ctrl--M-O-not-working-for-ra/10857833#T-ND10941241
1 parent a3227c6 commit fcc8f10

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/LanguageServer/Protocol/Handler/FoldingRanges/FoldingRangesHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ private static FoldingRange[] GetFoldingRanges(BlockStructure blockStructure, So
111111
BlockTypes.Imports => FoldingRangeKind.Imports,
112112
BlockTypes.PreprocessorRegion => FoldingRangeKind.Region,
113113
BlockTypes.Member => VSFoldingRangeKind.Implementation,
114-
_ => null,
114+
_ => span.AutoCollapse ? VSFoldingRangeKind.Implementation : null,
115115
};
116116

117117
foldingRanges.Add(new FoldingRange()

src/LanguageServer/ProtocolUnitTests/FoldingRanges/FoldingRangesTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,24 @@ public void M(){|implementation:
5353
}|}
5454
""");
5555

56+
[Theory, CombinatorialData]
57+
public Task TestGetFoldingRangeAsync_AutoCollapse(bool mutatingLspWorkspace)
58+
=> AssertFoldingRanges(mutatingLspWorkspace, """
59+
class C{|foldingRange:
60+
{
61+
private Action<int> Foo(){|implementation: => i =>{|foldingRange:
62+
{
63+
};|}|}
64+
}|}
65+
""");
66+
5667
private async Task AssertFoldingRanges(bool mutatingLspWorkspace, string markup, string collapsedText = null)
5768
{
5869
var testLspServer = await CreateTestLspServerAsync(markup, mutatingLspWorkspace);
5970
var expected = testLspServer.GetLocations()
6071
.SelectMany(kvp => kvp.Value.Select(location => CreateFoldingRange(kvp.Key, location.Range, collapsedText ?? "...")))
6172
.OrderByDescending(range => range.StartLine)
73+
.ThenByDescending(range => range.StartCharacter)
6274
.ToArray();
6375

6476
var results = await RunGetFoldingRangeAsync(testLspServer);

0 commit comments

Comments
 (0)