Skip to content

Commit 30cbd6e

Browse files
Added fixes for document color provider, as well as related fixes for other resolve features. (#459)
1 parent 60ebb3a commit 30cbd6e

15 files changed

+95
-81
lines changed

src/JsonRpc.Generators/Helpers.cs

+38-22
Original file line numberDiff line numberDiff line change
@@ -403,10 +403,10 @@ private static ArgumentListSyntax GetPartialResultArgumentList(TypeSyntax respon
403403
)
404404
),
405405
Argument(
406-
SimpleLambdaExpression(
407-
Parameter(Identifier("values")),
408-
ObjectCreationExpression(responseName is NullableTypeSyntax nts ? nts.ElementType : responseName)
409-
.WithArgumentList(ArgumentList(SingletonSeparatedList(Argument(IdentifierName("values")))))
406+
MemberAccessExpression(
407+
SyntaxKind.SimpleMemberAccessExpression,
408+
responseName.EnsureNotNullable(),
409+
IdentifierName("From")
410410
)
411411
)
412412
}
@@ -429,10 +429,10 @@ private static ArgumentListSyntax GetPartialItemsArgumentList(TypeSyntax respons
429429
)
430430
),
431431
Argument(
432-
SimpleLambdaExpression(
433-
Parameter(Identifier("values")),
434-
ObjectCreationExpression(responseName)
435-
.WithArgumentList(ArgumentList(SingletonSeparatedList(Argument(IdentifierName("values")))))
432+
MemberAccessExpression(
433+
SyntaxKind.SimpleMemberAccessExpression,
434+
responseName.EnsureNotNullable(),
435+
IdentifierName("From")
436436
)
437437
)
438438
}
@@ -591,12 +591,15 @@ TypeSyntax capabilityName
591591
itemType,
592592
capabilityName
593593
)
594-
.AddArgumentListArguments(
595-
GetHandlerAdapterArgument(
596-
TypeArgumentList(SeparatedList(new[] { requestName, itemType })),
597-
HandlerArgument,
598-
capabilityName,
599-
true
594+
.WithArgumentList(
595+
GetPartialResultArgumentList(
596+
responseType,
597+
GetHandlerAdapterArgument(
598+
TypeArgumentList(SeparatedList(new[] { requestName, itemType })),
599+
HandlerArgument,
600+
capabilityName,
601+
true
602+
)
600603
)
601604
)
602605
)
@@ -633,7 +636,7 @@ public static ArrowExpressionClauseSyntax GetPartialResultHandlerExpression(
633636

634637
public static ArrowExpressionClauseSyntax GetPartialResultsCapabilityHandlerExpression(
635638
ExpressionSyntax nameExpression, TypeSyntax requestName, TypeSyntax responseType,
636-
NameSyntax itemName, TypeSyntax capabilityName
639+
TypeSyntax itemName, TypeSyntax capabilityName
637640
)
638641
{
639642
return ArrowExpressionClause(
@@ -652,12 +655,15 @@ public static ArrowExpressionClauseSyntax GetPartialResultsCapabilityHandlerExpr
652655
itemName,
653656
capabilityName
654657
)
655-
.AddArgumentListArguments(
656-
GetHandlerAdapterArgument(
657-
TypeArgumentList(SeparatedList(new[] { requestName, itemName })),
658-
HandlerArgument,
659-
capabilityName,
660-
true
658+
.WithArgumentList(
659+
GetPartialResultArgumentList(
660+
responseType,
661+
GetHandlerAdapterArgument(
662+
TypeArgumentList(SeparatedList(new[] { requestName, itemName })),
663+
HandlerArgument,
664+
capabilityName,
665+
true
666+
)
661667
)
662668
)
663669
)
@@ -686,7 +692,17 @@ TypeSyntax responseType
686692
responseType,
687693
itemName
688694
)
689-
.WithArgumentList(GetPartialItemsArgumentList(responseType, HandlerArgument))
695+
.WithArgumentList(
696+
GetPartialItemsArgumentList(
697+
responseType,
698+
GetHandlerAdapterArgument(
699+
TypeArgumentList(SeparatedList(new[] { requestName, itemName })),
700+
HandlerArgument,
701+
null,
702+
true
703+
)
704+
)
705+
)
690706
)
691707
)
692708
)

