OmniSharp / OmniSharp/csharp-language-server-protocol

Internal error in sample server's implementation of semantic tokens

Open
#783 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
638
Forks
109
Avg merge
1m
Merged PRs (30d)
2

Description

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?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in sample/SampleServer/SemanticTokensHandler.cs, especially GetSemanticTokensDocument at line 77 and CreateRegistrationOptions. Reproduce a semantic-tokens request with the sample server and inspect why RegistrationOptions.Legend or the capability is null. Done means the request no longer raises a NullReferenceException and semantic-token registration works for the reported clients.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.