Print - a better echo.
nimble install print
This library has no dependencies other than the Nim standard library.
About
Use print
the same way you would use echo
for print-debugging. It prints objects the "Nim way" with syntax highlighting. Even with refs, pointers, or cycles!
import print
let a = 3
print a
a = 3
The "Nim way"
It prints data structures in the same way you would create them in Nim source code. Ideally you can take what it prints out and just copy paste that into code again and it should compile in many cases.
let
a = 3
b = "hi there"
c = "oh\nthis\0isit!"
d = @[1, 2, 3]
d2 = [1, 2, 3]
f = Foo(a:"hi", b:@["a", "abc"], c:1234)
print a, b, c, d, d2, f
a=3 b="hi there" c="oh\nthis\0isit!" d=@[1, 2, 3] d2=[1, 2, 3] f=Foo(a:"hi", b:@["a", "abc"], c:1234)
Syntax highlighting
Screenshot from VS Code:
If you are piping to a file it will detect not-a-terminal and give you plain ascii instead.
Smart indention
It will try to print out everything in one line, but it if it does not fit it will create indentation levels. Max width is based on current terminal max width.
g2 = Bar(a: "hi a really really long string", b: @["a", "abc"], c: 1234)
print g2
echo
does not do well
Stuff It will also print nil
s, ref
s, and pointer
s.
g2=Bar(
a: "hi a really really long string",
b: @["a", "abc"],
c: 1234
)
let
p1: ptr int = nil
p2: ref Foo = nil
print p1, p2
p1=nil p2=nil
var three = 3
var pointerToThree = cast[pointer](addr three)
print pointerToThree
pointerToThree=0x00000000004360A0
And even cycles!
It will also stop recursing repeating structures:
type Node = ref object
data: string
next: Node
var n = Node(data:"hi")
n.next = n
print n
n=Node(data: "hi", next: ...)