/// <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());
        }
示例#3
0
        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;
        }
示例#4
0
        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());
        }
示例#5
0
 public Task InitializedAsync(CancellationToken token) => _innerServer.Initialize(token);