/// <summary> /// Create a <see cref="LanguageClient" /> connected to the test's <see cref="PipeServerProcess" />. /// </summary> /// <returns> /// The <see cref="LanguageClient" />. /// </returns> protected async Task<(ILanguageClient client, ILanguageServer server)> Initialize( Action<LanguageClientOptions> clientOptionsAction, Action<LanguageServerOptions> serverOptionsAction ) { var clientPipe = new Pipe(); var serverPipe = new Pipe(); _client = LanguageClient.PreInit( options => { options.WithServices(services => services.AddSingleton(LoggerFactory)); options.WithInput(serverPipe.Reader).WithOutput(clientPipe.Writer); options.WithRootPath(WorkspaceRoot); clientOptionsAction(options); } ); Disposal.Add(_client); _server = Server.LanguageServer.PreInit( options => { options.WithServices(services => services.AddSingleton(LoggerFactory)); options.WithInput(clientPipe.Reader).WithOutput(serverPipe.Writer); serverOptionsAction(options); } ); Disposal.Add(_server); await Task.WhenAll( _client.Initialize(CancellationToken), _server.Initialize(CancellationToken) ); return ( _client, _server ); }
protected override (Stream clientOutput, Stream serverInput) SetupServer() { var clientPipe = new Pipe(TestOptions.DefaultPipeOptions); var serverPipe = new Pipe(TestOptions.DefaultPipeOptions); Server = OmniSharp.Extensions.LanguageServer.Server.LanguageServer.PreInit( options => options .WithInput(serverPipe.Reader) .WithOutput(clientPipe.Writer) .ConfigureLogging(SetupTestLogging) .WithDafnyLanguageServer(CreateConfiguration()) ); Server.Initialize(CancellationToken); return(clientPipe.Reader.AsStream(), serverPipe.Writer.AsStream()); }
private async Task RunAndWaitExit(Stream input, Stream output) { if (Instance != null) { throw new InvalidOperationException($"RhetosLanguage server has already been initialized. Two instances is not allowed."); } Instance = BuildLanguageServer(input, output); AddServerCleanupHandlers(Instance, hostLog); hostLog.Debug("Language Server built. Awaiting initialize..."); await Instance.Initialize(cancellationTokenSource.Token); hostLog.Debug("Initialized!"); await Instance.WaitForExit; }
protected override (Stream clientOutput, Stream serverInput) SetupServer() { var clientPipe = new Pipe(TestOptions.DefaultPipeOptions); var serverPipe = new Pipe(TestOptions.DefaultPipeOptions); Server = OmniSharp.Extensions.LanguageServer.Server.LanguageServer.PreInit( options => options .WithInput(serverPipe.Reader) .WithOutput(clientPipe.Writer) .ConfigureLogging(SetupTestLogging) .WithDafnyLanguageServer(CreateConfiguration()) ); // This is the style used in the LSP implementation itself: // https://github.com/OmniSharp/csharp-language-server-protocol/blob/1b6788df2600083c28811913a221ccac7b1d72c9/test/Lsp.Tests/Testing/LanguageServerTestBaseTests.cs #pragma warning disable VSTHRD110 // Observe result of async calls Server.Initialize(CancellationToken); #pragma warning restore VSTHRD110 // Observe result of async calls return(clientPipe.Reader.AsStream(), serverPipe.Writer.AsStream()); }
public Task InitializedAsync(CancellationToken token) => _innerServer.Initialize(token);