Skip to content

Commit 1b4aff4

Browse files
committed
missing migrations
1 parent 20325c2 commit 1b4aff4

File tree

4 files changed

+53
-39
lines changed

4 files changed

+53
-39
lines changed

apps/language_server/lib/language_server/json_rpc.ex

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ defmodule ElixirLS.LanguageServer.JsonRpc do
103103
{code, default_message} = error_code_and_message(type)
104104

105105
if data do
106-
WireProtocol.send(error_response(id, code, message || default_message, data))
106+
{data_payload, data_module} = data
107+
{:ok, dumped} = Schematic.dump(data_module.schematic(), data_payload)
108+
WireProtocol.send(error_response(id, code, message || default_message, dumped))
107109
else
108110
WireProtocol.send(error_response(id, code, message || default_message))
109111
end
@@ -167,7 +169,9 @@ defmodule ElixirLS.LanguageServer.JsonRpc do
167169
end
168170

169171
def register_capability_request(server \\ __MODULE__, server_instance_id, method, options) do
170-
id_string = server_instance_id <> method <> JasonV.encode!(options)
172+
{options_payload, options_module} = options
173+
{:ok, dumped} = Schematic.dump(options_module.schematic(), options_payload)
174+
id_string = server_instance_id <> method <> JasonV.encode!(dumped)
171175
registration_id = :crypto.hash(:sha, id_string) |> Base.encode16()
172176

173177
# Generate a unique request ID
@@ -180,7 +184,7 @@ defmodule ElixirLS.LanguageServer.JsonRpc do
180184
%GenLSP.Structures.Registration{
181185
id: registration_id,
182186
method: method,
183-
register_options: options
187+
register_options: options_payload
184188
}
185189
]
186190
}

