Skip to content

Commit

Permalink
update elixir_sense
Browse files Browse the repository at this point in the history
improve attribute completions
Fixes #935
Fixes #936
  • Loading branch information
lukaszsamson committed Jul 7, 2023
1 parent 67be7e6 commit 303dafb
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 52 deletions.
2 changes: 1 addition & 1 deletion apps/elixir_ls_debugger/lib/debugger/server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -1157,7 +1157,7 @@ defmodule ElixirLS.Debugger.Server do
metadata = ElixirSense.Core.Parser.parse_file(path, false, false, nil)

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

if env.module == nil do
{:error, "Could not determine module at line"}
Expand Down
41 changes: 22 additions & 19 deletions apps/language_server/lib/language_server/providers/completion.ex
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
# Can we use ElixirSense.Providers.Suggestion? ElixirSense.suggestions/3
metadata = ElixirSense.Core.Parser.parse_string(text, true, true, line)

env =
metadata
|> ElixirSense.Core.Metadata.get_env(line)
env = ElixirSense.Core.Metadata.get_env(metadata, {line, character})

scope =
case env.scope do
Expand Down Expand Up @@ -147,7 +145,8 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
}

position_to_insert_alias =
ElixirSense.Core.Metadata.get_position_to_insert_alias(metadata, line) || {line, 0}
ElixirSense.Core.Metadata.get_position_to_insert_alias(metadata, {line, character}) ||
{line, 1}

