Skip to content

Commit 303dafb

Browse files
committed
update elixir_sense
improve attribute completions Fixes #935 Fixes #936
1 parent 67be7e6 commit 303dafb

File tree

8 files changed

+53
-52
lines changed

8 files changed

+53
-52
lines changed

apps/elixir_ls_debugger/lib/debugger/server.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1157,7 +1157,7 @@ defmodule ElixirLS.Debugger.Server do
11571157
metadata = ElixirSense.Core.Parser.parse_file(path, false, false, nil)
11581158

11591159
for line <- lines do
1160-
env = ElixirSense.Core.Metadata.get_env(metadata, line |> elem(0))
1160+
env = ElixirSense.Core.Metadata.get_env(metadata, {line |> elem(0), 1})
11611161

11621162
if env.module == nil do
11631163
{:error, "Could not determine module at line"}

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

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
107107
# Can we use ElixirSense.Providers.Suggestion? ElixirSense.suggestions/3
108108
metadata = ElixirSense.Core.Parser.parse_string(text, true, true, line)
109109

110-
env =
111-
metadata
112-
|> ElixirSense.Core.Metadata.get_env(line)
110+
env = ElixirSense.Core.Metadata.get_env(metadata, {line, character})
113111

114112
scope =
115113
case env.scope do
@@ -147,7 +145,8 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
147145
}
148146

149147
position_to_insert_alias =
150-
ElixirSense.Core.Metadata.get_position_to_insert_alias(metadata, line) || {line, 0}
148+
ElixirSense.Core.Metadata.get_position_to_insert_alias(metadata, {line, character}) ||
149+
{line, 1}
151150

