Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions apps/engine/lib/engine/code_intelligence/entity.ex
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,10 @@ defmodule Engine.CodeIntelligence.Entity do
String.upcase(first_char) == first_char
end

defp expand_alias({:var, ~c"__MODULE__"}, analysis, %Position{} = position) do
Engine.Analyzer.current_module(analysis, position)
end

defp expand_alias({:alias, {:local_or_var, prefix}, charlist}, analysis, %Position{} = position) do
expand_alias(prefix ++ [?.] ++ charlist, analysis, position)
end
Expand Down
44 changes: 44 additions & 0 deletions apps/expert/test/engine/code_intelligence/definition_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,50 @@ defmodule Expert.Engine.CodeIntelligence.DefinitionTest do
assert referenced_uri == subject_uri
end

test "find the function definition when referenced via __MODULE__", %{
project: project,
subject_uri: subject_uri
} do
subject_module = ~q[
defmodule UsesOwnFunction do
def greet do
end

def uses_greet do
__MODULE__.gree|t()
end
end
]

{:ok, referenced_uri, definition_line} = definition(project, subject_module, subject_uri)

assert definition_line == ~S[ def «greet» do]
assert referenced_uri =~ "navigations/lib/my_module.ex"
end

test "find the function definition when alias __MODULE__ is used", %{
project: project,
subject_uri: subject_uri
} do
subject_module = ~q[
defmodule MyApp.UsesOwnFunction do
alias __MODULE__

def greet do
end

def uses_greet do
UsesOwnFunction.gree|t()
end
end
]

{:ok, referenced_uri, definition_line} = definition(project, subject_module, subject_uri)

assert definition_line == ~S[ def «greet» do]
assert referenced_uri =~ "navigations/lib/my_module.ex"
end

test "find the attribute", %{project: project, subject_uri: subject_uri} do
subject_module = ~q[
defmodule UsesAttribute do
Expand Down
Loading