From 29766b83affd55dc4a2a8c6eeb760aecad396b40 Mon Sep 17 00:00:00 2001 From: Jason Axelson Date: Fri, 5 Mar 2021 08:35:58 -1000 Subject: [PATCH 1/2] Ensure that all commands include the server instance id Will help prevent needing to fix bugs like: https://github.com/elixir-lsp/elixir-ls/pull/505 --- apps/language_server/test/server_test.exs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/apps/language_server/test/server_test.exs b/apps/language_server/test/server_test.exs index c96a67f4f..a555599a7 100644 --- a/apps/language_server/test/server_test.exs +++ b/apps/language_server/test/server_test.exs @@ -46,6 +46,24 @@ defmodule ElixirLS.LanguageServer.ServerTest do assert_receive(%{"id" => 1, "result" => %{"capabilities" => %{}}}, 1000) end + test "Execute commands should include the server instance id", %{server: server} do + # If a command does not include the server instance id then it will cause + # vscode-elixir-ls to fail to start up on multi-root workspaces. + # Example: https://github.com/elixir-lsp/elixir-ls/pull/505 + + Server.receive_packet(server, initialize_req(1, root_uri(), %{})) + assert_receive(%{"id" => 1, "result" => all = %{"capabilities" => capabilities}}, 1000) + + commands = get_in(capabilities, ["executeCommandProvider", "commands"]) + server_instance_id = :sys.get_state(server).server_instance_id + + Enum.each(commands, fn command -> + assert String.contains?(command, server_instance_id) + end) + + refute Enum.empty?(commands) + end + test "returns -32600 InvalidRequest when already initialized", %{server: server} do Server.receive_packet(server, initialize_req(1, root_uri(), %{})) assert_receive(%{"id" => 1, "result" => %{"capabilities" => %{}}}, 1000) From 542d01893dff86fd77491c605e3b2d1aa625ee08 Mon Sep 17 00:00:00 2001 From: Jason Axelson Date: Fri, 5 Mar 2021 08:59:57 -1000 Subject: [PATCH 2/2] Fix issue in the test --- apps/language_server/test/server_test.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/language_server/test/server_test.exs b/apps/language_server/test/server_test.exs index a555599a7..ee7a387fd 100644 --- a/apps/language_server/test/server_test.exs +++ b/apps/language_server/test/server_test.exs @@ -52,9 +52,9 @@ defmodule ElixirLS.LanguageServer.ServerTest do # Example: https://github.com/elixir-lsp/elixir-ls/pull/505 Server.receive_packet(server, initialize_req(1, root_uri(), %{})) - assert_receive(%{"id" => 1, "result" => all = %{"capabilities" => capabilities}}, 1000) + assert_receive(%{"id" => 1, "result" => result}, 1000) - commands = get_in(capabilities, ["executeCommandProvider", "commands"]) + commands = get_in(result, ["capabilities", "executeCommandProvider", "commands"]) server_instance_id = :sys.get_state(server).server_instance_id Enum.each(commands, fn command ->