Skip to content

Commit 95c5418

Browse files
Fixed issue in when partial item handler would not return results correctly (#275)
* Re-enabled the dap standard tests * Fixed an issue where a method implemented using partial items would not work correctly when called without a progress token * Revert "Re-enabled the dap standard tests" This reverts commit a178545.
1 parent 8f50206 commit 95c5418

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

src/Protocol/DelegatingHandlers.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Reactive.Linq;
44
using System.Reactive.Subjects;
@@ -377,7 +377,7 @@ async Task<TResponse> IRequestHandler<TItem, TResponse>.Handle(TItem request,
377377
CancellationToken cancellationToken)
378378
{
379379
var observer = _progressManager.For(request, cancellationToken);
380-
if (observer != null)
380+
if (observer != ProgressObserver<TItem>.Noop)
381381
{
382382
_handler(request, observer, _capability, cancellationToken);
383383
await observer;
@@ -435,7 +435,7 @@ public PartialResult(Guid id, Action<TItem, IObserver<TItem>, CancellationToken>
435435
async Task<TResponse> IRequestHandler<TItem, TResponse>.Handle(TItem request, CancellationToken cancellationToken)
436436
{
437437
var observer = _progressManager.For(request, cancellationToken);
438-
if (observer != null)
438+
if (observer != ProgressObserver<TItem>.Noop)
439439
{
440440
_handler(request, observer, cancellationToken);
441441
await observer;
@@ -491,7 +491,7 @@ public PartialResultCapability(Guid id, Action<TItem, TCapability, IObserver<TIt
491491
async Task<TResponse> IRequestHandler<TItem, TResponse>.Handle(TItem request, CancellationToken cancellationToken)
492492
{
493493
var observer = _progressManager.For(request, cancellationToken);
494-
if (observer != null)
494+
if (observer != ProgressObserver<TItem>.Noop)
495495
{
496496
_handler(request, _capability, observer, cancellationToken);
497497
await observer;
@@ -547,7 +547,7 @@ public PartialResult(Guid id, Action<TItem, IObserver<TItem>, CancellationToken>
547547
async Task<TResponse> IRequestHandler<TItem, TResponse>.Handle(TItem request, CancellationToken cancellationToken)
548548
{
549549
var observer = _progressManager.For(request, cancellationToken);
550-
if (observer != null)
550+
if (observer != ProgressObserver<TItem>.Noop)
551551
{
552552
_handler(request, observer, cancellationToken);
553553
await observer;
@@ -604,7 +604,7 @@ public PartialResults(Guid id, Action<TParams, IObserver<IEnumerable<TItem>>, TC
604604
async Task<TResponse> IRequestHandler<TParams, TResponse>.Handle(TParams request, CancellationToken cancellationToken)
605605
{
606606
var observer = _progressManager.For(request, cancellationToken);
607-
if (observer != null)
607+
if (observer != ProgressObserver<IEnumerable<TItem>>.Noop)
608608
{
609609
_handler(request, observer, _capability, cancellationToken);
610610
await observer;
@@ -668,7 +668,7 @@ public PartialResults(Guid id, Action<TParams, IObserver<IEnumerable<TItem>>, Ca
668668
async Task<TResponse> IRequestHandler<TParams, TResponse>.Handle(TParams request, CancellationToken cancellationToken)
669669
{
670670
var observer = _progressManager.For(request, cancellationToken);
671-
if (observer != null)
671+
if (observer != ProgressObserver<IEnumerable<TItem>>.Noop)
672672
{
673673
_handler(request, observer, cancellationToken);
674674
await observer;
@@ -729,7 +729,7 @@ public PartialResultsCapability(Guid id, Action<TParams, TCapability, IObserver<
729729
async Task<TResponse> IRequestHandler<TParams, TResponse>.Handle(TParams request, CancellationToken cancellationToken)
730730
{
731731
var observer = _progressManager.For(request, cancellationToken);
732-
if (observer != null)
732+
if (observer != ProgressObserver<IEnumerable<TItem>>.Noop)
733733
{
734734
_handler(request, _capability, observer, cancellationToken);
735735
await observer;
@@ -791,7 +791,7 @@ public PartialResults(Guid id, Action<TParams, IObserver<IEnumerable<TItem>>, Ca
791791
async Task<TResponse> IRequestHandler<TParams, TResponse>.Handle(TParams request, CancellationToken cancellationToken)
792792
{
793793
var observer = _progressManager.For(request, cancellationToken);
794-
if (observer != null)
794+
if (observer != ProgressObserver<IEnumerable<TItem>>.Noop)
795795
{
796796
_handler(request, observer, cancellationToken);
797797
await observer;

test/Lsp.Tests/Integration/PartialItemTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Reactive;
@@ -56,6 +56,19 @@ await client.TextDocument.RequestCodeLens(new CodeLensParams() {
5656
items.Select(z => z.Command.Name).Should().ContainInOrder("CodeLens 1", "CodeLens 2", "CodeLens 3");
5757
}
5858

59+
[Fact]
60+
public async Task Should_Behave_Like_An_Observable_Without_Progress_Support()
61+
{
62+
var (client, server) = await Initialize(ConfigureClient, ConfigureServerWithDelegateCodeLens);
63+
64+
var response = await client.SendRequest(new CodeLensParams() {
65+
TextDocument = new TextDocumentIdentifier(@"c:\test.cs")
66+
}, CancellationToken);
67+
68+
response.Should().HaveCount(3);
69+
response.Select(z => z.Command.Name).Should().ContainInOrder("CodeLens 1", "CodeLens 2", "CodeLens 3");
70+
}
71+
5972
[Fact]
6073
public async Task Should_Behave_Like_An_Observable_With_WorkDone()
6174
{

0 commit comments

Comments
 (0)