Skip to content

Fixed DocumentTextSync converter / Added semantic token refresh notification #344

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 1, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/Client/LanguageClientRegistrationManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ public void RegisterCapabilities(ServerCapabilities serverCapabilities)
continue;
}

if (string.IsNullOrWhiteSpace(registrationOptions.Id))
{
registrationOptions.Id = Guid.NewGuid().ToString();
}

var reg = new Registration {
Id = registrationOptions.Id,
Method = method,
Expand Down
12 changes: 8 additions & 4 deletions src/JsonRpc.Generators/GenerateHandlerMethodsGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -330,13 +330,13 @@ MemberDeclarationSyntax MakeDerivedAction(TypeSyntax syntax)
{
var partialTypeSyntax = ResolveTypeName(partialItem);

method = method.WithExpressionBody(GetPartialResultHandlerExpression(GetMethodName(handlerInterface), requestType, responseType));
method = method.WithExpressionBody(GetPartialResultHandlerExpression(GetMethodName(handlerInterface), requestType, partialItem, responseType));

yield return MakeAction(CreatePartialAction(requestType, partialTypeSyntax, true));
yield return MakeAction(CreatePartialAction(requestType, partialTypeSyntax, false));
if (capability != null)
{
method = method.WithExpressionBody(GetPartialResultCapabilityHandlerExpression(GetMethodName(handlerInterface), requestType, responseType, capability));
method = method.WithExpressionBody(GetPartialResultCapabilityHandlerExpression(GetMethodName(handlerInterface), requestType, partialItem, responseType, capability));
yield return MakeAction(CreatePartialAction(requestType, partialTypeSyntax, capability));
}
}
Expand All @@ -346,6 +346,10 @@ MemberDeclarationSyntax MakeDerivedAction(TypeSyntax syntax)
method = method.WithExpressionBody(
GetRequestCapabilityHandlerExpression(GetMethodName(handlerInterface), requestType, responseType, capability)
);
if (responseType.Name == "Unit")
{
method = method.WithExpressionBody(GetVoidRequestCapabilityHandlerExpression(GetMethodName(handlerInterface), requestType, capability));
}
yield return MakeAction(CreateAsyncFunc(responseType, requestType, capability));
}
}
Expand Down Expand Up @@ -443,15 +447,15 @@ MemberDeclarationSyntax MakeDerivedAction(TypeSyntax syntax)
{
var partialTypeSyntax = ResolveTypeName(partialItem);

method = method.WithBody(GetPartialResultRegistrationHandlerExpression(GetMethodName(handlerInterface), requestType, responseType, registrationOptions));
method = method.WithBody(GetPartialResultRegistrationHandlerExpression(GetMethodName(handlerInterface), requestType, partialItem, responseType, registrationOptions));

yield return MakeAction(CreatePartialAction(requestType, partialTypeSyntax, true));
yield return MakeAction(CreatePartialAction(requestType, partialTypeSyntax, false));
if (capability != null)
{
method = method.WithBody(
GetPartialResultRegistrationHandlerExpression(
GetMethodName(handlerInterface), requestType, responseType, registrationOptions,
GetMethodName(handlerInterface), requestType, partialItem, responseType, registrationOptions,
capability
)
);
Expand Down
61 changes: 56 additions & 5 deletions src/JsonRpc.Generators/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,29 @@ ITypeSymbol capability
);
}

public static ArrowExpressionClauseSyntax GetVoidRequestCapabilityHandlerExpression(
ExpressionSyntax nameExpression, ITypeSymbol requestType,
ITypeSymbol capability
)
{
var requestName = ResolveTypeName(requestType);
var capabilityName = ResolveTypeName(capability);
return ArrowExpressionClause(
AddHandler(
Argument(nameExpression),
Argument(
CreateHandlerArgument(
IdentifierName("LanguageProtocolDelegatingHandlers"),
"RequestCapability",
requestName,
capabilityName
)
.WithArgumentList(GetHandlerArgumentList())
)
)
);
}

public static BlockSyntax GetRequestRegistrationHandlerExpression(
ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol responseType,
ITypeSymbol registrationOptions
Expand Down Expand Up @@ -593,36 +616,44 @@ public static ArrowExpressionClauseSyntax GetRequestHandlerExpression(Expression
}

public static ArrowExpressionClauseSyntax GetPartialResultCapabilityHandlerExpression(
ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol responseType,
ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol itemType, ITypeSymbol responseType,
ITypeSymbol capability
)
{
var requestName = ResolveTypeName(requestType);
var itemName = ResolveTypeName(itemType);
var responseName = ResolveTypeName(responseType);
var capabilityName = ResolveTypeName(capability);
return ArrowExpressionClause(
AddHandler(
Argument(nameExpression),
Argument(
SimpleLambdaExpression(
Parameter(
Identifier("_")
),
CreateHandlerArgument(
IdentifierName("LanguageProtocolDelegatingHandlers"),
"PartialResultCapability",
requestName,
responseName,
itemName,
capabilityName
)
.WithArgumentList(GetPartialResultArgumentList(responseName))
)
)
)
);
}

public static BlockSyntax GetPartialResultRegistrationHandlerExpression(
ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol responseType,
ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol itemType, ITypeSymbol responseType,
ITypeSymbol registrationOptions
)
{
var requestName = ResolveTypeName(requestType);
var itemName = ResolveTypeName(itemType);
var responseName = ResolveTypeName(responseType);
var registrationOptionsName = ResolveTypeName(registrationOptions);
return Block(
Expand All @@ -631,27 +662,34 @@ ITypeSymbol registrationOptions
AddHandler(
Argument(nameExpression),
Argument(
SimpleLambdaExpression(
Parameter(
Identifier("_")
),
CreateHandlerArgument(
IdentifierName("LanguageProtocolDelegatingHandlers"),
"PartialResult",
requestName,
responseName,
itemName,
registrationOptionsName
)
.WithArgumentList(GetPartialResultRegistrationArgumentList(IdentifierName("registrationOptions"), responseName))
)
)
)
)
);
}

