Skip to content

Commit 20b3b3e

Browse files
authored
Remove byte_range from default printing of SyntaxNode (#207)
The byte range is probably most useful for debugging JuliaSyntax than general use. So disable this by default.
1 parent 9ce4c2e commit 20b3b3e

File tree

3 files changed

+41
-14
lines changed

3 files changed

+41
-14
lines changed

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ the `call` has the infix `-i` flag):
5353
julia> using JuliaSyntax: JuliaSyntax, SyntaxNode, GreenNode
5454

5555
julia> JuliaSyntax.parse(SyntaxNode, "(x + y)*z", filename="foo.jl")
56-
line:col│ byte_range │ tree │ file_name
57-
1:1 1:9[call-i] │foo.jl
58-
1:2 2:6[call-i]
59-
1:2 2:2x
60-
1:4 4:4+
61-
1:6 6:6y
62-
1:8 8:8*
63-
1:9 9:9z
56+
line:col│ tree │ file_name
57+
1:1 │[call-i] │foo.jl
58+
1:2 │ [call-i]
59+
1:2 │ x
60+
1:4+
61+
1:6 │ y
62+
1:8*
63+
1:9 │ z
6464
```
6565

6666
Internally this has a full representation of all syntax trivia (whitespace and

src/syntax_tree.jl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,13 @@ function interpolate_literal(node::SyntaxNode, val)
174174
SyntaxNode(node.source, node.raw, node.position, node.parent, true, val)
175175
end
176176

177-
function _show_syntax_node(io, current_filename, node::AbstractSyntaxNode, indent)
177+
function _show_syntax_node(io, current_filename, node::AbstractSyntaxNode, indent, show_byte_offsets)
178178
fname = node.source.filename
179179
line, col = source_location(node.source, node.position)
180-
posstr = "$(lpad(line, 4)):$(rpad(col,3))$(lpad(first_byte(node),6)):$(rpad(last_byte(node),6))"
180+
posstr = "$(lpad(line, 4)):$(rpad(col,3))"
181+
if show_byte_offsets
182+
posstr *= "$(lpad(first_byte(node),6)):$(rpad(last_byte(node),6))"
183+
end
181184
val = node.val
182185
nodestr = haschildren(node) ? "[$(untokenize(head(node)))]" :
183186
isa(val, Symbol) ? string(val) : repr(val)
@@ -192,7 +195,7 @@ function _show_syntax_node(io, current_filename, node::AbstractSyntaxNode, inden
192195
if haschildren(node)
193196
new_indent = indent*" "
194197
for n in children(node)
195-
_show_syntax_node(io, current_filename, n, new_indent)
198+
_show_syntax_node(io, current_filename, n, new_indent, show_byte_offsets)
196199
end
197200
end
198201
end
@@ -217,9 +220,9 @@ function _show_syntax_node_sexpr(io, node::AbstractSyntaxNode)
217220
end
218221
end
219222

220-
function Base.show(io::IO, ::MIME"text/plain", node::AbstractSyntaxNode)
221-
println(io, "line:col│ byte_range │ tree │ file_name")
222-
_show_syntax_node(io, Ref{Union{Nothing,String}}(nothing), node, "")
223+
function Base.show(io::IO, ::MIME"text/plain", node::AbstractSyntaxNode; show_byte_offsets=false)
224+
println(io, "line:col│$(show_byte_offsets ? " byte_range │" : "") tree │ file_name")
225+
_show_syntax_node(io, Ref{Union{Nothing,String}}(nothing), node, "", show_byte_offsets)
223226
end
224227

225228
function Base.show(io::IO, ::MIME"text/x.sexpression", node::AbstractSyntaxNode)

test/syntax_tree.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,27 @@
4040
node[2] = parse(SyntaxNode, "y")
4141
@test sourcetext(child(node, 2)) == "y"
4242
end
43+
44+
@testset "SyntaxNode pretty printing" begin
45+
t = parse(SyntaxNode, "f(a*b,\n c)", filename="foo.jl")
46+
@test sprint(show, MIME("text/plain"), t) == """
47+
line:col│ tree │ file_name
48+
1:1 │[call] │foo.jl
49+
1:1 │ f
50+
1:3 │ [call-i]
51+
1:3 │ a
52+
1:4 │ *
53+
1:5 │ b
54+
2:3 │ c
55+
"""
56+
@test sprint(io->show(io, MIME("text/plain"), t, show_byte_offsets=true)) == """
57+
line:col│ byte_range │ tree │ file_name
58+
1:1 │ 1:11 │[call] │foo.jl
59+
1:1 │ 1:1 │ f
60+
1:3 │ 3:5 │ [call-i]
61+
1:3 │ 3:3 │ a
62+
1:4 │ 4:4 │ *
63+
1:5 │ 5:5 │ b
64+
2:3 │ 10:10 │ c
65+
"""
66+
end

0 commit comments

Comments
 (0)