Skip to content

Commit cb3f10b

Browse files
authored
refactor: simplify infer module code (#399)
1 parent 4151895 commit cb3f10b

File tree

3 files changed

+30
-57
lines changed

3 files changed

+30
-57
lines changed

lib/next_ls.ex

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -580,22 +580,21 @@ defmodule NextLS do
580580
|> Enum.reverse()
581581
|> Enum.join("\n")
582582

583-
results =
584-
lsp.assigns.registry
585-
|> dispatch(:runtimes, fn entries ->
586-
[result] =
583+
{root_path, entries} =
584+
dispatch(lsp.assigns.registry, :runtimes, fn entries ->
585+
[{wuri, result}] =
587586
for {runtime, %{uri: wuri}} <- entries, String.starts_with?(uri, wuri) do
588-
document_slice
589-
|> String.to_charlist()
590-
|> Enum.reverse()
591-
|> NextLS.Autocomplete.expand(runtime, env)
587+
{wuri, document_slice |> String.to_charlist() |> Enum.reverse() |> NextLS.Autocomplete.expand(runtime, env)}
592588
end
593589

594590
case result do
595-
{:yes, entries} -> entries
596-
_ -> []
591+
{:yes, entries} -> {wuri, entries}
592+
_ -> {wuri, []}
597593
end
598594
end)
595+
596+
results =
597+
entries
599598
|> Enum.reduce([], fn %{name: name, kind: kind} = symbol, results ->
600599
{label, kind, docs} =
601600
case kind do
@@ -617,7 +616,9 @@ defmodule NextLS do
617616
documentation: docs
618617
}
619618

620-
case NextLS.Snippet.get(label, nil, uri: uri) do
619+
root_path = root_path |> URI.parse() |> Map.get(:path)
620+
621+
case NextLS.Snippet.get(label, nil, uri: Path.relative_to(URI.parse(uri).path, root_path)) do
621622
nil -> [completion_item | results]
622623
%{} = snippet -> [Map.merge(completion_item, snippet) | results]
623624
end

lib/next_ls/snippet.ex

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ defmodule NextLS.Snippet do
44
def get(label, trigger_character, opts \\ [])
55

66
def get("defmodule/2", nil, opts) do
7-
uri = Keyword.get(opts, :uri)
7+
path = Keyword.get(opts, :uri)
88

99
modulename =
10-
if uri do
11-
infer_module_name(uri)
10+
if path do
11+
infer_module_name(path)
1212
else
1313
"ModuleName"
1414
end
@@ -186,43 +186,15 @@ defmodule NextLS.Snippet do
186186
nil
187187
end
188188

189-
defp infer_module_name(uri) do
190-
result =
191-
uri
192-
|> Path.split()
193-
|> Enum.reduce(false, fn
194-
"lib", _ ->
195-
{:lib, []}
196-
197-
"test", _ ->
198-
{:test, []}
199-
200-
"support", {:test, _} ->
201-
{:lib, []}
202-
203-
_, false ->
204-
false
205-
206-
element, {type, elements} ->
207-
camelized =
208-
element
209-
|> Path.rootname()
210-
|> Macro.camelize()
211-
212-
{type, [camelized | elements]}
213-
end)
214-
215-
case result do
216-
{_, parts} ->
217-
parts
218-
|> Enum.reverse()
219-
|> Enum.join(".")
220-
221-
false ->
222-
uri
223-
|> Path.basename()
224-
|> Path.rootname()
225-
|> Macro.camelize()
226-
end
189+
defp infer_module_name(path) do
190+
path
191+
|> Path.rootname()
192+
|> then(fn
193+
"test/support/" <> rest -> rest
194+
"test/" <> rest -> rest
195+
"lib/" <> rest -> rest
196+
path -> path
197+
end)
198+
|> Macro.camelize()
227199
end
228200
end

test/next_ls/snippet_test.exs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,27 @@ defmodule NextLS.SnippetTest do
66
describe "defmodule snippet" do
77
test "simple module" do
88
assert %{insert_text: "defmodule ${1:Foo} do\n $0\nend\n", insert_text_format: 2, kind: 15} ==
9-
Snippet.get("defmodule/2", nil, uri: "file:///my_proj/lib/foo.ex")
9+
Snippet.get("defmodule/2", nil, uri: "lib/foo.ex")
1010
end
1111

1212
test "nested module" do
1313
assert %{insert_text: "defmodule ${1:Foo.Bar.Baz} do\n $0\nend\n", insert_text_format: 2, kind: 15} ==
14-
Snippet.get("defmodule/2", nil, uri: "file:///my_proj/lib/foo/bar/baz.ex")
14+
Snippet.get("defmodule/2", nil, uri: "lib/foo/bar/baz.ex")
1515
end
1616

1717
test "test module" do
1818
assert %{insert_text: "defmodule ${1:FooTest} do\n $0\nend\n", insert_text_format: 2, kind: 15} ==
19-
Snippet.get("defmodule/2", nil, uri: "file:///my_proj/test/foo_test.exs")
19+
Snippet.get("defmodule/2", nil, uri: "test/foo_test.exs")
2020
end
2121

2222
test "support test module" do
2323
assert %{insert_text: "defmodule ${1:Foo} do\n $0\nend\n", insert_text_format: 2, kind: 15} ==
24-
Snippet.get("defmodule/2", nil, uri: "file:///my_proj/test/support/foo.ex")
24+
Snippet.get("defmodule/2", nil, uri: "test/support/foo.ex")
2525
end
2626

2727
test "module outside canonical folders" do
2828
assert %{insert_text: "defmodule ${1:Foo} do\n $0\nend\n", insert_text_format: 2, kind: 15} ==
29-
Snippet.get("defmodule/2", nil, uri: "file:///my_proj/foo.ex")
29+
Snippet.get("defmodule/2", nil, uri: "foo.ex")
3030
end
3131

3232
test "without uri" do

0 commit comments

Comments
 (0)