Skip to content

Commit 04b86b7

Browse files
mlechuKeno
andauthored
Print var"string" as raw string (#57887)
Fixes #57076. As stated in a TODO comment, `show_sym` prints `var""` symbols as ordinary strings (where [many things](https://github.com/JuliaLang/julia/blob/master/base/strings/io.jl#L485-L491) are escaped), but it should be a raw string (where only quotes and some backslashes are escaped). This fails the eval-parse-repr printing test. On master: ``` julia> a = :(var"\t,\$,\",\\,\u03c0," = 1) :(var"\\t,\\\$,\",\\\\,\\u03c0," = 1) julia> a = eval(Meta.parse(repr(a))) :(var"\\\\t,\\\\\\\$,\",\\\\\\\\,\\\\u03c0," = 1) julia> a = eval(Meta.parse(repr(a))) :(var"\\\\\\\\t,\\\\\\\\\\\\\\\$,\",\\\\\\\\\\\\\\\\,\\\\\\\\u03c0," = 1) ``` This PR: ``` julia> a = :(var"\t,\$,\",\\,\u03c0," = 1) :(var"\t,\$,\",\\,\u03c0," = 1) julia> a = eval(Meta.parse(repr(a))) :(var"\t,\$,\",\\,\u03c0," = 1) ``` --------- Co-authored-by: Keno Fischer <[email protected]>
1 parent 58deac9 commit 04b86b7

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

base/show.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1832,7 +1832,7 @@ function show_sym(io::IO, sym::Symbol; allow_macroname=false)
18321832
print(io, '@')
18331833
show_sym(io, Symbol(sym_str[2:end]))
18341834
else
1835-
print(io, "var", repr(string(sym))) # TODO: this is not quite right, since repr uses String escaping rules, and Symbol uses raw string rules
1835+
print(io, "var\"", escape_raw_string(string(sym)), '"')
18361836
end
18371837
end
18381838

test/show.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2815,3 +2815,13 @@ end
28152815
@test_repr """:(var"do" = 1)"""
28162816
@weak_test_repr """:(let var"let" = 1; var"let"; end)"""
28172817
end
2818+
2819+
# Issue 57076
2820+
@testset "show raw string given var\"str\"" begin
2821+
# In show_sym, only backslashes and quotes should be escaped when printing var"this".
2822+
@test_repr """:(var"\$" = 1)"""
2823+
@test_repr """:(var"\\"" = 1)""" # var name is one quote character
2824+
@test_repr """:(var"~!@#\$%^&*[]_+?" = 1)"""
2825+
@test_repr """:(var"\a\b\t\n\v\f\r\e" = 1)"""
2826+
@test_repr """:(var"\x01\u03c0\U03c0" = 1)"""
2827+
end

0 commit comments

Comments
 (0)