Skip to content

Commit c8aba2a

Browse files
Added delegate handlers for all base interfaces
1 parent 705f295 commit c8aba2a

File tree

59 files changed

+2099
-152
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+2099
-152
lines changed

src/Protocol/Client/Client/IRegisterCapabilityHandler.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using OmniSharp.Extensions.Embedded.MediatR;
15
using OmniSharp.Extensions.JsonRpc;
26
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
37

@@ -7,4 +11,29 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Client
711
{
812
[Serial, Method(ClientNames.RegisterCapability)]
913
public interface IRegisterCapabilityHandler : IJsonRpcRequestHandler<RegistrationParams> { }
14+
15+
public abstract class RegisterCapabilityHandler : IRegisterCapabilityHandler
16+
{
17+
public abstract Task<Unit> Handle(RegistrationParams request, CancellationToken cancellationToken);
18+
}
19+
20+
public static class RegisterCapabilityHandlerExtensions
21+
{
22+
public static IDisposable OnRegisterCapability(this ILanguageClientRegistry registry, Func<RegistrationParams, CancellationToken, Task<Unit>> handler)
23+
{
24+
return registry.AddHandlers(new DelegatingHandler(handler));
25+
}
26+
27+
class DelegatingHandler : RegisterCapabilityHandler
28+
{
29+
private readonly Func<RegistrationParams, CancellationToken, Task<Unit>> _handler;
30+
31+
public DelegatingHandler(Func<RegistrationParams, CancellationToken, Task<Unit>> handler)
32+
{
33+
_handler = handler;
34+
}
35+
36+
public override Task<Unit> Handle(RegistrationParams request, CancellationToken cancellationToken) => _handler.Invoke(request, cancellationToken);
37+
}
38+
}
1039
}

src/Protocol/Client/Client/IUnregisterCapabilityHandler.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using OmniSharp.Extensions.Embedded.MediatR;
15
using OmniSharp.Extensions.JsonRpc;
26
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
37

@@ -7,4 +11,29 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Client
711
{
812
[Serial, Method(ClientNames.UnregisterCapability)]
913
public interface IUnregisterCapabilityHandler : IJsonRpcRequestHandler<UnregistrationParams> { }
14+
15+
public abstract class UnregisterCapabilityHandler : IUnregisterCapabilityHandler
16+
{
17+
public abstract Task<Unit> Handle(UnregistrationParams request, CancellationToken cancellationToken);
18+
}
19+
20+
public static class UnregisterCapabilityHandlerExtensions
21+
{
22+
public static IDisposable OnUnregisterCapability(this ILanguageClientRegistry registry, Func<UnregistrationParams, CancellationToken, Task<Unit>> handler)
23+
{
24+
return registry.AddHandlers(new DelegatingHandler(handler));
25+
}
26+
27+
class DelegatingHandler : UnregisterCapabilityHandler
28+
{
29+
private readonly Func<UnregistrationParams, CancellationToken, Task<Unit>> _handler;
30+
31+
public DelegatingHandler(Func<UnregistrationParams, CancellationToken, Task<Unit>> handler)
32+
{
33+
_handler = handler;
34+
}
35+
36+
public override Task<Unit> Handle(UnregistrationParams request, CancellationToken cancellationToken) => _handler.Invoke(request, cancellationToken);
37+
}
38+
}
1039
}
Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,40 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using OmniSharp.Extensions.Embedded.MediatR;
15
using OmniSharp.Extensions.JsonRpc;
26
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
37

48
// ReSharper disable CheckNamespace
59

610
namespace OmniSharp.Extensions.LanguageServer.Protocol.Client
711
{
8-
using static DocumentNames;
9-
[Parallel, Method(PublishDiagnostics)]
12+
13+
[Parallel, Method(DocumentNames.PublishDiagnostics)]
1014
public interface IPublishDiagnosticsHandler : IJsonRpcNotificationHandler<PublishDiagnosticsParams> { }
15+
16+
public abstract class PublishDiagnosticsHandler : IPublishDiagnosticsHandler
17+
{
18+
public abstract Task<Unit> Handle(PublishDiagnosticsParams request, CancellationToken cancellationToken);
19+
}
20+
21+
public static class PublishDiagnosticsHandlerExtensions
22+
{
23+
public static IDisposable OnPublishDiagnostics(this ILanguageClientRegistry registry, Func<PublishDiagnosticsParams, Task<Unit>> handler)
24+
{
25+
return registry.AddHandlers(new DelegatingHandler(handler));
26+
}
27+
28+
class DelegatingHandler : PublishDiagnosticsHandler
29+
{
30+
private readonly Func<PublishDiagnosticsParams, Task<Unit>> _handler;
31+
32+
public DelegatingHandler(Func<PublishDiagnosticsParams, Task<Unit>> handler)
33+
{
34+
_handler = handler;
35+
}
36+
37+
public override Task<Unit> Handle(PublishDiagnosticsParams request, CancellationToken cancellationToken) => _handler.Invoke(request);
38+
}
39+
}
1140
}
Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using OmniSharp.Extensions.Embedded.MediatR;
15
using OmniSharp.Extensions.JsonRpc;
26
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
37
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
@@ -6,7 +10,50 @@
610

