Skip to content

Commit 16d9fec

Browse files
Add end keyword to completions
1 parent 879aed9 commit 16d9fec

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
138138
|> maybe_reject_derived_functions(context, options)
139139
|> Enum.map(&from_completion_item(&1, context, options))
140140
|> maybe_add_do(context)
141+
|> maybe_add_end(context)
141142

142143
items_json =
143144
items
@@ -166,6 +167,23 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
166167
end
167168
end
168169

170+
defp maybe_add_end(completion_items, context) do
171+
if String.ends_with?(context.text_before_cursor, "end") && context.text_after_cursor == "" do
172+
item = %__MODULE__{
173+
label: "end",
174+
kind: :keyword,
175+
detail: "keyword",
176+
insert_text: "end",
177+
tags: [],
178+
priority: 0
179+
}
180+
181+
[item | completion_items]
182+
else
183+
completion_items
184+
end
185+
end
186+
169187
## Helpers
170188

171189
defp is_incomplete(items) do

apps/language_server/test/providers/completion_test.exs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,36 @@ defmodule ElixirLS.LanguageServer.Providers.CompletionTest do
5151
assert first_item["label"] == "do"
5252
end
5353

54+
test "end is returned" do
55+
text = """
56+
defmodule MyModule do
57+
require Logger
58+
59+
def enlarged_delta, do: :delta
60+
61+
def fun do
62+
:ok
63+
end
64+
# ^
65+
end
66+
"""
67+
68+
{line, char} = {7, 5}
69+
TestUtils.assert_has_cursor_char(text, line, char)
70+
71+
{:ok, %{"items" => [first_item | items]}} =
72+
Completion.completion(text, line, char, @supports)
73+
74+
assert first_item["label"] == "end"
75+
76+
completions =
77+
items
78+
|> Enum.filter(&(&1["detail"] =~ "enlarged_delta"))
79+
|> Enum.map(& &1["insertText"])
80+
81+
assert completions == ["enlarged_delta()"]
82+
end
83+
5484
test "returns all Logger completions on normal require" do
5585
text = """
5686
defmodule MyModule do

0 commit comments

Comments
 (0)