public static BlockSyntax GetPartialResultRegistrationHandlerExpression(
ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol responseType,
ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol itemType, ITypeSymbol responseType,
ITypeSymbol registrationOptions,
ITypeSymbol capability
)
{
var requestName = ResolveTypeName(requestType);
var itemName = ResolveTypeName(itemType);
var responseName = ResolveTypeName(responseType);
var registrationOptionsName = ResolveTypeName(registrationOptions);
var capabilityName = ResolveTypeName(capability);
Expand All @@ -661,36 +699,49 @@ ITypeSymbol capability
AddHandler(
Argument(nameExpression),
Argument(
SimpleLambdaExpression(
Parameter(
Identifier("_")
),
CreateHandlerArgument(
IdentifierName("LanguageProtocolDelegatingHandlers"),
"PartialResult",
requestName,
responseName,
itemName,
capabilityName,
registrationOptionsName
)
.WithArgumentList(GetPartialResultRegistrationArgumentList(IdentifierName("registrationOptions"), responseName))
)
)
)
)
);
}

public static ArrowExpressionClauseSyntax GetPartialResultHandlerExpression(ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol responseType)
public static ArrowExpressionClauseSyntax GetPartialResultHandlerExpression(ExpressionSyntax nameExpression, ITypeSymbol requestType, ITypeSymbol partialItem, ITypeSymbol responseType)
{
var requestName = ResolveTypeName(requestType);
var itemName = ResolveTypeName(partialItem);
var responseName = ResolveTypeName(responseType);
return ArrowExpressionClause(
AddHandler(
Argument(nameExpression),
Argument(
SimpleLambdaExpression(
Parameter(
Identifier("_")
),
CreateHandlerArgument(
IdentifierName("LanguageProtocolDelegatingHandlers"),
"PartialResult",
requestName,
responseName
responseName,
itemName
)
.WithArgumentList(GetPartialResultArgumentList(responseName))
)
)
)
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
using System;
using System.Reactive.Subjects;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using OmniSharp.Extensions.JsonRpc;
using OmniSharp.Extensions.JsonRpc.Generation;
using OmniSharp.Extensions.LanguageServer.Protocol.Client;
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
Expand All @@ -14,6 +17,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Document.Proposals
[Obsolete(Constants.Proposal)]
[Parallel]
[Method(TextDocumentNames.SemanticTokensFull, Direction.ClientToServer)]
[GenerateHandlerMethods]
public interface ISemanticTokensHandler : IJsonRpcRequestHandler<SemanticTokensParams, SemanticTokens>,
IRegistration<SemanticTokensRegistrationOptions>, ICapability<SemanticTokensCapability>
{
Expand All @@ -22,6 +26,7 @@ public interface ISemanticTokensHandler : IJsonRpcRequestHandler<SemanticTokensP
[Obsolete(Constants.Proposal)]
[Parallel]
[Method(TextDocumentNames.SemanticTokensFullDelta, Direction.ClientToServer)]
[GenerateHandlerMethods]
public interface ISemanticTokensDeltaHandler :
IJsonRpcRequestHandler<SemanticTokensDeltaParams, SemanticTokensFullOrDelta?>,
IRegistration<SemanticTokensRegistrationOptions>, ICapability<SemanticTokensCapability>, IDoesNotParticipateInRegistration
Expand All @@ -31,6 +36,7 @@ public interface ISemanticTokensDeltaHandler :
[Obsolete(Constants.Proposal)]
[Parallel]
[Method(TextDocumentNames.SemanticTokensRange, Direction.ClientToServer)]
[GenerateHandlerMethods]
public interface ISemanticTokensRangeHandler : IJsonRpcRequestHandler<SemanticTokensRangeParams, SemanticTokens>,
IRegistration<SemanticTokensRegistrationOptions>, ICapability<SemanticTokensCapability>, IDoesNotParticipateInRegistration
{
Expand Down Expand Up @@ -79,7 +85,7 @@ public virtual async Task<SemanticTokens> Handle(SemanticTokensRangeParams reque
}

[Obsolete(Constants.Proposal)]
public static class SemanticTokensExtensions
public static partial class SemanticTokensExtensions
{
public static ILanguageServerRegistry OnSemanticTokens(
this ILanguageServerRegistry registry,
Expand Down
Loading