Skip to content

Commit f9d2717

Browse files
authored
Use proper ANSI reset codes (#16052)
1 parent 4fa3719 commit f9d2717

File tree

3 files changed

+158
-121
lines changed

3 files changed

+158
-121
lines changed

spec/std/colorize_spec.cr

Lines changed: 74 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -87,78 +87,78 @@ describe "colorize" do
8787
end
8888

8989
it "colorizes foreground" do
90-
colorize("hello").black.to_s.should eq("\e[30mhello\e[0m")
91-
colorize("hello").red.to_s.should eq("\e[31mhello\e[0m")
92-
colorize("hello").green.to_s.should eq("\e[32mhello\e[0m")
93-
colorize("hello").yellow.to_s.should eq("\e[33mhello\e[0m")
94-
colorize("hello").blue.to_s.should eq("\e[34mhello\e[0m")
95-
colorize("hello").magenta.to_s.should eq("\e[35mhello\e[0m")
96-
colorize("hello").cyan.to_s.should eq("\e[36mhello\e[0m")
97-
colorize("hello").light_gray.to_s.should eq("\e[37mhello\e[0m")
98-
colorize("hello").dark_gray.to_s.should eq("\e[90mhello\e[0m")
99-
colorize("hello").light_red.to_s.should eq("\e[91mhello\e[0m")
100-
colorize("hello").light_green.to_s.should eq("\e[92mhello\e[0m")
101-
colorize("hello").light_yellow.to_s.should eq("\e[93mhello\e[0m")
102-
colorize("hello").light_blue.to_s.should eq("\e[94mhello\e[0m")
103-
colorize("hello").light_magenta.to_s.should eq("\e[95mhello\e[0m")
104-
colorize("hello").light_cyan.to_s.should eq("\e[96mhello\e[0m")
105-
colorize("hello").white.to_s.should eq("\e[97mhello\e[0m")
90+
colorize("hello").black.to_s.should eq("\e[30mhello\e[39m")
91+
colorize("hello").red.to_s.should eq("\e[31mhello\e[39m")
92+
colorize("hello").green.to_s.should eq("\e[32mhello\e[39m")
93+
colorize("hello").yellow.to_s.should eq("\e[33mhello\e[39m")
94+
colorize("hello").blue.to_s.should eq("\e[34mhello\e[39m")
95+
colorize("hello").magenta.to_s.should eq("\e[35mhello\e[39m")
96+
colorize("hello").cyan.to_s.should eq("\e[36mhello\e[39m")
97+
colorize("hello").light_gray.to_s.should eq("\e[37mhello\e[39m")
98+
colorize("hello").dark_gray.to_s.should eq("\e[90mhello\e[39m")
99+
colorize("hello").light_red.to_s.should eq("\e[91mhello\e[39m")
100+
colorize("hello").light_green.to_s.should eq("\e[92mhello\e[39m")
101+
colorize("hello").light_yellow.to_s.should eq("\e[93mhello\e[39m")
102+
colorize("hello").light_blue.to_s.should eq("\e[94mhello\e[39m")
103+
colorize("hello").light_magenta.to_s.should eq("\e[95mhello\e[39m")
104+
colorize("hello").light_cyan.to_s.should eq("\e[96mhello\e[39m")
105+
colorize("hello").white.to_s.should eq("\e[97mhello\e[39m")
106106
end
107107

108108
it "colorizes foreground with 8-bit color" do
109-
colorize("hello").fore(Colorize::Color256.new(123u8)).to_s.should eq("\e[38;5;123mhello\e[0m")
110-
colorize("hello").fore(123u8).to_s.should eq("\e[38;5;123mhello\e[0m")
111-
colorize("hello", 123_u8).to_s.should eq("\e[38;5;123mhello\e[0m")
109+
colorize("hello").fore(Colorize::Color256.new(123u8)).to_s.should eq("\e[38;5;123mhello\e[39m")
110+
colorize("hello").fore(123u8).to_s.should eq("\e[38;5;123mhello\e[39m")
111+
colorize("hello", 123_u8).to_s.should eq("\e[38;5;123mhello\e[39m")
112112
end
113113

114114
it "colorizes foreground with true color" do
115-
colorize("hello").fore(Colorize::ColorRGB.new(12u8, 34u8, 56u8)).to_s.should eq("\e[38;2;12;34;56mhello\e[0m")
116-
colorize("hello").fore(12u8, 34u8, 56u8).to_s.should eq("\e[38;2;12;34;56mhello\e[0m")
117-
colorize("hello", 12u8, 34u8, 56u8).to_s.should eq("\e[38;2;12;34;56mhello\e[0m")
115+
colorize("hello").fore(Colorize::ColorRGB.new(12u8, 34u8, 56u8)).to_s.should eq("\e[38;2;12;34;56mhello\e[39m")
116+
colorize("hello").fore(12u8, 34u8, 56u8).to_s.should eq("\e[38;2;12;34;56mhello\e[39m")
117+
colorize("hello", 12u8, 34u8, 56u8).to_s.should eq("\e[38;2;12;34;56mhello\e[39m")
118118
end
119119

120120
it "colorizes background" do
121-
colorize("hello").on_black.to_s.should eq("\e[40mhello\e[0m")
122-
colorize("hello").on_red.to_s.should eq("\e[41mhello\e[0m")
123-
colorize("hello").on_green.to_s.should eq("\e[42mhello\e[0m")
124-
colorize("hello").on_yellow.to_s.should eq("\e[43mhello\e[0m")
125-
colorize("hello").on_blue.to_s.should eq("\e[44mhello\e[0m")
126-
colorize("hello").on_magenta.to_s.should eq("\e[45mhello\e[0m")
127-
colorize("hello").on_cyan.to_s.should eq("\e[46mhello\e[0m")
128-
colorize("hello").on_light_gray.to_s.should eq("\e[47mhello\e[0m")
129-
colorize("hello").on_dark_gray.to_s.should eq("\e[100mhello\e[0m")
130-
colorize("hello").on_light_red.to_s.should eq("\e[101mhello\e[0m")
131-
colorize("hello").on_light_green.to_s.should eq("\e[102mhello\e[0m")
132-
colorize("hello").on_light_yellow.to_s.should eq("\e[103mhello\e[0m")
133-
colorize("hello").on_light_blue.to_s.should eq("\e[104mhello\e[0m")
134-
colorize("hello").on_light_magenta.to_s.should eq("\e[105mhello\e[0m")
135-
colorize("hello").on_light_cyan.to_s.should eq("\e[106mhello\e[0m")
136-
colorize("hello").on_white.to_s.should eq("\e[107mhello\e[0m")
121+
colorize("hello").on_black.to_s.should eq("\e[40mhello\e[49m")
122+
colorize("hello").on_red.to_s.should eq("\e[41mhello\e[49m")
123+
colorize("hello").on_green.to_s.should eq("\e[42mhello\e[49m")
124+
colorize("hello").on_yellow.to_s.should eq("\e[43mhello\e[49m")
125+
colorize("hello").on_blue.to_s.should eq("\e[44mhello\e[49m")
126+
colorize("hello").on_magenta.to_s.should eq("\e[45mhello\e[49m")
127+
colorize("hello").on_cyan.to_s.should eq("\e[46mhello\e[49m")
128+
colorize("hello").on_light_gray.to_s.should eq("\e[47mhello\e[49m")
129+
colorize("hello").on_dark_gray.to_s.should eq("\e[100mhello\e[49m")
130+
colorize("hello").on_light_red.to_s.should eq("\e[101mhello\e[49m")
131+
colorize("hello").on_light_green.to_s.should eq("\e[102mhello\e[49m")
132+
colorize("hello").on_light_yellow.to_s.should eq("\e[103mhello\e[49m")
133+
colorize("hello").on_light_blue.to_s.should eq("\e[104mhello\e[49m")
134+
colorize("hello").on_light_magenta.to_s.should eq("\e[105mhello\e[49m")
135+
colorize("hello").on_light_cyan.to_s.should eq("\e[106mhello\e[49m")
136+
colorize("hello").on_white.to_s.should eq("\e[107mhello\e[49m")
137137
end
138138

139139
it "colorizes background with 8-bit color" do
140-
colorize("hello").back(Colorize::Color256.new(123u8)).to_s.should eq("\e[48;5;123mhello\e[0m")
141-
colorize("hello").back(123u8).to_s.should eq("\e[48;5;123mhello\e[0m")
140+
colorize("hello").back(Colorize::Color256.new(123u8)).to_s.should eq("\e[48;5;123mhello\e[49m")
141+
colorize("hello").back(123u8).to_s.should eq("\e[48;5;123mhello\e[49m")
142142
end
143143

144144
it "colorizes background with true color" do
145-
colorize("hello").back(Colorize::ColorRGB.new(12u8, 34u8, 56u8)).to_s.should eq("\e[48;2;12;34;56mhello\e[0m")
146-
colorize("hello").back(12u8, 34u8, 56u8).to_s.should eq("\e[48;2;12;34;56mhello\e[0m")
145+
colorize("hello").back(Colorize::ColorRGB.new(12u8, 34u8, 56u8)).to_s.should eq("\e[48;2;12;34;56mhello\e[49m")
146+
colorize("hello").back(12u8, 34u8, 56u8).to_s.should eq("\e[48;2;12;34;56mhello\e[49m")
147147
end
148148

149149
it "colorizes mode" do
150-
colorize("hello").bold.to_s.should eq("\e[1mhello\e[0m")
151-
colorize("hello").bright.to_s.should eq("\e[1mhello\e[0m")
152-
colorize("hello").dim.to_s.should eq("\e[2mhello\e[0m")
153-
colorize("hello").italic.to_s.should eq("\e[3mhello\e[0m")
154-
colorize("hello").underline.to_s.should eq("\e[4mhello\e[0m")
155-
colorize("hello").blink.to_s.should eq("\e[5mhello\e[0m")
156-
colorize("hello").blink_fast.to_s.should eq("\e[6mhello\e[0m")
157-
colorize("hello").reverse.to_s.should eq("\e[7mhello\e[0m")
158-
colorize("hello").hidden.to_s.should eq("\e[8mhello\e[0m")
159-
colorize("hello").strikethrough.to_s.should eq("\e[9mhello\e[0m")
160-
colorize("hello").double_underline.to_s.should eq("\e[21mhello\e[0m")
161-
colorize("hello").overline.to_s.should eq("\e[53mhello\e[0m")
150+
colorize("hello").bold.to_s.should eq("\e[1mhello\e[22m")
151+
colorize("hello").bright.to_s.should eq("\e[1mhello\e[22m")
152+
colorize("hello").dim.to_s.should eq("\e[2mhello\e[22m")
153+
colorize("hello").italic.to_s.should eq("\e[3mhello\e[23m")
154+
colorize("hello").underline.to_s.should eq("\e[4mhello\e[24m")
155+
colorize("hello").blink.to_s.should eq("\e[5mhello\e[25m")
156+
colorize("hello").blink_fast.to_s.should eq("\e[6mhello\e[26m")
157+
colorize("hello").reverse.to_s.should eq("\e[7mhello\e[27m")
158+
colorize("hello").hidden.to_s.should eq("\e[8mhello\e[28m")
159+
colorize("hello").strikethrough.to_s.should eq("\e[9mhello\e[29m")
160+
colorize("hello").double_underline.to_s.should eq("\e[21mhello\e[24m")
161+
colorize("hello").overline.to_s.should eq("\e[53mhello\e[55m")
162162
end
163163

164164
it "prints colorize ANSI escape codes" do
@@ -182,24 +182,24 @@ describe "colorize" do
182182
end
183183

184184
it "colorizes mode combination" do
185-
colorize("hello").bold.dim.underline.blink.reverse.hidden.to_s.should eq("\e[1;2;4;5;7;8mhello\e[0m")
185+
colorize("hello").bold.dim.underline.blink.reverse.hidden.to_s.should eq("\e[1;2;4;5;7;8mhello\e[22;22;24;25;27;28m")
186186
end
187187

188188
it "colorizes foreground with background" do
189-
colorize("hello").blue.on_green.to_s.should eq("\e[34;42mhello\e[0m")
189+
colorize("hello").blue.on_green.to_s.should eq("\e[34;42mhello\e[39;49m")
190190
end
191191

192192
it "colorizes foreground with background with mode" do
193-
colorize("hello").blue.on_green.bold.to_s.should eq("\e[34;42;1mhello\e[0m")
193+
colorize("hello").blue.on_green.bold.to_s.should eq("\e[34;42;1mhello\e[39;49;22m")
194194
end
195195

196196
it "colorizes foreground with symbol" do
197-
colorize("hello", :red).to_s.should eq("\e[31mhello\e[0m")
198-
colorize("hello").fore(:red).to_s.should eq("\e[31mhello\e[0m")
197+
colorize("hello", :red).to_s.should eq("\e[31mhello\e[39m")
198+
colorize("hello").fore(:red).to_s.should eq("\e[31mhello\e[39m")
199199
end
200200

201201
it "colorizes mode with symbol" do
202-
colorize("hello").mode(:bold).to_s.should eq("\e[1mhello\e[0m")
202+
colorize("hello").mode(:bold).to_s.should eq("\e[1mhello\e[22m")
203203
end
204204

205205
it "raises on unknown foreground color" do
@@ -215,7 +215,7 @@ describe "colorize" do
215215
end
216216

217217
it "inspects" do
218-
colorize("hello", :red).inspect.should eq("\e[31m\"hello\"\e[0m")
218+
colorize("hello", :red).inspect.should eq("\e[31m\"hello\"\e[39m")
219219
end
220220

221221
it "colorizes with surround" do
@@ -227,7 +227,7 @@ describe "colorize" do
227227
end
228228
io << "bye"
229229
end
230-
io.to_s.should eq("\e[31mhello\e[0;32mworld\e[0;31mbye\e[0m")
230+
io.to_s.should eq("\e[31mhello\e[39;32mworld\e[39;31mbye\e[39m")
231231
end
232232

233233
it "colorizes with surround and reset" do
@@ -239,7 +239,7 @@ describe "colorize" do
239239
end
240240
io << "bye"
241241
end
242-
io.to_s.should eq("\e[31mhello\e[0;32;1mworld\e[0;31mbye\e[0m")
242+
io.to_s.should eq("\e[31mhello\e[39;32;1mworld\e[39;22;31mbye\e[39m")
243243
end
244244

245245
it "colorizes with surround and no reset" do
@@ -251,7 +251,7 @@ describe "colorize" do
251251
end
252252
io << "bye"
253253
end
254-
io.to_s.should eq("\e[31mhelloworldbye\e[0m")
254+
io.to_s.should eq("\e[31mhelloworldbye\e[39m")
255255
end
256256

257257
it "colorizes with surround and default" do
@@ -263,11 +263,11 @@ describe "colorize" do
263263
end
264264
io << "bye"
265265
end
266-
io.to_s.should eq("\e[31mhello\e[0mworld\e[31mbye\e[0m")
266+
io.to_s.should eq("\e[31mhello\e[39mworld\e[31mbye\e[39m")
267267
end
268268

269269
it "colorizes with to_s" do
270-
colorize(ColorizeToS.new).red.to_s.should eq("\e[31mhello\e[0;34mworld\e[0;31mbye\e[0m")
270+
colorize(ColorizeToS.new).red.to_s.should eq("\e[31mhello\e[39;34mworld\e[39;31mbye\e[39m")
271271
end
272272

273273
it "toggles off" do
@@ -276,6 +276,13 @@ describe "colorize" do
276276
end
277277

278278
it "toggles off and on" do
279-
colorize("hello").toggle(false).black.toggle(true).to_s.should eq("\e[30mhello\e[0m")
279+
colorize("hello").toggle(false).black.toggle(true).to_s.should eq("\e[30mhello\e[39m")
280+
end
281+
282+
it "colorizes nested strings" do
283+
colorize("hello #{colorize("foo").red} bar").underline.to_s.should eq("\e[4mhello \e[31mfoo\e[39m bar\e[24m")
284+
285+
# TODO: Ideally this should work
286+
# colorize("hello #{colorize("foo").red} bar").green.to_s.should eq "\e[32mhello \e[39m\e[31mfoo\e[39m\e[32m bar\e[39m"
280287
end
281288
end

spec/std/crystal/syntax_highlighter/colorize_spec.cr

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,29 @@ end
2727

2828
describe Crystal::SyntaxHighlighter::Colorize do
2929
describe ".highlight" do
30-
it_highlights %(foo = bar("baz\#{PI + 1}") # comment), %(foo \e[91m=\e[0m bar(\e[93m"baz\#{\e[0m\e[36mPI\e[0m \e[91m+\e[0m \e[35m1\e[0m\e[93m}"\e[0m) \e[90m# comment\e[0m)
30+
it_highlights %(foo = bar("baz\#{PI + 1}") # comment), %(foo \e[91m=\e[39m bar(\e[93m"baz\#{\e[39m\e[36mPI\e[39m \e[91m+\e[39m \e[35m1\e[39m\e[93m}"\e[39m) \e[90m# comment\e[39m)
3131

3232
it_highlights "foo", "foo"
3333
it_highlights "foo bar", "foo bar"
3434
it_highlights "foo\nbar", "foo\nbar"
3535

36-
it_highlights "# foo", %(\e[90m# foo\e[0m)
37-
it_highlights "# bar\n", %(\e[90m# bar\e[0m\n)
38-
it_highlights "# foo\n# bar\n", %(\e[90m# foo\e[0m\n\e[90m# bar\e[0m\n)
39-
it_highlights %(# <">), %(\e[90m# <">\e[0m)
36+
it_highlights "# foo", %(\e[90m# foo\e[39m)
37+
it_highlights "# bar\n", %(\e[90m# bar\e[39m\n)
38+
it_highlights "# foo\n# bar\n", %(\e[90m# foo\e[39m\n\e[90m# bar\e[39m\n)
39+
it_highlights %(# <">), %(\e[90m# <">\e[39m)
4040

41-
it_highlights "42", %(\e[35m42\e[0m)
42-
it_highlights "3.14", %(\e[35m3.14\e[0m)
43-
it_highlights "123_i64", %(\e[35m123_i64\e[0m)
41+
it_highlights "42", %(\e[35m42\e[39m)
42+
it_highlights "3.14", %(\e[35m3.14\e[39m)
43+
it_highlights "123_i64", %(\e[35m123_i64\e[39m)
4444

45-
it_highlights "'a'", %(\e[93m'a'\e[0m)
46-
it_highlights "'<'", %(\e[93m'<'\e[0m)
45+
it_highlights "'a'", %(\e[93m'a'\e[39m)
46+
it_highlights "'<'", %(\e[93m'<'\e[39m)
4747

48-
it_highlights ":foo", %(\e[35m:foo\e[0m)
49-
it_highlights %(:"foo"), %(\e[35m:"foo"\e[0m)
48+
it_highlights ":foo", %(\e[35m:foo\e[39m)
49+
it_highlights %(:"foo"), %(\e[35m:"foo"\e[39m)
5050

51-
it_highlights "Foo", %(\e[36mFoo\e[0m)
52-
it_highlights "Foo::Bar", %(\e[36mFoo\e[0m\e[36m::\e[0m\e[36mBar\e[0m)
51+
it_highlights "Foo", %(\e[36mFoo\e[39m)
52+
it_highlights "Foo::Bar", %(\e[36mFoo\e[39m\e[36m::\e[39m\e[36mBar\e[39m)
5353

5454
%w(
5555
def if else elsif end class module include
@@ -61,71 +61,71 @@ describe Crystal::SyntaxHighlighter::Colorize do
6161
protected uninitialized instance_sizeof instance_alignof offsetof
6262
annotation verbatim
6363
).each do |kw|
64-
it_highlights kw, %(\e[91m#{kw}\e[0m)
64+
it_highlights kw, %(\e[91m#{kw}\e[39m)
6565
end
6666

67-
it_highlights "self", %(\e[34mself\e[0m)
67+
it_highlights "self", %(\e[34mself\e[39m)
6868

6969
%w(true false nil).each do |lit|
70-
it_highlights lit, %(\e[35m#{lit}\e[0m)
70+
it_highlights lit, %(\e[35m#{lit}\e[39m)
7171
end
7272

73-
it_highlights "def foo", %(\e[91mdef\e[0m \e[92mfoo\e[0m)
73+
it_highlights "def foo", %(\e[91mdef\e[39m \e[92mfoo\e[39m)
7474

7575
%w(
7676
[] []? []= <=>
7777
+ - * /
7878
== < <= > >= != =~ !~
7979
& | ^ ~ ** >> << %
8080
).each do |op|
81-
it_highlights %(def #{op}), %(\e[91mdef\e[0m \e[92m#{op}\e[0m)
81+
it_highlights %(def #{op}), %(\e[91mdef\e[39m \e[92m#{op}\e[39m)
8282
end
8383

84-
it_highlights %(def //), %(\e[91mdef\e[0m \e[92m/\e[0m\e[92m/\e[0m)
84+
it_highlights %(def //), %(\e[91mdef\e[39m \e[92m/\e[39m\e[92m/\e[39m)
8585

8686
%w(
8787
+ - * &+ &- &* &** / // = == < <= > >= ! != =~ !~ & | ^ ~ **
8888
>> << % [] []? []= <=> === && ||
8989
+= -= *= /= //= &= |= ^= **= >>= <<= %= &+= &-= &*= &&= ||=
9090
).each do |op|
91-
it_highlights "1 #{op} 2", %(\e[35m1\e[0m \e[91m#{op}\e[0m \e[35m2\e[0m)
91+
it_highlights "1 #{op} 2", %(\e[35m1\e[39m \e[91m#{op}\e[39m \e[35m2\e[39m)
9292
end
9393

94-
it_highlights %(1/2), %(\e[35m1\e[0m\e[91m/\e[0m\e[35m2\e[0m)
95-
it_highlights %(1 /2), %(\e[35m1\e[0m \e[91m/\e[0m\e[35m2\e[0m)
96-
it_highlights %(1/ 2), %(\e[35m1\e[0m\e[91m/\e[0m \e[35m2\e[0m)
94+
it_highlights %(1/2), %(\e[35m1\e[39m\e[91m/\e[39m\e[35m2\e[39m)
95+
it_highlights %(1 /2), %(\e[35m1\e[39m \e[91m/\e[39m\e[35m2\e[39m)
96+
it_highlights %(1/ 2), %(\e[35m1\e[39m\e[91m/\e[39m \e[35m2\e[39m)
9797

98-
it_highlights %(a/b), %(a\e[91m/\e[0mb)
99-
it_highlights %(a/ b), %(a\e[91m/\e[0m b)
100-
it_highlights %(a / b), %(a \e[91m/\e[0m b)
98+
it_highlights %(a/b), %(a\e[91m/\e[39mb)
99+
it_highlights %(a/ b), %(a\e[91m/\e[39m b)
100+
it_highlights %(a / b), %(a \e[91m/\e[39m b)
101101

102-
it_highlights %(a /b/), %(a \e[93m/b/\e[0m)
102+
it_highlights %(a /b/), %(a \e[93m/b/\e[39m)
103103

104104
it_highlights %($1), %($1)
105105
it_highlights %($2?), %($2?)
106106
it_highlights %($?), %($?)
107107
it_highlights %($~), %($~)
108108

109-
it_highlights %("foo"), %(\e[93m"foo"\e[0m)
110-
it_highlights %("<>"), %(\e[93m"<>"\e[0m)
111-
it_highlights %("foo\#{bar}baz"), %(\e[93m"foo\#{\e[0mbar\e[93m}baz"\e[0m)
112-
it_highlights %("foo\#{[1, bar, "str"]}baz"), %(\e[93m"foo\#{\e[0m[\e[35m1\e[0m, bar, \e[93m"str"\e[0m]\e[93m}baz"\e[0m)
113-
it_highlights %("nest1\#{foo + "nest2\#{1 + 1}bar"}baz"), %(\e[93m"nest1\#{\e[0mfoo \e[91m+\e[0m \e[93m"nest2\#{\e[0m\e[35m1\e[0m \e[91m+\e[0m \e[35m1\e[0m\e[93m}bar"\e[0m\e[93m}baz"\e[0m)
114-
it_highlights "/foo/xim", %(\e[93m/foo/\e[0mxim)
115-
it_highlights "`foo`", %(\e[93m`foo`\e[0m)
116-
it_highlights "%(foo)", %(\e[93m%(foo)\e[0m)
117-
it_highlights "%<foo>", %(\e[93m%<foo>\e[0m)
118-
it_highlights "%q(foo)", %(\e[93m%q(foo)\e[0m)
119-
it_highlights "%Q(foo)", %(\e[93m%Q(foo)\e[0m)
120-
it_highlights "%r(foo)xim", %(\e[93m%r(foo)\e[0mxim)
121-
it_highlights "%x(foo)", %(\e[93m%x(foo)\e[0m)
122-
123-
it_highlights "%w(foo bar baz)", %(\e[93m%w(foo bar baz)\e[0m)
124-
it_highlights "%w(foo bar\n baz)", %(\e[93m%w(foo bar\n baz)\e[0m)
125-
it_highlights "%w<foo bar baz>", %(\e[93m%w<foo bar baz>\e[0m)
126-
it_highlights "%i(foo bar baz)", %(\e[93m%i(foo bar baz)\e[0m)
127-
128-
it_highlights "Set{1, 2, 3}", %(\e[36mSet\e[0m{\e[35m1\e[0m, \e[35m2\e[0m, \e[35m3\e[0m})
109+
it_highlights %("foo"), %(\e[93m"foo"\e[39m)
110+
it_highlights %("<>"), %(\e[93m"<>"\e[39m)
111+
it_highlights %("foo\#{bar}baz"), %(\e[93m"foo\#{\e[39mbar\e[93m}baz"\e[39m)
112+
it_highlights %("foo\#{[1, bar, "str"]}baz"), %(\e[93m"foo\#{\e[39m[\e[35m1\e[39m, bar, \e[93m"str"\e[39m]\e[93m}baz"\e[39m)
113+
it_highlights %("nest1\#{foo + "nest2\#{1 + 1}bar"}baz"), %(\e[93m"nest1\#{\e[39mfoo \e[91m+\e[39m \e[93m"nest2\#{\e[39m\e[35m1\e[39m \e[91m+\e[39m \e[35m1\e[39m\e[93m}bar"\e[39m\e[93m}baz"\e[39m)
114+
it_highlights "/foo/xim", %(\e[93m/foo/\e[39mxim)
115+
it_highlights "`foo`", %(\e[93m`foo`\e[39m)
116+
it_highlights "%(foo)", %(\e[93m%(foo)\e[39m)
117+
it_highlights "%<foo>", %(\e[93m%<foo>\e[39m)
118+
it_highlights "%q(foo)", %(\e[93m%q(foo)\e[39m)
119+
it_highlights "%Q(foo)", %(\e[93m%Q(foo)\e[39m)
120+
it_highlights "%r(foo)xim", %(\e[93m%r(foo)\e[39mxim)
121+
it_highlights "%x(foo)", %(\e[93m%x(foo)\e[39m)
122+
123+
it_highlights "%w(foo bar baz)", %(\e[93m%w(foo bar baz)\e[39m)
124+
it_highlights "%w(foo bar\n baz)", %(\e[93m%w(foo bar\n baz)\e[39m)
125+
it_highlights "%w<foo bar baz>", %(\e[93m%w<foo bar baz>\e[39m)
126+
it_highlights "%i(foo bar baz)", %(\e[93m%i(foo bar baz)\e[39m)
127+
128+
it_highlights "Set{1, 2, 3}", %(\e[36mSet\e[39m{\e[35m1\e[39m, \e[35m2\e[39m, \e[35m3\e[39m})
129129

130130
it_highlights <<-CRYSTAL, <<-ANSI
131131
foo, bar = <<-FOO, <<-BAR
@@ -134,16 +134,16 @@ describe Crystal::SyntaxHighlighter::Colorize do
134134
bar
135135
BAR
136136
CRYSTAL
137-
foo, bar \e[91m=\e[0m \e[93m<<-FOO\e[0m, \e[93m<<-BAR\e[0m
137+
foo, bar \e[91m=\e[39m \e[93m<<-FOO\e[39m, \e[93m<<-BAR\e[39m
138138
\e[93m foo
139-
FOO\e[0m
139+
FOO\e[39m
140140
\e[93m bar
141-
BAR\e[0m
141+
BAR\e[39m
142142
ANSI
143143
end
144144
145145
describe ".highlight!" do
146-
it_highlights! %(foo = bar("baz\#{PI + 1}") # comment), %(foo \e[91m=\e[0m bar(\e[93m"baz\#{\e[0m\e[36mPI\e[0m \e[91m+\e[0m \e[35m1\e[0m\e[93m}"\e[0m) \e[90m# comment\e[0m)
146+
it_highlights! %(foo = bar("baz\#{PI + 1}") # comment), %(foo \e[91m=\e[39m bar(\e[93m"baz\#{\e[39m\e[36mPI\e[39m \e[91m+\e[39m \e[35m1\e[39m\e[93m}"\e[39m) \e[90m# comment\e[39m)
147147
148148
it_highlights! <<-CRYSTAL
149149
foo, bar = <<-FOO, <<-BAR

0 commit comments

Comments
 (0)