OmniSharp/csharp-language-server-protocol

Internal error in sample server's implementation of semantic tokens

cpitclaudel opened this issue · 0 comments

I'm getting the following message from the sample server when I request semantic tokens from it:

{
  "jsonrpc": "2.0",
  "id": 3,
  "error": {
    "code": -32603,
    "message": "Internal Error - (message…)"
  }
}

… where (message…) is:

System.NullReferenceException: Object reference not set to an instance of an object.
   at SampleServer.SemanticTokensHandler.GetSemanticTokensDocument(ITextDocumentIdentifierParams params, CancellationToken cancellationToken) in C:\build\csharp-language-server-protocol\sample\SampleServer\SemanticTokensHandler.cs:line 77
   at OmniSharp.Extensions.LanguageServer.Protocol.Document.SemanticTokensHandlerBase.Handle(SemanticTokensParams request, CancellationToken cancellationToken) in C:\build\git\csharp-language-server-protocol\src\Protocol\Features\Document\SemanticTokensFeature.cs:line 735
   at SampleServer.SemanticTokensHandler.Handle(SemanticTokensParams request, CancellationToken cancellationToken) in C:\build\csharp-language-server-protocol\sample\SampleServer\SemanticTokensHandler.cs:line 28
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.SemanticTokensDeltaPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next) in C:\build\git\csharp-language-server-protocol\src\Server\Pipelines\SemanticTokensDeltaPipeline.cs:line 18
   at OmniSharp.Extensions.LanguageServer.Server.Pipelines.ResolveCommandPipeline`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next) in C:\build\git\csharp-language-server-protocol\src\Server\Pipelines\ResolveCommandPipeline.cs:line 29
   at MediatR.Pipeline.RequestPreProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestPostProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at MediatR.Pipeline.RequestExceptionActionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.<RouteRequest>g__InnerRoute|7_0(IServiceScopeFactory serviceScopeFactory, Request request, TDescriptor descriptor, Object params, CancellationToken token, ILogger logger) in C:\build\git\csharp-language-server-protocol\src\JsonRpc\RequestRouterBase.cs:line 161
   at OmniSharp.Extensions.JsonRpc.RequestRouterBase`1.RouteRequest(IRequestDescriptor`1 descriptors, Request request, CancellationToken token) in C:\build\git\csharp-language-server-protocol\src\JsonRpc\RequestRouterBase.cs:line 145
   at OmniSharp.Extensions.JsonRpc.DefaultRequestInvoker.<>c__DisplayClass10_0.<<RouteRequest>b__5>d.MoveNext() in C:\build\git\csharp-language-server-protocol\src\JsonRpc\DefaultRequestInvoker.cs:line 105

As far as I can tell (from attaching to the server with a debugger), CreateRegistrationOptions is not called and RegistrationOptions.Legend is null.

I've tried with a different LSP client, and I hit a different error: this time CreateRegistrationOptions is called with capability == null, which causes capability.TokenModifiers to fail.

Is there any info I can provide to help debug the issue?