csharp-language-server-protocol icon indicating copy to clipboard operation
csharp-language-server-protocol copied to clipboard

sample project does not connect over stdio channel in vscode

Open cdhanna opened this issue 1 year ago • 0 comments

This library looks like an incredible project, so first off, thank you!

I was trying to get up and running with a vs-code extension client for the server, and following the sample project in this repo, I was having a devil of a time. I got it working by changing vs-code to use the TransporkKind.pipe instead of stdio.

In the Program.cs, I did something like this,

public static class Program
{
    public static async Task Main(string[] args)
    {
        var pipeAddr = "";
        foreach (var t in args)
        {
            if (!t.StartsWith("--pipe=")) continue;
            
            pipeAddr = t.Substring("--pipe=".Length);
            break;
        }
        
        Log.Logger = new LoggerConfiguration()
            .Enrich.FromLogContext()
            .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
            .MinimumLevel.Verbose()
            .CreateLogger();
        
        var pipeClient = new NamedPipeClientStream(pipeAddr);
        await pipeClient.ConnectAsync();
        
        Log.Logger.Information("connected.");

       // the LanguageServer.From( .... goes here

And then when creating the input/output for the language server, doing this,

  .WithInput(pipeClient.UsePipeReader())
  .WithOutput(pipeClient.UsePipeWriter())

If I used stdio and the listed sample code to get the input/output streams from Console, then I would get errors from vscode about Content-Length not being supplied on the messages.

I mostly wanted to leave this here as a trace in case anyone else found it useful.

cdhanna avatar Jan 18 '24 09:01 cdhanna