src/JsonRpc.Generators/Strategies/OnRequestMethodGeneratorWithRegistrationOptionsStrategy.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ private static ArgumentListSyntax GetPartialResultArgumentList(
519519
Argument(
520520
MemberAccessExpression(
521521
SyntaxKind.SimpleMemberAccessExpression,
522-
responseName is NullableTypeSyntax nts ? nts.ElementType : responseName,
522+
responseName.EnsureNotNullable(),
523523
IdentifierName("From")
524524
)
525525
)

src/JsonRpc.Generators/Strategies/OnRequestMethodGeneratorWithoutRegistrationOptionsStrategy.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public IEnumerable<MemberDeclarationSyntax> Apply(ExtensionMethodContext extensi
147147
.WithExpressionBody(
148148
GetPartialResultsCapabilityHandlerExpression(
149149
GetJsonRpcMethodName(extensionMethodContext.TypeDeclaration), request.Request.Syntax, request.Response.Syntax,
150-
partialItemsSyntax, capability.Syntax
150+
partialItems.Syntax, capability.Syntax
151151
)
152152
)
153153
);

src/JsonRpc.Generators/Strategies/OnRequestTypedResolveMethodGeneratorWithoutRegistrationOptionsStrategy.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public IEnumerable<MemberDeclarationSyntax> Apply(ExtensionMethodContext extensi
136136
.WithExpressionBody(
137137
GetPartialResultsCapabilityHandlerExpression(
138138
GetJsonRpcMethodName(extensionMethodContext.TypeDeclaration), requestType, responseType,
139-
observerType, capability.Syntax
139+
resolveType, capability.Syntax
140140
)
141141
)
142142
);

src/Protocol/AbstractHandlers.cs

+8-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol
1717
public static class AbstractHandlers
1818
{
1919
public abstract class Base<TRegistrationOptions, TCapability> :
20-
IRegistration<TRegistrationOptions, TCapability>
20+
IRegistration<TRegistrationOptions, TCapability>,
21+
ICapability<TCapability>
2122
where TRegistrationOptions : class, new()
2223
where TCapability : ICapability
2324
{
@@ -32,6 +33,11 @@ TRegistrationOptions IRegistration<TRegistrationOptions, TCapability>.GetRegistr
3233
Capability = capability;
3334
return RegistrationOptions = CreateRegistrationOptions(capability, clientCapabilities);
3435
}
36+
37+
void ICapability<TCapability>.SetCapability(TCapability capability, ClientCapabilities clientCapabilities)
38+
{
39+
Capability = capability;
40+
}
3541
}
3642

3743
public abstract class BaseCapability<TCapability> :
@@ -40,7 +46,7 @@ public abstract class BaseCapability<TCapability> :
4046
{
4147
protected TCapability Capability { get; private set; } = default!;
4248

43-
void ICapability<TCapability>.SetCapability(TCapability capability)
49+
void ICapability<TCapability>.SetCapability(TCapability capability, ClientCapabilities clientCapabilities)
4450
{
4551
Capability = capability;
4652
}

src/Protocol/Features/Document/CodeActionFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public record CodeActionContext
9898
GenerateTypedData,
9999
GenerateContainer
100100
]
101-
[RegistrationOptions(typeof(CodeActionRegistrationOptions)), Capability(typeof(CodeActionCapability))]
101+
[Capability(typeof(CodeActionCapability))]
102102
public partial record CodeAction : ICanBeResolved, IRequest<CodeAction>, IDoesNotParticipateInRegistration
103103
{
104104
/// <summary>

src/Protocol/Features/Document/CodeLensFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public partial record CodeLensParams : ITextDocumentIdentifierParams, IWorkDoneP
6262
GenerateTypedData,
6363
GenerateContainer
6464
]
65-
[RegistrationOptions(typeof(CodeLensRegistrationOptions)), Capability(typeof(CodeLensCapability))]
65+
[Capability(typeof(CodeLensCapability))]
6666
public partial record CodeLens : IRequest<CodeLens>, ICanBeResolved, IDoesNotParticipateInRegistration
6767
{
6868
/// <summary>

src/Protocol/Features/Document/ColorFeature.cs

+29-37
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,59 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol
1818
namespace Models
1919
{
2020
[Parallel]
21-
[Method(TextDocumentNames.ColorPresentation, Direction.ClientToServer)]
21+
[Method(TextDocumentNames.DocumentColor, Direction.ClientToServer)]
2222
[
2323
GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Document"),
2424
GenerateHandlerMethods,
2525
GenerateRequestMethods(typeof(ITextDocumentLanguageClient), typeof(ILanguageClient))
2626
]
2727
[RegistrationOptions(typeof(DocumentColorRegistrationOptions)), Capability(typeof(ColorProviderCapability))]
28-
public partial record ColorPresentationParams : IRequest<Container<ColorPresentation>>
28+
public partial record DocumentColorParams : IPartialItemsRequest<Container<ColorInformation>, ColorInformation>, IWorkDoneProgressParams
2929
{
3030
/// <summary>
31-
/// The document to provide document links for.
31+
/// The text document.
3232
/// </summary>
3333
public TextDocumentIdentifier TextDocument { get; init; }
34+
}
3435

36+
public partial record ColorInformation
37+
{
3538
/// <summary>
36-
/// The actual color value for this color range.
39+
/// The range in the document where this color appears.
3740
/// </summary>
38-
public DocumentColor Color { get; init; }
41+
public Range Range { get; init; }
3942

4043
/// <summary>
41-
/// The range in the document where this color appers.
44+
/// The actual color value for this color range.
4245
/// </summary>
43-
public Range Range { get; init; }
46+
public DocumentColor Color { get; init; }
47+
48+
public ColorPresentationParams For(TextDocumentIdentifier textDocumentIdentifier)
49+
{
50+
return new ColorPresentationParams() {
51+
Color = Color,
52+
Range = Range,
53+
TextDocument = textDocumentIdentifier
54+
};
55+
}
4456
}
4557

4658
[Parallel]
59+
[Method(TextDocumentNames.ColorPresentation, Direction.ClientToServer)]
4760
[
4861
GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Document"),
4962
GenerateHandlerMethods,
5063
GenerateRequestMethods(typeof(ITextDocumentLanguageClient), typeof(ILanguageClient))
5164
]
52-
[RegistrationOptions(typeof(DocumentColorRegistrationOptions)), Capability(typeof(ColorProviderCapability))]
65+
[Capability(typeof(ColorProviderCapability))]
66+
public partial record ColorPresentationParams : ColorInformation, IRequest<Container<ColorPresentation>>, IDoesNotParticipateInRegistration
67+
{
68+
/// <summary>
69+
/// The document to provide document links for.
70+
/// </summary>
71+
public TextDocumentIdentifier TextDocument { get; init; }
72+
}
73+
5374
public partial record ColorPresentation
5475
{
5576
/// <summary>
@@ -75,35 +96,6 @@ public partial record ColorPresentation
7596
public TextEditContainer? AdditionalTextEdits { get; init; }
7697
}
7798

78-
[Parallel]
79-
[Method(TextDocumentNames.DocumentColor, Direction.ClientToServer)]
80-
[
81-
GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Document"),
82-
GenerateHandlerMethods,
83-
GenerateRequestMethods(typeof(ITextDocumentLanguageClient), typeof(ILanguageClient))
84-
]
85-
[RegistrationOptions(typeof(DocumentColorRegistrationOptions)), Capability(typeof(ColorProviderCapability))]
86-
public partial record DocumentColorParams : IPartialItemsRequest<Container<ColorInformation>, ColorInformation>, IWorkDoneProgressParams
87-
{
88-
/// <summary>
89-
/// The text document.
90-
/// </summary>
91-
public TextDocumentIdentifier TextDocument { get; init; }
92-
}
93-
94-
public partial record ColorInformation
95-
{
96-
/// <summary>
97-
/// The range in the document where this color appers.
98-
/// </summary>
99-
public Range Range { get; init; }
100-
101-
/// <summary>
102-
/// The actual color value for this color range.
103-
/// </summary>
104-
public DocumentColor Color { get; init; }
105-
}
106-
10799
/// <summary>
108100
/// Represents a color in RGBA space.
109101
/// </summary>

src/Protocol/Features/Document/CompletionFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public partial record CompletionParams : TextDocumentPositionParams, IWorkDonePr
6060
GenerateContainer("CompletionList"),
6161
GenerateTypedData
6262
]
63-
[RegistrationOptions(typeof(CompletionRegistrationOptions)), Capability(typeof(CompletionCapability))]
63+
[Capability(typeof(CompletionCapability))]
6464
public partial record CompletionItem : ICanBeResolved, IRequest<CompletionItem>, IDoesNotParticipateInRegistration
6565
{
6666
/// <summary>

src/Protocol/Features/Document/DocumentLinkFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public partial record DocumentLinkParams : ITextDocumentIdentifierParams, IParti
5959
GenerateTypedData,
6060
GenerateContainer
6161
]
62-
[RegistrationOptions(typeof(DocumentLinkRegistrationOptions)), Capability(typeof(DocumentLinkCapability))]
62+
[Capability(typeof(DocumentLinkCapability))]
6363
public partial record DocumentLink : ICanBeResolved, IRequest<DocumentLink>, IDoesNotParticipateInRegistration
6464
{
6565
/// <summary>

src/Protocol/Features/Document/Proposals/CallHierarchyFeature.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public abstract record CallHierarchyBaseCallParams<T> : ICanBeResolved
149149
GenerateHandlerMethods,
150150
GenerateRequestMethods(typeof(ITextDocumentLanguageClient), typeof(ILanguageClient))
151151
]
152-
[RegistrationOptions(typeof(CallHierarchyRegistrationOptions)), Capability(typeof(CallHierarchyCapability))]
152+
[Capability(typeof(CallHierarchyCapability))]
153153
public partial record CallHierarchyIncomingCallsParams : CallHierarchyBaseCallParams, IWorkDoneProgressParams,
154154
IPartialItemsRequest<Container<CallHierarchyIncomingCall>?, CallHierarchyIncomingCall>, IDoesNotParticipateInRegistration
155155
{
@@ -201,7 +201,7 @@ public partial record CallHierarchyIncomingCall
201201
GenerateHandlerMethods,
202202
GenerateRequestMethods(typeof(ITextDocumentLanguageClient), typeof(ILanguageClient))
203203
]
204-
[RegistrationOptions(typeof(CallHierarchyRegistrationOptions)), Capability(typeof(CallHierarchyCapability))]
204+
[Capability(typeof(CallHierarchyCapability))]
205205
public partial record CallHierarchyOutgoingCallsParams : CallHierarchyBaseCallParams, IWorkDoneProgressParams,
206206
IPartialItemsRequest<Container<CallHierarchyOutgoingCall>?, CallHierarchyOutgoingCall>, IDoesNotParticipateInRegistration
207207

src/Protocol/ICapability.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
2+
13
namespace OmniSharp.Extensions.LanguageServer.Protocol
24
{
35
public interface ICapability<in TCapability>
46
{
5-
void SetCapability(TCapability capability);
7+
void SetCapability(TCapability capability, ClientCapabilities clientCapabilities);
68
}
79
}

src/Protocol/LanguageProtocolDelegatingHandlers.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -595,22 +595,22 @@ public sealed class PartialResultsCapability<TParams, TResponse, TItem, TCapabil
595595
where TResponse : IEnumerable<TItem>?
596596
where TCapability : ICapability
597597
{
598-
private readonly Action<TParams, TCapability, IObserver<IEnumerable<TItem>>, CancellationToken> _handler;
598+
private readonly Action<TParams, IObserver<IEnumerable<TItem>>, TCapability, CancellationToken> _handler;
599599
private readonly IProgressManager _progressManager;
600600
private readonly Func<IEnumerable<TItem>, TResponse?> _factory;
601601
private readonly Guid _id;
602602
Guid ICanBeIdentifiedHandler.Id => _id;
603603

604604
public PartialResultsCapability(
605-
Action<TParams, TCapability, IObserver<IEnumerable<TItem>>, CancellationToken> handler, IProgressManager progressManager,
605+
Action<TParams, IObserver<IEnumerable<TItem>>, TCapability, CancellationToken> handler, IProgressManager progressManager,
606606
Func<IEnumerable<TItem>, TResponse?> factory
607607
) :
608608
this(Guid.Empty, handler, progressManager, factory)
609609
{
610610
}
611611

612612
public PartialResultsCapability(
613-
Guid id, Action<TParams, TCapability, IObserver<IEnumerable<TItem>>, CancellationToken> handler, IProgressManager progressManager,
613+
Guid id, Action<TParams, IObserver<IEnumerable<TItem>>, TCapability, CancellationToken> handler, IProgressManager progressManager,
614614
Func<IEnumerable<TItem>, TResponse?> factory
615615
)
616616
{
@@ -625,7 +625,7 @@ public PartialResultsCapability(
625625
var observer = _progressManager.For(request, cancellationToken);
626626
if (observer != ProgressObserver<IEnumerable<TItem>>.Noop)
627627
{
628-
_handler(request, Capability, observer, cancellationToken);
628+
_handler(request, observer, Capability, cancellationToken);
629629
await observer;
630630
return _factory(Enumerable.Empty<TItem>());
631631
}
@@ -638,7 +638,7 @@ public PartialResultsCapability(
638638
}
639639
)
640640
.ToTask(cancellationToken);
641-
_handler(request, Capability, subject, cancellationToken);
641+
_handler(request, subject, Capability, cancellationToken);
642642
var result = _factory(await task.ConfigureAwait(false));
643643
return result;
644644
}

src/Server/Configuration/DidChangeConfigurationProvider.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,7 @@ public Task<Unit> Handle(DidChangeConfigurationParams request, CancellationToken
7676
return Unit.Task;
7777
}
7878

79-
public object GetRegistrationOptions() => new object();
80-
81-
public void SetCapability(DidChangeConfigurationCapability capability) => _capability = capability;
79+
public void SetCapability(DidChangeConfigurationCapability capability, ClientCapabilities clientCapabilities) => _capability = capability;
8280
public bool IsSupported => _capability != null;
8381

8482
Task IOnLanguageServerStarted.OnStarted(ILanguageServer server, CancellationToken cancellationToken) => GetWorkspaceConfigurationAsync(cancellationToken);

0 commit comments

Comments
 (0)