From 984e2bc4b45bdb03cb6edcc14b17169925c943c8 Mon Sep 17 00:00:00 2001 From: filipw Date: Tue, 4 May 2021 10:49:57 +0200 Subject: [PATCH 1/3] do not return null from BlockStructureService and CodeStructureService --- .../Services/Structure/BlockStructureService.cs | 2 +- .../Services/Structure/CodeStructureService.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OmniSharp.Roslyn.CSharp/Services/Structure/BlockStructureService.cs b/src/OmniSharp.Roslyn.CSharp/Services/Structure/BlockStructureService.cs index ee48b34f46..d5eb963273 100644 --- a/src/OmniSharp.Roslyn.CSharp/Services/Structure/BlockStructureService.cs +++ b/src/OmniSharp.Roslyn.CSharp/Services/Structure/BlockStructureService.cs @@ -56,7 +56,7 @@ public async Task Handle(BlockStructureRequest request) var document = await _workspace.GetDocumentFromFullProjectModelAsync(request.FileName); if (document == null) { - return null; + return new BlockStructureResponse(); } var text = await document.GetTextAsync(); diff --git a/src/OmniSharp.Roslyn.CSharp/Services/Structure/CodeStructureService.cs b/src/OmniSharp.Roslyn.CSharp/Services/Structure/CodeStructureService.cs index e3d0b661e6..99b183998a 100644 --- a/src/OmniSharp.Roslyn.CSharp/Services/Structure/CodeStructureService.cs +++ b/src/OmniSharp.Roslyn.CSharp/Services/Structure/CodeStructureService.cs @@ -36,7 +36,7 @@ public async Task Handle(CodeStructureRequest request) var document = await _workspace.GetDocumentFromFullProjectModelAsync(request.FileName); if (document == null) { - return null; + return new CodeStructureResponse(); } var elements = await GetCodeElementsAsync(document); From c1d56756f19bd435c5ddad9e03c0863b3ed1b1b6 Mon Sep 17 00:00:00 2001 From: filipw Date: Tue, 4 May 2021 10:50:20 +0200 Subject: [PATCH 2/3] added tests --- .../BlockStructureFacts.cs | 15 +++++++++++++++ .../CodeStructureFacts.cs | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs b/tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs index e62b5c15d3..db7cf6acd6 100644 --- a/tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs +++ b/tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs @@ -41,6 +41,21 @@ public async Task UsesRoslynBlockStructureService() Assert.Equal(expected, lineSpans); } + [Fact] + public async Task NonExistingFile() + { + var request = new BlockStructureRequest + { + FileName = "foo.cs" + }; + + var requestHandler = GetRequestHandler(SharedOmniSharpTestHost); + var response = await requestHandler.Handle(request); + + Assert.NotNull(response); + Assert.Null(response.Spans); + } + [Fact] public async Task SupportsRegionBlocks() { diff --git a/tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs b/tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs index 1c2227b6e2..6cb0ff8434 100644 --- a/tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs +++ b/tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs @@ -413,6 +413,21 @@ class C AssertRange(elementC.Children[15], testFile.Content, "nameThis", "name"); } + [Fact] + public async Task NonExistingFile() + { + var request = new CodeStructureRequest + { + FileName = "foo.cs" + }; + + var requestHandler = GetRequestHandler(SharedOmniSharpTestHost); + var response = await requestHandler.Handle(request); + + Assert.NotNull(response); + Assert.Null(response.Elements); + } + private static void AssertRange(CodeElement elementC, TestContent content, string contentSpanName, string elementRangeName) { var span = Assert.Single(content.GetSpans(contentSpanName)); From b41a1bdebb3af7af19523f004898a1774531ac1a Mon Sep 17 00:00:00 2001 From: filipw Date: Tue, 4 May 2021 11:10:37 +0200 Subject: [PATCH 3/3] return empty collections --- .../Services/Structure/BlockStructureService.cs | 2 +- .../Services/Structure/CodeStructureService.cs | 5 +++-- tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs | 5 +++-- tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs | 7 ++++--- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/OmniSharp.Roslyn.CSharp/Services/Structure/BlockStructureService.cs b/src/OmniSharp.Roslyn.CSharp/Services/Structure/BlockStructureService.cs index d5eb963273..7a1d6ebcaf 100644 --- a/src/OmniSharp.Roslyn.CSharp/Services/Structure/BlockStructureService.cs +++ b/src/OmniSharp.Roslyn.CSharp/Services/Structure/BlockStructureService.cs @@ -56,7 +56,7 @@ public async Task Handle(BlockStructureRequest request) var document = await _workspace.GetDocumentFromFullProjectModelAsync(request.FileName); if (document == null) { - return new BlockStructureResponse(); + return new BlockStructureResponse { Spans = Array.Empty() }; } var text = await document.GetTextAsync(); diff --git a/src/OmniSharp.Roslyn.CSharp/Services/Structure/CodeStructureService.cs b/src/OmniSharp.Roslyn.CSharp/Services/Structure/CodeStructureService.cs index 99b183998a..9619f6fe0c 100644 --- a/src/OmniSharp.Roslyn.CSharp/Services/Structure/CodeStructureService.cs +++ b/src/OmniSharp.Roslyn.CSharp/Services/Structure/CodeStructureService.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Collections.Immutable; using System.Composition; using System.Threading.Tasks; @@ -36,7 +37,7 @@ public async Task Handle(CodeStructureRequest request) var document = await _workspace.GetDocumentFromFullProjectModelAsync(request.FileName); if (document == null) { - return new CodeStructureResponse(); + return new CodeStructureResponse { Elements = Array.Empty() }; } var elements = await GetCodeElementsAsync(document); diff --git a/tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs b/tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs index db7cf6acd6..2579e0baba 100644 --- a/tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs +++ b/tests/OmniSharp.Roslyn.CSharp.Tests/BlockStructureFacts.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using System.Threading.Tasks; using OmniSharp.Models.V2; @@ -46,14 +47,14 @@ public async Task NonExistingFile() { var request = new BlockStructureRequest { - FileName = "foo.cs" + FileName = $"{Guid.NewGuid().ToString("N")}.cs" }; var requestHandler = GetRequestHandler(SharedOmniSharpTestHost); var response = await requestHandler.Handle(request); Assert.NotNull(response); - Assert.Null(response.Spans); + Assert.Empty(response.Spans); } [Fact] diff --git a/tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs b/tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs index 6cb0ff8434..92bba01be0 100644 --- a/tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs +++ b/tests/OmniSharp.Roslyn.CSharp.Tests/CodeStructureFacts.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.CodeAnalysis; using OmniSharp.Mef; @@ -418,14 +419,14 @@ public async Task NonExistingFile() { var request = new CodeStructureRequest { - FileName = "foo.cs" + FileName = $"{Guid.NewGuid().ToString("N")}.cs" }; var requestHandler = GetRequestHandler(SharedOmniSharpTestHost); var response = await requestHandler.Handle(request); Assert.NotNull(response); - Assert.Null(response.Elements); + Assert.Empty(response.Elements); } private static void AssertRange(CodeElement elementC, TestContent content, string contentSpanName, string elementRangeName)