152151
context =
153152
Map.put(
@@ -243,7 +242,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
243242
end
244243

245244
defp from_completion_item(
246-
%{type: :attribute, name: name},
245+
%{type: :attribute, name: name, summary: summary},
247246
%{
248247
prefix: prefix,
249248
def_before: nil,
@@ -253,21 +252,25 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
253252
_options
254253
) do
255254
name_only = String.trim_leading(name, "@")
256-
insert_text = if String.starts_with?(prefix, "@"), do: name_only, else: name
257-
258-
if name == prefix do
259-
nil
260-
else
261-
%__MODULE__{
262-
label: name,
263-
kind: :variable,
264-
detail: "module attribute",
265-
insert_text: insert_text,
266-
filter_text: name_only,
267-
priority: 14,
268-
tags: []
269-
}
255+
insert_text = case String.split(prefix, "@") do
256+
[_ | attribute_prefix] -> if String.starts_with?(name_only, attribute_prefix) do
257+
name_only
258+
else
259+
name
260+
end
261+
_ -> name
270262
end
263+
264+
%__MODULE__{
265+
label: name,
266+
kind: :variable,
267+
detail: "module attribute",
268+
documentation: name <> "\n" <> (if summary, do: summary, else: ""),
269+
insert_text: insert_text,
270+
filter_text: name_only,
271+
priority: 14,
272+
tags: []
273+
}
271274
end
272275

273276
defp from_completion_item(

apps/language_server/test/experimental/provider/handlers/goto_definition_test.exs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
6060

6161
assert definition.uri == uri
6262
assert definition.range.start.line == 1
63-
assert definition.range.start.character == 6
63+
assert definition.range.start.character == 2
6464
assert definition.range.end.line == 1
65-
assert definition.range.end.character == 6
65+
assert definition.range.end.character == 2
6666
end
6767

6868
test "find definition remote macro call", %{file_uri: uri} do
@@ -80,9 +80,9 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
8080

8181
assert definition.uri == uri
8282
assert definition.range.start.line == 8
83-
assert definition.range.start.character == 11
83+
assert definition.range.start.character == 2
8484
assert definition.range.end.line == 8
85-
assert definition.range.end.character == 11
85+
assert definition.range.end.character == 2
8686
end
8787

8888
test "find definition imported function call", %{file_uri: uri} do
@@ -100,9 +100,9 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
100100

101101
assert definition.uri == uri
102102
assert definition.range.start.line == 1
103-
assert definition.range.start.character == 6
103+
assert definition.range.start.character == 2
104104
assert definition.range.end.line == 1
105-
assert definition.range.end.character == 6
105+
assert definition.range.end.character == 2
106106
end
107107

108108
test "find definition imported macro call", %{file_uri: uri} do
@@ -120,9 +120,9 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
120120

121121
assert definition.uri == uri
122122
assert definition.range.start.line == 8
123-
assert definition.range.start.character == 11
123+
assert definition.range.start.character == 2
124124
assert definition.range.end.line == 8
125-
assert definition.range.end.character == 11
125+
assert definition.range.end.character == 2
126126
end
127127

128128
test "find definition local function call", %{file_uri: uri} do
@@ -140,9 +140,9 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
140140

141141
assert definition.uri == uri
142142
assert definition.range.start.line == 1
143-
assert definition.range.start.character == 6
143+
assert definition.range.start.character == 2
144144
assert definition.range.end.line == 1
145-
assert definition.range.end.character == 6
145+
assert definition.range.end.character == 2
146146
end
147147

148148
test "find definition local macro call", %{file_uri: uri} do
@@ -160,9 +160,9 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do
160160

161161
assert definition.uri == uri
162162
assert definition.range.start.line == 8
163-
assert definition.range.start.character == 11
163+
assert definition.range.start.character == 2
164164
assert definition.range.end.line == 8
165-
assert definition.range.end.character == 11
165+
assert definition.range.end.character == 2
166166
end
167167

168168
test "find definition variable", %{file_uri: uri} do

apps/language_server/test/providers/definition_test.exs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ defmodule ElixirLS.LanguageServer.Providers.DefinitionTest do
2626
Definition.definition(uri, text, line, char)
2727

2828
assert range == %{
29-
"start" => %{"line" => 1, "character" => 6},
30-
"end" => %{"line" => 1, "character" => 6}
29+
"start" => %{"line" => 1, "character" => 2},
30+
"end" => %{"line" => 1, "character" => 2}
3131
}
3232
end
3333

@@ -50,8 +50,8 @@ defmodule ElixirLS.LanguageServer.Providers.DefinitionTest do
5050
Definition.definition(uri, text, line, char)
5151

5252
assert range == %{
53-
"start" => %{"line" => 8, "character" => 11},
54-
"end" => %{"line" => 8, "character" => 11}
53+
"start" => %{"line" => 8, "character" => 2},
54+
"end" => %{"line" => 8, "character" => 2}
5555
}
5656
end
5757

@@ -74,8 +74,8 @@ defmodule ElixirLS.LanguageServer.Providers.DefinitionTest do
7474
Definition.definition(uri, text, line, char)
7575

7676
assert range == %{
77-
"start" => %{"line" => 1, "character" => 6},
78-
"end" => %{"line" => 1, "character" => 6}
77+
"start" => %{"line" => 1, "character" => 2},
78+
"end" => %{"line" => 1, "character" => 2}
7979
}
8080
end
8181

@@ -98,8 +98,8 @@ defmodule ElixirLS.LanguageServer.Providers.DefinitionTest do
9898
Definition.definition(uri, text, line, char)
9999

100100
assert range == %{
101-
"start" => %{"line" => 8, "character" => 11},
102-
"end" => %{"line" => 8, "character" => 11}
101+
"start" => %{"line" => 8, "character" => 2},
102+
"end" => %{"line" => 8, "character" => 2}
103103
}
104104
end
105105

@@ -122,8 +122,8 @@ defmodule ElixirLS.LanguageServer.Providers.DefinitionTest do
122122
Definition.definition(uri, text, line, char)
123123

124124
assert range == %{
125-
"start" => %{"line" => 1, "character" => 6},
126-
"end" => %{"line" => 1, "character" => 6}
125+
"start" => %{"line" => 1, "character" => 2},
126+
"end" => %{"line" => 1, "character" => 2}
127127
}
128128
end
129129

@@ -146,8 +146,8 @@ defmodule ElixirLS.LanguageServer.Providers.DefinitionTest do
146146
Definition.definition(uri, text, line, char)
147147

148148
assert range == %{
149-
"start" => %{"line" => 8, "character" => 11},
150-
"end" => %{"line" => 8, "character" => 11}
149+
"start" => %{"line" => 8, "character" => 2},
150+
"end" => %{"line" => 8, "character" => 2}
151151
}
152152
end
153153

apps/language_server/test/providers/implementation_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ defmodule ElixirLS.LanguageServer.Providers.ImplementationTest do
2828

2929
assert range ==
3030
%{
31-
"start" => %{"line" => 5, "character" => 10},
32-
"end" => %{"line" => 5, "character" => 10}
31+
"start" => %{"line" => 5, "character" => 0},
32+
"end" => %{"line" => 5, "character" => 0}
3333
}
3434
end
3535
end

apps/language_server/test/server_test.exs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -767,15 +767,13 @@ defmodule ElixirLS.LanguageServer.ServerTest do
767767
assert_receive(
768768
response(1, %{
769769
"range" => %{
770-
"end" => %{"character" => column, "line" => 0},
771-
"start" => %{"character" => column, "line" => 0}
770+
"end" => %{"character" => 0, "line" => 0},
771+
"start" => %{"character" => 0, "line" => 0}
772772
},
773773
"uri" => ^uri
774774
}),
775775
3000
776776
)
777-
778-
assert column > 0
779777
end
780778

781779
test "definition not found", %{server: server} do

dep_versions.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[
2-
elixir_sense: "a50b8b616833fac6b45dbb65d6a8c6d9fda3a038",
2+
elixir_sense: "3aea5e26d71d00c160033bd86451b11a69424b9d",
33
dialyxir_vendored: "7e908b4d760c7329046e0ee3076be9156cd784e1",
44
jason_v: "c81537e2a5e1acacb915cf339fe400357e3c2aaa"
55
]

mix.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"},
33
"deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"},
44
"dialyxir_vendored": {:git, "https://github.com/elixir-lsp/dialyxir.git", "7e908b4d760c7329046e0ee3076be9156cd784e1", [ref: "7e908b4d760c7329046e0ee3076be9156cd784e1"]},
5-
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "a50b8b616833fac6b45dbb65d6a8c6d9fda3a038", [ref: "a50b8b616833fac6b45dbb65d6a8c6d9fda3a038"]},
5+
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "3aea5e26d71d00c160033bd86451b11a69424b9d", [ref: "3aea5e26d71d00c160033bd86451b11a69424b9d"]},
66
"erl2ex": {:git, "https://github.com/dazuma/erl2ex.git", "244c2d9ed5805ef4855a491d8616b8842fef7ca4", []},
77
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
88
"jason_v": {:git, "https://github.com/elixir-lsp/jason.git", "c81537e2a5e1acacb915cf339fe400357e3c2aaa", [ref: "c81537e2a5e1acacb915cf339fe400357e3c2aaa"]},

0 commit comments

Comments
 (0)