Skip to content

Commit 00765ba

Browse files
authored
use new args_list elixir_sense API (elixir-editors#461)
Fixes elixir-editors#458
1 parent 4ae6e22 commit 00765ba

File tree

3 files changed

+37
-19
lines changed

3 files changed

+37
-19
lines changed

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

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
284284
%{
285285
type: :callback,
286286
subtype: subtype,
287-
args: args,
287+
args_list: args_list,
288288
name: name,
289289
summary: summary,
290290
arity: arity,
@@ -308,7 +308,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
308308
end
309309

310310
opts = Keyword.put(options, :with_parens?, true)
311-
insert_text = def_snippet(def_str, name, args, arity, opts)
311+
insert_text = def_snippet(def_str, name, args_list, arity, opts)
312312
label = "#{def_str}#{name}/#{arity}"
313313

314314
filter_text =
@@ -334,7 +334,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
334334
defp from_completion_item(
335335
%{
336336
type: :protocol_function,
337-
args: args,
337+
args_list: args_list,
338338
spec: _spec,
339339
name: name,
340340
summary: summary,
@@ -349,7 +349,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
349349
def_str = if(context[:def_before] == nil, do: "def ")
350350

351351
opts = Keyword.put(options, :with_parens?, true)
352-
insert_text = def_snippet(def_str, name, args, arity, opts)
352+
insert_text = def_snippet(def_str, name, args_list, arity, opts)
353353
label = "#{def_str}#{name}/#{arity}"
354354

355355
%__MODULE__{
@@ -501,7 +501,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
501501
end
502502
end
503503

504-
defp function_snippet(name, args, arity, opts) do
504+
def function_snippet(name, args, arity, opts) do
505505
snippets_supported? = Keyword.get(opts, :snippets_supported, false)
506506
trigger_signature? = Keyword.get(opts, :trigger_signature?, false)
507507
capture_before? = Keyword.get(opts, :capture_before?, false)
@@ -537,17 +537,15 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
537537
end
538538
end
539539

540-
defp function_snippet_with_args(name, arity, args, pipe_before?, with_parens?) do
540+
defp function_snippet_with_args(name, arity, args_list, pipe_before?, with_parens?) do
541541
args_list =
542-
if args && args != "" do
543-
split_args_for_snippet(args, arity)
544-
else
545-
for i <- Enum.slice(0..arity, 1..-1), do: "arg#{i}"
546-
end
542+
args_list
543+
|> Enum.map(&format_arg_for_snippet/1)
544+
|> remove_unused_default_args(arity)
547545

548546
args_list =
549547
if pipe_before? do
550-
Enum.slice(args_list, 1..-1)
548+
tl(args_list)
551549
else
552550
args_list
553551
end
@@ -651,13 +649,11 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
651649
end
652650
end
653651

654-
defp split_args_for_snippet(args, arity) do
655-
args
652+
defp format_arg_for_snippet(arg) do
653+
arg
656654
|> String.replace("\\", "\\\\")
657655
|> String.replace("$", "\\$")
658656
|> String.replace("}", "\\}")
659-
|> String.split(",")
660-
|> remove_unused_default_args(arity)
661657
end
662658

663659
defp remove_unused_default_args(args, arity) do
@@ -684,6 +680,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
684680
%{
685681
type: type,
686682
args: args,
683+
args_list: args_list,
687684
name: name,
688685
summary: summary,
689686
arity: arity,
@@ -725,13 +722,12 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
725722
insert_text =
726723
function_snippet(
727724
name,
728-
args,
725+
args_list,
729726
arity,
730727
Keyword.merge(
731728
options,
732729
pipe_before?: pipe_before?,
733730
capture_before?: capture_before?,
734-
pipe_before?: pipe_before?,
735731
trigger_signature?: trigger_signature?,
736732
locals_without_parens: locals_without_parens,
737733
text_after_cursor: text_after_cursor,

apps/language_server/test/providers/completion_test.exs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,4 +897,26 @@ defmodule ElixirLS.LanguageServer.Providers.CompletionTest do
897897
}
898898
end
899899
end
900+
901+
describe "function_snippets" do
902+
test "return valid for record arg" do
903+
opts = [
904+
snippets_supported: true,
905+
deprecated_supported: true,
906+
tags_supported: [1],
907+
signature_help_supported: true,
908+
signature_after_complete: true,
909+
pipe_before?: true,
910+
capture_before?: false,
911+
trigger_signature?: false,
912+
locals_without_parens: MapSet.new(),
913+
text_after_cursor: "",
914+
with_parens?: true,
915+
snippet: nil
916+
]
917+
918+
assert "do_sth()" ==
919+
Completion.function_snippet("do_sth", ["My.record(x: x0, y: y0)"], 1, opts)
920+
end
921+
end
900922
end

mix.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
%{
22
"dialyxir": {:hex, :dialyxir, "1.0.0", "6a1fa629f7881a9f5aaf3a78f094b2a51a0357c843871b8bc98824e7342d00a5", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "aeb06588145fac14ca08d8061a142d52753dbc2cf7f0d00fc1013f53f8654654"},
33
"docsh": {:hex, :docsh, "0.7.2", "f893d5317a0e14269dd7fe79cf95fb6b9ba23513da0480ec6e77c73221cae4f2", [:rebar3], [{:providers, "1.8.1", [hex: :providers, repo: "hexpm", optional: false]}], "hexpm", "4e7db461bb07540d2bc3d366b8513f0197712d0495bb85744f367d3815076134"},
4-
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "a8c6a127163e87025b74b12ed150bd30c09f9955", []},
4+
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "0fce2bb501b846d71c653ad8fb4275ef15777db0", []},
55
"erl2ex": {:git, "https://github.com/dazuma/erl2ex.git", "244c2d9ed5805ef4855a491d8616b8842fef7ca4", []},
66
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
77
"forms": {:hex, :forms, "0.0.1", "45f3b10b6f859f95f2c2c1a1de244d63855296d55ed8e93eb0dd116b3e86c4a6", [:rebar3], [], "hexpm", "530f63ed8ed5a171f744fc75bd69cb2e36496899d19dbef48101b4636b795868"},

0 commit comments

Comments
 (0)