Skip to content

Commit fc25f60

Browse files
author
José Valim
committed
Do not remove interpolation escape on uppercase sigils, closes #2512
1 parent 3b351e7 commit fc25f60

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

lib/elixir/src/elixir_interpolation.erl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,8 @@ extract(Line, Scope, Interpol, [$\\, $\r, $\n|Rest], Buffer, Output, Last) ->
3333
extract(Line, Scope, Interpol, [$\n|Rest], Buffer, Output, Last) ->
3434
extract(Line+1, Scope, Interpol, Rest, [$\n|Buffer], Output, Last);
3535

36-
extract(Line, Scope, Interpol, [$\\, $#, ${|Rest], Buffer, Output, Last) ->
37-
extract(Line, Scope, Interpol, Rest, [${,$#|Buffer], Output, Last);
38-
39-
extract(Line, Scope, Interpol, [$\\,Char|Rest], Buffer, Output, Last) ->
40-
extract(Line, Scope, Interpol, Rest, [Char,$\\|Buffer], Output, Last);
36+
extract(Line, Scope, true, [$\\, $#, ${|Rest], Buffer, Output, Last) ->
37+
extract(Line, Scope, true, Rest, [${,$#|Buffer], Output, Last);
4138

4239
extract(Line, Scope, true, [$#, ${|Rest], Buffer, Output, Last) ->
4340
Output1 = build_string(Line, Buffer, Output),
@@ -52,6 +49,9 @@ extract(Line, Scope, true, [$#, ${|Rest], Buffer, Output, Last) ->
5249
{error, {string, Line, "missing interpolation terminator:}", []}}
5350
end;
5451

52+
extract(Line, Scope, Interpol, [$\\,Char|Rest], Buffer, Output, Last) ->
53+
extract(Line, Scope, Interpol, Rest, [Char,$\\|Buffer], Output, Last);
54+
5555
%% Catch all clause
5656

5757
extract(Line, Scope, Interpol, [Char|Rest], Buffer, Output, Last) ->

lib/elixir/test/elixir/kernel/sigils_test.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ defmodule Kernel.SigilsTest do
2525
assert ~S/foo/ == "foo"
2626
assert ~S|foo| == "foo"
2727
assert ~S(f#{o}o) == "f\#{o}o"
28+
assert ~S(f\#{o}o) == "f\\\#{o}o"
2829
assert ~S(f\no) == "f\\no"
2930
end
3031

lib/ex_unit/test/ex_unit/doc_test_test.exs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ defmodule ExUnit.DocTestTest.GoodModule do
1111
"""
1212
def test_fun, do: 1
1313

14+
@doc ~S"""
15+
iex> ~S(f#{o}o)
16+
"f\#{o}o"
17+
"""
18+
def test_sigil, do: :ok
19+
1420
@doc """
1521
iex> a = 1
1622
iex> b = a + 2
@@ -203,58 +209,58 @@ defmodule ExUnit.DocTestTest do
203209

204210
assert output =~ """
205211
1) test moduledoc at ExUnit.DocTestTest.Invalid (1) (ExUnit.DocTestTest.ActuallyCompiled)
206-
test/ex_unit/doc_test_test.exs:198
207-
Doctest did not compile, got: (SyntaxError) test/ex_unit/doc_test_test.exs:106: syntax error before: '*'
212+
test/ex_unit/doc_test_test.exs:204
213+
Doctest did not compile, got: (SyntaxError) test/ex_unit/doc_test_test.exs:112: syntax error before: '*'
208214
code: 1 + * 1
209215
stacktrace:
210-
test/ex_unit/doc_test_test.exs:106: ExUnit.DocTestTest.Invalid (module)
216+
test/ex_unit/doc_test_test.exs:112: ExUnit.DocTestTest.Invalid (module)
211217
"""
212218

213219
assert output =~ """
214220
2) test moduledoc at ExUnit.DocTestTest.Invalid (2) (ExUnit.DocTestTest.ActuallyCompiled)
215-
test/ex_unit/doc_test_test.exs:198
221+
test/ex_unit/doc_test_test.exs:204
216222
Doctest failed
217223
code: 1 + hd(List.flatten([1])) === 3
218224
lhs: 2
219225
stacktrace:
220-
test/ex_unit/doc_test_test.exs:106: ExUnit.DocTestTest.Invalid (module)
226+
test/ex_unit/doc_test_test.exs:112: ExUnit.DocTestTest.Invalid (module)
221227
"""
222228

223229
assert output =~ """
224230
3) test moduledoc at ExUnit.DocTestTest.Invalid (3) (ExUnit.DocTestTest.ActuallyCompiled)
225-
test/ex_unit/doc_test_test.exs:198
231+
test/ex_unit/doc_test_test.exs:204
226232
Doctest failed
227233
code: inspect(:oops) === "#HashDict<[]>"
228234
lhs: ":oops"
229235
stacktrace:
230-
test/ex_unit/doc_test_test.exs:106: ExUnit.DocTestTest.Invalid (module)
236+
test/ex_unit/doc_test_test.exs:112: ExUnit.DocTestTest.Invalid (module)
231237
"""
232238

233239
assert output =~ """
234240
4) test moduledoc at ExUnit.DocTestTest.Invalid (4) (ExUnit.DocTestTest.ActuallyCompiled)
235-
test/ex_unit/doc_test_test.exs:198
241+
test/ex_unit/doc_test_test.exs:204
236242
Doctest failed: got UndefinedFunctionError with message undefined function: Hello.world/0
237243
code: Hello.world
238244
stacktrace:
239-
test/ex_unit/doc_test_test.exs:106: ExUnit.DocTestTest.Invalid (module)
245+
test/ex_unit/doc_test_test.exs:112: ExUnit.DocTestTest.Invalid (module)
240246
"""
241247

242248
assert output =~ """
243249
5) test moduledoc at ExUnit.DocTestTest.Invalid (5) (ExUnit.DocTestTest.ActuallyCompiled)
244-
test/ex_unit/doc_test_test.exs:198
250+
test/ex_unit/doc_test_test.exs:204
245251
Doctest failed: expected exception WhatIsThis with message "oops" but got RuntimeError with message "oops"
246252
code: raise "oops"
247253
stacktrace:
248-
test/ex_unit/doc_test_test.exs:106: ExUnit.DocTestTest.Invalid (module)
254+
test/ex_unit/doc_test_test.exs:112: ExUnit.DocTestTest.Invalid (module)
249255
"""
250256

251257
assert output =~ """
252258
6) test moduledoc at ExUnit.DocTestTest.Invalid (6) (ExUnit.DocTestTest.ActuallyCompiled)
253-
test/ex_unit/doc_test_test.exs:198
259+
test/ex_unit/doc_test_test.exs:204
254260
Doctest failed: expected exception RuntimeError with message "hello" but got RuntimeError with message "oops"
255261
code: raise "oops"
256262
stacktrace:
257-
test/ex_unit/doc_test_test.exs:106: ExUnit.DocTestTest.Invalid (module)
263+
test/ex_unit/doc_test_test.exs:112: ExUnit.DocTestTest.Invalid (module)
258264
"""
259265
end
260266

0 commit comments

Comments
 (0)