context =
Map.put(
Expand Down Expand Up @@ -243,7 +242,7 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
end

defp from_completion_item(
%{type: :attribute, name: name},
%{type: :attribute, name: name, summary: summary},
%{
prefix: prefix,
def_before: nil,
Expand All @@ -253,21 +252,25 @@ defmodule ElixirLS.LanguageServer.Providers.Completion do
_options
) do
name_only = String.trim_leading(name, "@")
insert_text = if String.starts_with?(prefix, "@"), do: name_only, else: name

if name == prefix do
nil
else
%__MODULE__{
label: name,
kind: :variable,
detail: "module attribute",
insert_text: insert_text,
filter_text: name_only,
priority: 14,
tags: []
}
insert_text = case String.split(prefix, "@") do
[_ | attribute_prefix] -> if String.starts_with?(name_only, attribute_prefix) do
name_only
else
name
end
_ -> name
end

%__MODULE__{
label: name,
kind: :variable,
detail: "module attribute",
documentation: name <> "\n" <> (if summary, do: summary, else: ""),
insert_text: insert_text,
filter_text: name_only,
priority: 14,
tags: []
}
end

defp from_completion_item(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ defmodule ElixirLS.Experimental.Provider.Handlers.GotoDefinitionTest do

assert definition.uri == uri
assert definition.range.start.line == 1
assert definition.range.start.character == 6
assert definition.range.start.character == 2
assert definition.range.end.line == 1
assert definition.range.end.character == 6
assert definition.range.end.character == 2
end

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

assert definition.uri == uri
assert definition.range.start.line == 8
assert definition.range.start.character == 11
assert definition.range.start.character == 2
assert definition.range.end.line == 8
assert definition.range.end.character == 11
assert definition.range.end.character == 2
end

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

assert definition.uri == uri
assert definition.range.start.line == 1
assert definition.range.start.character == 6
assert definition.range.start.character == 2
assert definition.range.end.line == 1
assert definition.range.end.character == 6
assert definition.range.end.character == 2
end

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

assert definition.uri == uri
assert definition.range.start.line == 8
assert definition.range.start.character == 11
assert definition.range.start.character == 2
assert definition.range.end.line == 8
assert definition.range.end.character == 11
assert definition.range.end.character == 2
end

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

assert definition.uri == uri
assert definition.range.start.line == 1
assert definition.range.start.character == 6
assert definition.range.start.character == 2
assert definition.range.end.line == 1
assert definition.range.end.character == 6
assert definition.range.end.character == 2
end

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

assert definition.uri == uri
assert definition.range.start.line == 8
assert definition.range.start.character == 11
assert definition.range.start.character == 2
assert definition.range.end.line == 8
assert definition.range.end.character == 11
assert definition.range.end.character == 2
end

test "find definition variable", %{file_uri: uri} do
Expand Down
24 changes: 12 additions & 12 deletions apps/language_server/test/providers/definition_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ defmodule ElixirLS.LanguageServer.Providers.DefinitionTest do
Definition.definition(uri, text, line, char)

assert range == %{
"start" => %{"line" => 1, "character" => 6},
"end" => %{"line" => 1, "character" => 6}
"start" => %{"line" => 1, "character" => 2},
"end" => %{"line" => 1, "character" => 2}
}
end

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

assert range == %{
"start" => %{"line" => 8, "character" => 11},
"end" => %{"line" => 8, "character" => 11}
"start" => %{"line" => 8, "character" => 2},
"end" => %{"line" => 8, "character" => 2}
}
end

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

assert range == %{
"start" => %{"line" => 1, "character" => 6},
"end" => %{"line" => 1, "character" => 6}
"start" => %{"line" => 1, "character" => 2},
"end" => %{"line" => 1, "character" => 2}
}
end

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

assert range == %{
"start" => %{"line" => 8, "character" => 11},
"end" => %{"line" => 8, "character" => 11}
"start" => %{"line" => 8, "character" => 2},
"end" => %{"line" => 8, "character" => 2}
}
end

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

assert range == %{
"start" => %{"line" => 1, "character" => 6},
"end" => %{"line" => 1, "character" => 6}
"start" => %{"line" => 1, "character" => 2},
"end" => %{"line" => 1, "character" => 2}
}
end

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

assert range == %{
"start" => %{"line" => 8, "character" => 11},
"end" => %{"line" => 8, "character" => 11}
"start" => %{"line" => 8, "character" => 2},
"end" => %{"line" => 8, "character" => 2}
}
end

Expand Down
4 changes: 2 additions & 2 deletions apps/language_server/test/providers/implementation_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ defmodule ElixirLS.LanguageServer.Providers.ImplementationTest do

assert range ==
%{
"start" => %{"line" => 5, "character" => 10},
"end" => %{"line" => 5, "character" => 10}
"start" => %{"line" => 5, "character" => 0},
"end" => %{"line" => 5, "character" => 0}
}
end
end
6 changes: 2 additions & 4 deletions apps/language_server/test/server_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -767,15 +767,13 @@ defmodule ElixirLS.LanguageServer.ServerTest do
assert_receive(
response(1, %{
"range" => %{
"end" => %{"character" => column, "line" => 0},
"start" => %{"character" => column, "line" => 0}
"end" => %{"character" => 0, "line" => 0},
"start" => %{"character" => 0, "line" => 0}
},
"uri" => ^uri
}),
3000
)

assert column > 0
end

test "definition not found", %{server: server} do
Expand Down
2 changes: 1 addition & 1 deletion dep_versions.exs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[
elixir_sense: "a50b8b616833fac6b45dbb65d6a8c6d9fda3a038",
elixir_sense: "3aea5e26d71d00c160033bd86451b11a69424b9d",
dialyxir_vendored: "7e908b4d760c7329046e0ee3076be9156cd784e1",
jason_v: "c81537e2a5e1acacb915cf339fe400357e3c2aaa"
]
2 changes: 1 addition & 1 deletion mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"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"},
"deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"},
"dialyxir_vendored": {:git, "https://github.com/elixir-lsp/dialyxir.git", "7e908b4d760c7329046e0ee3076be9156cd784e1", [ref: "7e908b4d760c7329046e0ee3076be9156cd784e1"]},
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "a50b8b616833fac6b45dbb65d6a8c6d9fda3a038", [ref: "a50b8b616833fac6b45dbb65d6a8c6d9fda3a038"]},
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "3aea5e26d71d00c160033bd86451b11a69424b9d", [ref: "3aea5e26d71d00c160033bd86451b11a69424b9d"]},
"erl2ex": {:git, "https://github.com/dazuma/erl2ex.git", "244c2d9ed5805ef4855a491d8616b8842fef7ca4", []},
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"jason_v": {:git, "https://github.com/elixir-lsp/jason.git", "c81537e2a5e1acacb915cf339fe400357e3c2aaa", [ref: "c81537e2a5e1acacb915cf339fe400357e3c2aaa"]},
Expand Down

0 comments on commit 303dafb

Please sign in to comment.