Skip to content

Commit 44566c3

Browse files
committed
port upstream changes
1 parent eade711 commit 44566c3

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

lib/elixir_sense/core/compiler/quote.ex

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -528,18 +528,25 @@ defmodule ElixirSense.Core.Compiler.Quote do
528528
end
529529

530530
defp do_escape(map, q, state) when is_map(map) do
531-
# elixir errors if value is reference
532-
keys = map
533-
|> Map.to_list
534-
|> Enum.filter(fn
535-
{_k, v} when is_reference(v) -> false
536-
{_k, v} when is_tuple(v) ->
537-
not find_tuple_ref(v, 0)
538-
_ -> true
539-
end)
540-
|> Enum.sort
541-
{tt, state} = do_quote(keys, q, state)
542-
{{:%{}, [], tt}, state}
531+
with %{__struct__: module} when is_atom(module) <- map,
532+
true <- Code.ensure_loaded?(module),
533+
true <- function_exported?(module, :__escape__, 1) do
534+
module.__escape__(map)
535+
else
536+
_ ->
537+
# elixir errors if value is reference
538+
keys = map
539+
|> Map.to_list
540+
|> Enum.filter(fn
541+
{_k, v} when is_reference(v) -> false
542+
{_k, v} when is_tuple(v) ->
543+
not find_tuple_ref(v, 0)
544+
_ -> true
545+
end)
546+
|> Enum.sort
547+
{tt, state} = do_quote(keys, q, state)
548+
{{:%{}, [], tt}, state}
549+
end
543550
end
544551

545552
defp do_escape([], _, state), do: {[], state}

0 commit comments

Comments
 (0)