# \`pp\` Line Number & Filename Option?

**URL:** <https://forum.crystal-lang.org/t/pp-line-number-filename-option/1328>\
**Category:** Help & Support\
**Created:** [November 8, 2019, 3:27am UTC](https://forum.crystal-lang.org/t/pp-line-number-filename-option/1328 "2019-11-08T03:27:32Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![girng\_github](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/girng_github/32/571_2.png) [@girng\_github](https://forum.crystal-lang.org/u/girng_github)\
**Post date:** [November 8, 2019, 3:27am UTC](https://forum.crystal-lang.org/t/pp-line-number-filename-option/1328/1 "2019-11-08T03:27:32Z")

</div>

I sometimes have several `pp` stragglers floating around and hate tracking them down. Is it possible to monkey patch the `pp` macro so it prefixes the output with a line number and filename?

`GameFunctions.cr`:

```auto
pp "Hello"
pp "Hello"
pp "Hello"

```

```auto
[1:GameFunctions.cr]: "Hello"
[2:GameFunctions.cr]: "Hello"
[3:GameFunctions.cr]: "Hello"

```

---

<div class="post-metadata">

**Author:** ![watzon](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/watzon/32/481_2.png) [@watzon](https://forum.crystal-lang.org/u/watzon)\
**Post date:** [November 8, 2019, 5:50am UTC](https://forum.crystal-lang.org/t/pp-line-number-filename-option/1328/2 "2019-11-08T05:50:11Z")

</div>

So I don’t recommend monkey patching `pp`, but it would be pretty easy to write a macro to do what you want. All macro types inherit from [ASTNode](https://crystal-lang.org/api/0.31.1/Crystal/Macros/ASTNode.html), and `ASTNode` includes `line_number` and `column_number` methods. So:

```crystal
macro puts_with_line(arg)
  puts "[{{arg.line_number.id}}:{{arg.filename.id}}] {{arg.id}}"
end

puts_with_line "Hello"
# => [5:eval] Hello

```

---

<div class="post-metadata">

**Author:** ![girng\_github](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/girng_github/32/571_2.png) [@girng\_github](https://forum.crystal-lang.org/u/girng_github)\
**Post date:** [November 8, 2019, 6:19am UTC](https://forum.crystal-lang.org/t/pp-line-number-filename-option/1328/3 "2019-11-08T06:19:16Z")

</div>

Damn! @watzon that’s awesome, thank you! It’s perfect

---

<div class="post-metadata">

**Author:** ![stakach](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/stakach/32/58_2.png) [@stakach](https://forum.crystal-lang.org/u/stakach)\
**Post date:** [November 14, 2019, 7:36am UTC](https://forum.crystal-lang.org/t/pp-line-number-filename-option/1328/4 "2019-11-14T07:36:39Z")

</div>

This library by @Sija does what you want too. It’s awesome!

> **[Sija/debug.cr](https://github.com/Sija/debug.cr)**
>
> Debug macro for Crystal. Contribute to Sija/debug.cr development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![girng\_github](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/girng_github/32/571_2.png) [@girng\_github](https://forum.crystal-lang.org/u/girng_github)\
**Post date:** [November 14, 2019, 10:23am UTC](https://forum.crystal-lang.org/t/pp-line-number-filename-option/1328/5 "2019-11-14T10:23:01Z")

</div>

Nice, @stakach. Starred that repo instantly
