diff --git a/src/Protocol/DelegatingHandlers.cs b/src/Protocol/DelegatingHandlers.cs index fd0b8d8d5..3afd72cbe 100644 --- a/src/Protocol/DelegatingHandlers.cs +++ b/src/Protocol/DelegatingHandlers.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Reactive.Linq; using System.Reactive.Subjects; @@ -377,7 +377,7 @@ async Task IRequestHandler.Handle(TItem request, CancellationToken cancellationToken) { var observer = _progressManager.For(request, cancellationToken); - if (observer != null) + if (observer != ProgressObserver.Noop) { _handler(request, observer, _capability, cancellationToken); await observer; @@ -435,7 +435,7 @@ public PartialResult(Guid id, Action, CancellationToken> async Task IRequestHandler.Handle(TItem request, CancellationToken cancellationToken) { var observer = _progressManager.For(request, cancellationToken); - if (observer != null) + if (observer != ProgressObserver.Noop) { _handler(request, observer, cancellationToken); await observer; @@ -491,7 +491,7 @@ public PartialResultCapability(Guid id, Action IRequestHandler.Handle(TItem request, CancellationToken cancellationToken) { var observer = _progressManager.For(request, cancellationToken); - if (observer != null) + if (observer != ProgressObserver.Noop) { _handler(request, _capability, observer, cancellationToken); await observer; @@ -547,7 +547,7 @@ public PartialResult(Guid id, Action, CancellationToken> async Task IRequestHandler.Handle(TItem request, CancellationToken cancellationToken) { var observer = _progressManager.For(request, cancellationToken); - if (observer != null) + if (observer != ProgressObserver.Noop) { _handler(request, observer, cancellationToken); await observer; @@ -604,7 +604,7 @@ public PartialResults(Guid id, Action>, TC async Task IRequestHandler.Handle(TParams request, CancellationToken cancellationToken) { var observer = _progressManager.For(request, cancellationToken); - if (observer != null) + if (observer != ProgressObserver>.Noop) { _handler(request, observer, _capability, cancellationToken); await observer; @@ -668,7 +668,7 @@ public PartialResults(Guid id, Action>, Ca async Task IRequestHandler.Handle(TParams request, CancellationToken cancellationToken) { var observer = _progressManager.For(request, cancellationToken); - if (observer != null) + if (observer != ProgressObserver>.Noop) { _handler(request, observer, cancellationToken); await observer; @@ -729,7 +729,7 @@ public PartialResultsCapability(Guid id, Action IRequestHandler.Handle(TParams request, CancellationToken cancellationToken) { var observer = _progressManager.For(request, cancellationToken); - if (observer != null) + if (observer != ProgressObserver>.Noop) { _handler(request, _capability, observer, cancellationToken); await observer; @@ -791,7 +791,7 @@ public PartialResults(Guid id, Action>, Ca async Task IRequestHandler.Handle(TParams request, CancellationToken cancellationToken) { var observer = _progressManager.For(request, cancellationToken); - if (observer != null) + if (observer != ProgressObserver>.Noop) { _handler(request, observer, cancellationToken); await observer; diff --git a/test/Lsp.Tests/Integration/PartialItemTests.cs b/test/Lsp.Tests/Integration/PartialItemTests.cs index c785561dc..e15c4d252 100644 --- a/test/Lsp.Tests/Integration/PartialItemTests.cs +++ b/test/Lsp.Tests/Integration/PartialItemTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Reactive; @@ -56,6 +56,19 @@ await client.TextDocument.RequestCodeLens(new CodeLensParams() { items.Select(z => z.Command.Name).Should().ContainInOrder("CodeLens 1", "CodeLens 2", "CodeLens 3"); } + [Fact] + public async Task Should_Behave_Like_An_Observable_Without_Progress_Support() + { + var (client, server) = await Initialize(ConfigureClient, ConfigureServerWithDelegateCodeLens); + + var response = await client.SendRequest(new CodeLensParams() { + TextDocument = new TextDocumentIdentifier(@"c:\test.cs") + }, CancellationToken); + + response.Should().HaveCount(3); + response.Select(z => z.Command.Name).Should().ContainInOrder("CodeLens 1", "CodeLens 2", "CodeLens 3"); + } + [Fact] public async Task Should_Behave_Like_An_Observable_With_WorkDone() {