711
namespace OmniSharp.Extensions.LanguageServer.Protocol.Server
812
{
9-
using static DocumentNames;
10-
[Parallel, Method(CodeAction)]
13+
[Parallel, Method(DocumentNames.CodeAction)]
1114
public interface ICodeActionHandler : IJsonRpcRequestHandler<CodeActionParams, CommandOrCodeActionContainer>, IRegistration<TextDocumentRegistrationOptions>, ICapability<CodeActionCapability> { }
15+
16+
public abstract class CodeActionHandler : ICodeActionHandler
17+
{
18+
private readonly TextDocumentRegistrationOptions _options;
19+
public CodeActionHandler(TextDocumentRegistrationOptions registrationOptions)
20+
{
21+
_options = registrationOptions;
22+
}
23+
24+
public TextDocumentRegistrationOptions GetRegistrationOptions() => _options;
25+
public abstract Task<CommandOrCodeActionContainer> Handle(CodeActionParams request, CancellationToken cancellationToken);
26+
public abstract void SetCapability(CodeActionCapability capability);
27+
}
28+
29+
public static class CodeActionHandlerExtensions
30+
{
31+
public static IDisposable OnCodeAction(
32+
this ILanguageServerRegistry registry,
33+
Func<CodeActionParams, CancellationToken, Task<CommandOrCodeActionContainer>> handler,
34+
TextDocumentRegistrationOptions registrationOptions = null,
35+
Action<CodeActionCapability> setCapability = null)
36+
{
37+
return registry.AddHandlers(new DelegatingHandler(handler, setCapability, registrationOptions));
38+
}
39+
40+
internal class DelegatingHandler : CodeActionHandler
41+
{
42+
private readonly Func<CodeActionParams, CancellationToken, Task<CommandOrCodeActionContainer>> _handler;
43+
private readonly Action<CodeActionCapability> _setCapability;
44+
45+
public DelegatingHandler(
46+
Func<CodeActionParams, CancellationToken, Task<CommandOrCodeActionContainer>> handler,
47+
Action<CodeActionCapability> setCapability,
48+
TextDocumentRegistrationOptions registrationOptions) : base(registrationOptions)
49+
{
50+
_handler = handler;
51+
_setCapability = setCapability;
52+
}
53+
54+
public override Task<CommandOrCodeActionContainer> Handle(CodeActionParams request, CancellationToken cancellationToken) => _handler.Invoke(request, cancellationToken);
55+
public override void SetCapability(CodeActionCapability capability) => _setCapability?.Invoke(capability);
56+
57+
}
58+
}
1259
}
Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
14
using OmniSharp.Extensions.JsonRpc;
25
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
36
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
@@ -6,8 +9,69 @@
69

710
namespace OmniSharp.Extensions.LanguageServer.Protocol.Server
811
{
9-
using static DocumentNames;
10-
11-
[Parallel, Method(CodeLens)]
12+
[Parallel, Method(DocumentNames.CodeLens)]
1213
public interface ICodeLensHandler : IJsonRpcRequestHandler<CodeLensParams, CodeLensContainer>, IRegistration<CodeLensRegistrationOptions>, ICapability<CodeLensCapability> { }
14+
15+
[Parallel, Method(DocumentNames.CodeLensResolve)]
16+
public interface ICodeLensResolveHandler : ICanBeResolvedHandler<CodeLens> { }
17+
18+
public abstract class CodeLensHandler : ICodeLensHandler, ICodeLensResolveHandler
19+
{
20+
private readonly CodeLensRegistrationOptions _options;
21+
public CodeLensHandler(CodeLensRegistrationOptions registrationOptions)
22+
{
23+
_options = registrationOptions;
24+
}
25+
26+
public CodeLensRegistrationOptions GetRegistrationOptions() => _options;
27+
public abstract Task<CodeLensContainer> Handle(CodeLensParams request, CancellationToken cancellationToken);
28+
public abstract Task<CodeLens> Handle(CodeLens request, CancellationToken cancellationToken);
29+
public abstract bool CanResolve(CodeLens value);
30+
public abstract void SetCapability(CodeLensCapability capability);
31+
}
32+
33+
public static class CodeLensHandlerExtensions
34+
{
35+
public static IDisposable OnCodeLens(
36+
this ILanguageServerRegistry registry,
37+
Func<CodeLensParams, CancellationToken, Task<CodeLensContainer>> handler,
38+
Func<CodeLens, CancellationToken, Task<CodeLens>> resolveHandler = null,
39+
Func<CodeLens, bool> canResolve = null,
40+
CodeLensRegistrationOptions registrationOptions = null,
41+
Action<CodeLensCapability> setCapability = null)
42+
{
43+
if (registrationOptions != null)
44+
{
45+
registrationOptions.ResolveProvider = canResolve != null && resolveHandler != null;
46+
}
47+
return registry.AddHandlers(new DelegatingHandler(handler, resolveHandler, canResolve, setCapability, registrationOptions));
48+
}
49+
50+
class DelegatingHandler : CodeLensHandler
51+
{
52+
private readonly Func<CodeLensParams, CancellationToken, Task<CodeLensContainer>> _handler;
53+
private readonly Func<CodeLens, CancellationToken, Task<CodeLens>> _resolveHandler;
54+
private readonly Func<CodeLens, bool> _canResolve;
55+
private readonly Action<CodeLensCapability> _setCapability;
56+
57+
public DelegatingHandler(
58+
Func<CodeLensParams, CancellationToken, Task<CodeLensContainer>> handler,
59+
Func<CodeLens, CancellationToken, Task<CodeLens>> resolveHandler,
60+
Func<CodeLens, bool> canResolve,
61+
Action<CodeLensCapability> setCapability,
62+
CodeLensRegistrationOptions registrationOptions) : base(registrationOptions)
63+
{
64+
_handler = handler;
65+
_resolveHandler = resolveHandler;
66+
_canResolve = canResolve;
67+
_setCapability = setCapability;
68+
}
69+
70+
public override Task<CodeLensContainer> Handle(CodeLensParams request, CancellationToken cancellationToken) => _handler.Invoke(request, cancellationToken);
71+
public override Task<CodeLens> Handle(CodeLens request, CancellationToken cancellationToken) => _resolveHandler.Invoke(request, cancellationToken);
72+
public override bool CanResolve(CodeLens value) => _canResolve.Invoke(value);
73+
public override void SetCapability(CodeLensCapability capability) => _setCapability?.Invoke(capability);
74+
75+
}
76+
}
1377
}

