Only escape contents outside of interpolation, closes #9812

This commit is contained in:
José Valim
2020-02-12 20:51:58 +01:00
parent 089c470e13
commit 090dddcf00
2 changed files with 12 additions and 3 deletions
+5 -3
View File
@@ -1022,11 +1022,13 @@ defmodule Macro do
binary when is_binary(binary) ->
binary = inspect_no_limit(binary)
binary_part(binary, 1, byte_size(binary) - 2)
binary
|> binary_part(1, byte_size(binary) - 2)
|> escape_sigil(left)
end)
escaped = escape_sigil(parts, left)
<<left::binary, escaped::binary, right::binary>>
<<left::binary, parts::binary, right::binary>>
end
defp escape_sigil(parts, "("), do: String.replace(parts, ")", ~S"\)")
+7
View File
@@ -344,6 +344,7 @@ defmodule MacroTest do
assert Macro.to_string(quote(do: ~R"\n123")) == ~S/~R"\n123"/
assert Macro.to_string(quote(do: ~S["'(123)'"])) == ~S/~S["'(123)'"]/
assert Macro.to_string(quote(do: ~s"#{"foo"}")) == ~S/~s"#{"foo"}"/
assert Macro.to_string(
quote do
@@ -704,6 +705,12 @@ defmodule MacroTest do
assert Macro.to_string(quote(do: 'abc')) == "'abc'"
end
test "string" do
assert Macro.to_string(quote(do: "")) == ~S/""/
assert Macro.to_string(quote(do: "abc")) == ~S/"abc"/
assert Macro.to_string(quote(do: "#{"abc"}")) == ~S/"#{"abc"}"/
end
test "last arg keyword list" do
assert Macro.to_string(quote(do: foo([]))) == "foo([])"
assert Macro.to_string(quote(do: foo(x: y))) == "foo(x: y)"