Skip to content

Commit 92e0e34

Browse files
committed
Respect line property when file is given, closes #13542
1 parent 9f1aa84 commit 92e0e34

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

lib/elixir/src/elixir_expand.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ expand({quote, Meta, [Opts, Do]}, S, E) when is_list(Do) ->
188188

189189
{File, Line} = case lists:keyfind(location, 1, EOpts) of
190190
{location, keep} ->
191-
{?key(E, file), false};
191+
{?key(E, file), true};
192192
false ->
193193
{proplists:get_value(file, EOpts, nil), proplists:get_value(line, EOpts, false)}
194194
end,

lib/elixir/src/elixir_quote.erl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,13 +529,17 @@ generated(Meta, #elixir_quote{generated=false}) -> Meta.
529529

530530
keep(Meta, #elixir_quote{file=nil, line=Line}) ->
531531
line(Meta, Line);
532-
keep(Meta, #elixir_quote{file=File}) ->
532+
keep(Meta, #elixir_quote{file=File, line=true}) ->
533533
case lists:keytake(line, 1, Meta) of
534534
{value, {line, Line}, MetaNoLine} ->
535535
[{keep, {File, Line}} | MetaNoLine];
536536
false ->
537537
[{keep, {File, 0}} | Meta]
538-
end.
538+
end;
539+
keep(Meta, #elixir_quote{file=File, line=false}) ->
540+
[{keep, {File, 0}} | keydelete(line, Meta)];
541+
keep(Meta, #elixir_quote{file=File, line=Line}) ->
542+
[{keep, {File, Line}} | keydelete(line, Meta)].
539543

540544
line(Meta, true) ->
541545
Meta;

lib/elixir/test/elixir/kernel/quote_test.exs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ defmodule Kernel.QuoteTest do
3030
assert quote(line: true, do: bar(1, 2, 3)) == {:bar, [line: __ENV__.line], [1, 2, 3]}
3131
end
3232

33+
test "file line" do
34+
assert quote(file: "foo", line: 3, do: bar(1, 2, 3)) ==
35+
{:bar, [keep: {"foo", 3}], [1, 2, 3]}
36+
37+
assert quote(file: "foo", line: false, do: bar(1, 2, 3)) ==
38+
{:bar, [keep: {"foo", 0}], [1, 2, 3]}
39+
40+
assert quote(file: "foo", line: true, do: bar(1, 2, 3)) ==
41+
{:bar, [keep: {"foo", __ENV__.line - 1}], [1, 2, 3]}
42+
end
43+
3344
test "quote line var" do
3445
line = __ENV__.line
3546
assert quote(line: line, do: bar(1, 2, 3)) == {:bar, [line: line], [1, 2, 3]}

lib/elixir/test/elixir/kernel/warning_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ defmodule Kernel.WarningTest do
6262
end
6363

6464
defmacro will_warn do
65-
quote file: "demo" do
65+
quote file: "demo", line: true do
6666
%{dup: 1, dup: 2}
6767
end
6868
end

0 commit comments

Comments
 (0)