OmniSharp / OmniSharp/csharp-language-server-protocol
Internal error in sample server's implementation of semantic tokens
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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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