Skip to content

Commit 9090fc1

Browse files
committed
Print source location consistently and using relative paths
1 parent c40bce3 commit 9090fc1

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

lib/iex/lib/iex/introspection.ex

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ defmodule IEx.Introspection do
184184
"""
185185
def source(module) when is_atom(module) do
186186
case source_location(module) do
187-
{:ok, {file, _line}} ->
188-
IO.puts(File.read!(file))
187+
{:ok, {file, line}} ->
188+
print_source(file, line)
189189

190190
{:error, reason} ->
191191
puts_error("Could not show source for #{inspect(module)}, #{reason}")
@@ -196,8 +196,8 @@ defmodule IEx.Introspection do
196196

197197
def source({module, function}) when is_atom(module) and is_atom(function) do
198198
case source_location({module, function}) do
199-
{:ok, {file, _line}} ->
200-
IO.puts(File.read!(file))
199+
{:ok, {file, line}} ->
200+
print_source(file, line)
201201

202202
{:error, reason} ->
203203
puts_error("Could not show source for #{inspect(module)}.#{function}, #{reason}")
@@ -209,8 +209,8 @@ defmodule IEx.Introspection do
209209
def source({module, function, arity})
210210
when is_atom(module) and is_atom(function) and is_integer(arity) do
211211
case source_location({module, function, arity}) do
212-
{:ok, {file, _line}} ->
213-
IO.puts(File.read!(file))
212+
{:ok, {file, line}} ->
213+
print_source(file, line)
214214

215215
{:error, reason} ->
216216
puts_error("Could not show source for #{inspect(module)}.#{function}/#{arity}, #{reason}")
@@ -224,6 +224,10 @@ defmodule IEx.Introspection do
224224
dont_display_result()
225225
end
226226

227+
defp print_source(file, line) do
228+
IO.puts(Path.relative_to_cwd(file) <> ":" <> Integer.to_string(line))
229+
end
230+
227231
@doc """
228232
Returns the source location for the given module, {module, function},
229233
or {module, function, arity}.

lib/iex/test/iex/helpers_test.exs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -317,17 +317,21 @@ defmodule IEx.HelpersTest do
317317

318318
describe "source" do
319319
@describetag :requires_source
320+
@example_module_source "test/test_helper.exs"
320321

321-
test "prints source for Elixir module" do
322-
assert capture_iex("source(HelperExampleModule)") =~ "defmodule HelperExampleModule"
322+
test "prints source location for Elixir module" do
323+
assert capture_iex("source(HelperExampleModule)") =~
324+
~r/#{@example_module_source}:\d+$/
323325
end
324326

325-
test "prints source for module.function" do
326-
assert capture_iex("source(HelperExampleModule.fun)") =~ "defmodule HelperExampleModule"
327+
test "prints source location for module.function" do
328+
assert capture_iex("source(HelperExampleModule.fun)") =~
329+
~r/#{@example_module_source}:\d+$/
327330
end
328331

329-
test "prints source for module.function/arity" do
330-
assert capture_iex("source(HelperExampleModule.fun/1)") =~ "defmodule HelperExampleModule"
332+
test "prints source location for module.function/arity" do
333+
assert capture_iex("source(HelperExampleModule.fun/1)") =~
334+
~r/#{@example_module_source}:\d+$/
331335
end
332336

333337
test "errors if module is not available" do

lib/mix/lib/mix/tasks/source.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ defmodule Mix.Tasks.Source do
5353
{:error, message} -> Mix.raise(message)
5454
end
5555
else
56-
Mix.shell().info("#{file}:#{line}")
56+
Mix.shell().info("#{Path.relative_to_cwd(file)}:#{line}")
5757
end
5858

5959
{:error, reason} ->

0 commit comments

Comments
 (0)