@@ -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