apps/language_server/lib/language_server/providers/completion.ex

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -373,20 +373,20 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
373373
keyword in ~w(rescue catch else after) ->
374374
if String.trim(context.text_after_cursor) == "" do
375375
{nil,
376-
%{
377-
"range" => %{
378-
"start" => %{
379-
"line" => context.line - 1,
380-
"character" =>
376+
%GenLSP.Structures.TextEdit{
377+
range: %GenLSP.Structures.Range{
378+
start: %GenLSP.Structures.Position{
379+
line: context.line - 1,
380+
character:
381381
context.character - String.length(hint) - 1 -
382382
max(context.line_indent - context.do_block_indent, 0)
383383
},
384-
"end" => %{
385-
"line" => context.line - 1,
386-
"character" => context.character - 1
384+
end: %GenLSP.Structures.Position{
385+
line: context.line - 1,
386+
character: context.character - 1
387387
}
388388
},
389-
"newText" => "#{keyword}\n "
389+
new_text: "#{keyword}\n "
390390
}}
391391
else
392392
{"#{keyword}: ", nil}
@@ -397,17 +397,20 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
397397

398398
keyword == "end" ->
399399
{nil,
400-
%{
401-
"range" => %{
402-
"start" => %{
403-
"line" => context.line - 1,
404-
"character" =>
400+
%GenLSP.Structures.TextEdit{
401+
range: %GenLSP.Structures.Range{
402+
start: %GenLSP.Structures.Position{
403+
line: context.line - 1,
404+
character:
405405
context.character - String.length(hint) - 1 -
406406
max(context.line_indent - context.do_block_indent, 0)
407407
},
408-
"end" => %{"line" => context.line - 1, "character" => context.character - 1}
408+
end: %GenLSP.Structures.Position{
409+
line: context.line - 1,
410+
character: context.character - 1
411+
}
409412
},
410-
"newText" => "end\n"
413+
new_text: "end\n"
411414
}}
412415

413416
true ->
@@ -832,15 +835,18 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
832835

833836
subtype == :keyword ->
834837
{"",
835-
%{
836-
"range" => %{
837-
"start" => %{
838-
"line" => context.line,
839-
"character" => context.character - String.length(context.prefix)
838+
%GenLSP.Structures.TextEdit{
839+
range: %GenLSP.Structures.Range{
840+
start: %GenLSP.Structures.Position{
841+
line: context.line,
842+
character: context.character - String.length(context.prefix)
840843
},
841-
"end" => %{"line" => context.line, "character" => context.character}
844+
end: %GenLSP.Structures.Position{
845+
line: context.line,
846+
character: context.character
847+
}
842848
},
843-
"newText" => "#{name}: "
849+
new_text: "#{name}: "
844850
}}
845851

846852
match?(":" <> _, context.prefix) ->

apps/language_server/lib/language_server/server.ex

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,6 @@ defmodule ElixirLS.LanguageServer.Server do
836836
{:ok, result, state} = handle_request(struct, state)
837837
elapsed = System.monotonic_time(:millisecond) - start_time
838838
# Use request module's result schematic if available (GenLSP requests)
839-
IO.puts(:stderr, "result: #{inspect(result)}")
840839
response_body =
841840
if function_exported?(request_module, :result, 0) do
842841
{:ok, dumped_body} = Schematic.dump(request_module.result(), result)
@@ -873,8 +872,11 @@ defmodule ElixirLS.LanguageServer.Server do
873872
# on error in initialize the protocol requires to respond with
874873
# https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initializeError
875874
# the initialize request can fail on broken OTP installs, no point in retrying
876-
JsonRpc.respond_with_error(id, :internal_error, error_msg, %{
877-
"retry" => false
875+
JsonRpc.respond_with_error(id, :internal_error, error_msg, {
876+
%GenLSP.Structures.InitializeError{
877+
retry: false
878+
},
879+
GenLSP.Structures.InitializeError
878880
})
879881

880882
do_sanity_check(error_msg)
@@ -2127,9 +2129,10 @@ defmodule ElixirLS.LanguageServer.Server do
21272129
case JsonRpc.register_capability_request(
21282130
server_instance_id,
21292131
"workspace/didChangeWatchedFiles",
2130-
%{
2131-
"watchers" => Enum.map(exts, &%{"globPattern" => "**/*" <> &1})
2132-
}
2132+
{%GenLSP.Structures.DidChangeWatchedFilesRegistrationOptions{
2133+
watchers: Enum.map(exts, &%GenLSP.Structures.FileSystemWatcher{glob_pattern: "**/*" <> &1})
2134+
},
2135+
GenLSP.Structures.DidChangeWatchedFilesRegistrationOptions}
21332136
) do
21342137
{:ok, nil} ->
21352138
Logger.info("client/registerCapability succeeded")
@@ -2156,7 +2159,8 @@ defmodule ElixirLS.LanguageServer.Server do
21562159
case JsonRpc.register_capability_request(
21572160
server_instance_id,
21582161
"workspace/didChangeConfiguration",
2159-
%{}
2162+
{%GenLSP.Structures.DidChangeConfigurationRegistrationOptions{},
2163+
GenLSP.Structures.DidChangeConfigurationRegistrationOptions}
21602164
) do
21612165
{:ok, nil} ->
21622166
Logger.info("client/registerCapability succeeded")

apps/language_server/test/server_test.exs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,14 +1308,14 @@ defmodule ElixirLS.LanguageServer.ServerTest do
13081308
test "auto complete", %{server: server} do
13091309
in_fixture(__DIR__, "clean", fn ->
13101310
uri = "file:///file.ex"
1311-
code = ~S(
1312-
defmodule MyModule do
1313-
def my_fn, do: GenSer
1314-
end
1315-
)
1311+
code = """
1312+
defmodule MyModule do
1313+
def my_fn, do: GenServe
1314+
end
1315+
"""
13161316
fake_initialize(server)
13171317
Server.receive_packet(server, did_open(uri, "elixir", 1, code))
1318-
Server.receive_packet(server, completion_req(1, uri, 2, 25))
1318+
Server.receive_packet(server, completion_req(1, uri, 1, 22))
13191319

13201320
resp = assert_receive(%{"id" => 1}, 10000)
13211321

0 commit comments

Comments
 (0)