src/Protocol/Document/Server/ICodeLensResolveHandler.cs

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,60 @@
11
using OmniSharp.Extensions.JsonRpc;
22
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
33
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
4+
using OmniSharp.Extensions.LanguageServer.Protocol;
5+
using System.Threading.Tasks;
6+
using System.Threading;
7+
using System;
48

59
// ReSharper disable CheckNamespace
610

11+
712
namespace OmniSharp.Extensions.LanguageServer.Protocol.Server
813
{
9-
using static DocumentNames;
10-
[Parallel, Method(ColorPresentation)]
14+
[Parallel, Method(DocumentNames.ColorPresentation)]
1115
public interface IColorPresentationHandler : IJsonRpcRequestHandler<ColorPresentationParams, Container<ColorPresentation>>, IRegistration<DocumentColorRegistrationOptions>, ICapability<ColorProviderCapability> { }
16+
17+
public abstract class ColorPresentationHandler : IColorPresentationHandler
18+
{
19+
private readonly DocumentColorRegistrationOptions _options;
20+
public ColorPresentationHandler(DocumentColorRegistrationOptions registrationOptions)
21+
{
22+
_options = registrationOptions;
23+
}
24+
25+
public DocumentColorRegistrationOptions GetRegistrationOptions() => _options;
26+
public abstract Task<Container<ColorPresentation>> Handle(ColorPresentationParams request, CancellationToken cancellationToken);
27+
public abstract void SetCapability(ColorProviderCapability capability);
28+
}
29+
30+
public static class ColorPresentationHandlerExtensions
31+
{
32+
public static IDisposable OnColorPresentation(
33+
this ILanguageServerRegistry registry,
34+
Func<ColorPresentationParams, CancellationToken, Task<Container<ColorPresentation>>> handler,
35+
DocumentColorRegistrationOptions registrationOptions = null,
36+
Action<ColorProviderCapability> setCapability = null)
37+
{
38+
return registry.AddHandlers(new DelegatingHandler(handler, setCapability, registrationOptions));
39+
}
40+
41+
class DelegatingHandler : ColorPresentationHandler
42+
{
43+
private readonly Func<ColorPresentationParams, CancellationToken, Task<Container<ColorPresentation>>> _handler;
44+
private readonly Action<ColorProviderCapability> _setCapability;
45+
46+
public DelegatingHandler(
47+
Func<ColorPresentationParams, CancellationToken, Task<Container<ColorPresentation>>> handler,
48+
Action<ColorProviderCapability> setCapability,
49+
DocumentColorRegistrationOptions registrationOptions) : base(registrationOptions)
50+
{
51+
_handler = handler;
52+
_setCapability = setCapability;
53+
}
54+
55+
public override Task<Container<ColorPresentation>> Handle(ColorPresentationParams request, CancellationToken cancellationToken) => _handler.Invoke(request, cancellationToken);
56+
public override void SetCapability(ColorProviderCapability capability) => _setCapability?.Invoke(capability);
57+
58+
}
59+
}
1260
}

0 commit comments

Comments
 (0)