Tagging IO.inspect

63 views
Skip to first unread message

Michał Muskała

unread,
Jul 15, 2016, 5:50:51 AM7/15/16
to elixir-l...@googlegroups.com
Hello everybody.

IO.inspect/2 is one of the most useful debugging tools, and I use it extremely often. The ability to stick `|> IO.inspect` in pretty much every part of the program is really powerful. Unfortunately when having multiple such calls it becomes hard to distinguish which output matches which call.
The usual way to solve this is by inspecting something like {tag_name, value} instead of just value, but this has the unfortunate effect of breaking the pipe-ability and forces you to assign things into specific variables.

I propose we add an option to IO.inspect called tag. It would simply print the tag before the output. How would it look like?

IO.inspect([1, 2, 3], tag: “my list”)

would print:

my list => [1, 2, 3]

The return value would obviously not change, so it would still be a list [1, 2, 3] in that case. This still allows IO.inspect to be pipe-able and gives us easily distinguishable output at the same time. I think this would streamline the debugging experience and make IO.inspect even more powerful.

Michał.
signature.asc

José Valim

unread,
Jul 15, 2016, 5:58:03 AM7/15/16
to elixir-l...@googlegroups.com
I like this suggestion. I am wondering though if the tagging should be done by wrapping the input in a tuple:

IO.inspect([1, 2, 3], tag: “my list”)
#=> {"my list", [1, 2, 3]}

If not, we should probably just print: "my list: [1, 2, 3]".



José Valim
Skype: jv.ptec
Founder and Director of R&D


Michał.

--
You received this message because you are subscribed to the Google Groups "elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/E807B41E-B89A-43CD-B55D-60A742B55BBC%40muskala.eu.
For more options, visit https://groups.google.com/d/optout.

Andrea Leopardi

unread,
Jul 15, 2016, 6:00:50 AM7/15/16
to elixir-l...@googlegroups.com
I love this feature, but I am against wrapping in a tuple because then you may wonder if you are inspecting a tuple or something with :tag. Instead, if you have "my list: ..." it will not be like any other inspected term, so very easy to understand. Wdyt? :)


Andrea Leopardi

José Valim

unread,
Jul 15, 2016, 6:07:25 AM7/15/16
to elixir-l...@googlegroups.com
Good points Andrea. Yes, let's ship this then.



José Valim
Skype: jv.ptec
Founder and Director of R&D

Michał Muskała

unread,
Jul 15, 2016, 6:11:49 AM7/15/16
to elixir-l...@googlegroups.com
signature.asc

Eric Meadows-Jönsson

unread,
Jul 15, 2016, 9:14:05 AM7/15/16
to elixir-l...@googlegroups.com
Another reason for the tag is that you can use it in a pipeline. If I have long pipeline I am debugging I like to sprinkle some `|> IO.inspect` between the lines to see what's going on in each pipeline stage. And when piping it's of course not possible to wrap the value in a tuple.

Big +1 from me for this feature.


For more options, visit https://groups.google.com/d/optout.



--
Eric Meadows-Jönsson

Ben Wilson

unread,
Jul 15, 2016, 9:19:51 AM7/15/16
to elixir-lang-core
Do we want to use #=> instead of => to make it clear it isn't showing some kind of map like syntax?

Andrea Leopardi

unread,
Jul 15, 2016, 9:26:58 AM7/15/16
to elixir-l...@googlegroups.com
This feature has been accepted and Michał is working on it, you can all follow the corresponding issue (https://github.com/elixir-lang/elixir/issues/5009) and PR (https://github.com/elixir-lang/elixir/pull/5010) :)


Andrea Leopardi

Reply all
Reply to author
Forward
0 new messages