diff --git a/lib/lunary.ex b/lib/lunary.ex index 00beb86..73cae44 100644 --- a/lib/lunary.ex +++ b/lib/lunary.ex @@ -130,7 +130,7 @@ defmodule Lunary do defp evaluate({:func_access, index, {:fn, {:identifier, fn_line, fn_id}, fn_args}}, scope, opts) do {func_scope, _} = evaluate(index, scope, opts) - merged_scope = Map.merge(func_scope, scope) + merged_scope = Map.merge(scope, func_scope) # function scope takes priority evaluate({:fn, {:identifier, fn_line, fn_id}, fn_args}, merged_scope, opts) end diff --git a/test/unit/chain_test.exs b/test/unit/chain_test.exs index 7463655..59d75cb 100644 --- a/test/unit/chain_test.exs +++ b/test/unit/chain_test.exs @@ -117,7 +117,6 @@ defmodule ChainTest do " |> Lunary.Main.eval(%{}, %{ path: "test/fixtures/" }) == 100 end - # @tag :skip test "can use nested module functions" do assert " mod @example ( diff --git a/test/unit/module_test.exs b/test/unit/module_test.exs index 24503c5..9ad6811 100644 --- a/test/unit/module_test.exs +++ b/test/unit/module_test.exs @@ -103,5 +103,15 @@ defmodule ModuleTest do @example.test(@example.a(5), 1) " |> Lunary.Main.eval(%{}, %{ path: "test/fixtures/" }) == 106 end + + test "can have functions with the same name as a local identifier" do + assert " + mod @example ( + fn test (param) -> (param + 10) + ) + test = 5 + @example.test(5) + " |> Lunary.Main.eval() == 15 + end end end