Skip to content

Commit c8462ef

Browse files
committed
Support Ruby 4.0 concise set syntax
1 parent f4a4270 commit c8462ef

File tree

8 files changed

+331
-191
lines changed

8 files changed

+331
-191
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
strategy:
1010
matrix:
1111
ruby:
12-
#- '4.0'
12+
- '4.0'
1313
- '3.4'
1414
- '3.3'
1515
- '3.2'

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Require Ruby 3
55
* Relax Ruby version requirement to allow Ruby 4.0
66
* Support Ruby 3.4 hash inspects
7-
* Support Ruby 4.0 changes (TODO)
7+
* Support Ruby 4.0 concise set syntax
88

99
## 2.2.2
1010
* Relax Ruby version requirement to allow 3.0

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ Please note that WIRB also works well for Ruby 1 and Ruby 2 - just install the l
99
## Features
1010

1111
* Syntax highlighting for inspected Ruby objects
12-
* No monkey patches anywhere
1312
* Support for generic objects, especially enumerators, and nested generic objects
14-
* Supports common standard library objects, like `Set`
13+
* Supports common standard library objects
1514
* Color schemas customizable via YAML
1615

1716
## Install

spec/spec_helper.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,8 @@ def spaced_hashes?
9393

9494
def symbol_hash_keys?
9595
RUBY_VERSION >= "3.4.0"
96+
end
97+
98+
def concise_set?
99+
RUBY_VERSION >= "4.0.0"
96100
end

spec/tokenizer_enumerator_spec.rb

Lines changed: 214 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,40 @@
2222
end
2323

2424
please do check Set[2,3,4].map
25-
tokens.should == [
26-
[:open_object, "#<"],
27-
[:object_class, "Enumerator"],
28-
[:object_description_prefix, ":"],
25+
set = concise_set? ? [
26+
[:class, "Set"],
27+
[:open_array, "["],
28+
[:number, "2"],
29+
[:comma, ","],
2930
[:whitespace, " "],
31+
[:number, "3"],
32+
[:comma, ","],
33+
[:whitespace, " "],
34+
[:number, "4"],
35+
[:close_array, "]"],
36+
] : [
3037
[:open_object, "#<"],
3138
[:object_class, "Set"],
3239
[:object_description_prefix, ":"],
3340
[:whitespace, " "],
3441
[:open_set, "{"],
35-
[:number, "2"],
42+
[:number, /\d+/],
3643
[:comma, ","],
3744
[:whitespace, " "],
38-
[:number, "3"],
45+
[:number, /\d+/],
3946
[:comma, ","],
4047
[:whitespace, " "],
41-
[:number, "4"],
48+
[:number, /\d+/],
4249
[:close_set, "}"],
4350
[:close_object, ">"],
51+
]
52+
53+
tokens.should be_like [
54+
[:open_object, "#<"],
55+
[:object_class, "Enumerator"],
56+
[:object_description_prefix, ":"],
57+
[:whitespace, " "],
58+
*set,
4459
[:object_description, RubyEngine.truffle? ? ":collect" : ":map"],
4560
[:close_object, ">"],
4661
]
@@ -89,36 +104,65 @@
89104
end
90105

91106
please do check [2,Set[{1=>2}],4].map
92-
tokens.should == [
93-
[:open_object, "#<"],
94-
[:object_class, "Enumerator"],
95-
[:object_description_prefix, ":"],
96-
[:whitespace, " "],
97-
[:open_array, "["],
98-
[:number, "2"],
99-
[:comma, ","],
100-
[:whitespace, " "],
101-
[:open_object, "#<"],
102-
[:object_class, "Set"],
103-
[:object_description_prefix, ":"],
104-
[:whitespace, " "],
105-
[:open_set, "{"],
106-
[:open_hash, "{"],
107-
[:number, "1"],
108-
([:whitespace, " "] if spaced_hashes?),
109-
[:refers, "=>"],
110-
([:whitespace, " "] if spaced_hashes?),
111-
[:number, "2"],
112-
[:close_hash, "}"],
113-
[:close_set, "}"],
114-
[:close_object, ">"],
115-
[:comma, ","],
116-
[:whitespace, " "],
117-
[:number, "4"],
118-
[:close_array, "]"],
119-
[:object_description, ":map"],
120-
[:close_object, ">"],
121-
].compact
107+
if concise_set?
108+
tokens.should == [
109+
[:open_object, "#<"],
110+
[:object_class, "Enumerator"],
111+
[:object_description_prefix, ":"],
112+
[:whitespace, " "],
113+
[:open_array, "["],
114+
[:number, "2"],
115+
[:comma, ","],
116+
[:whitespace, " "],
117+
[:class, "Set"],
118+
[:open_array, "["],
119+
[:open_hash, "{"],
120+
[:number, "1"],
121+
[:whitespace, " "],
122+
[:refers, "=>"],
123+
[:whitespace, " "],
124+
[:number, "2"],
125+
[:close_hash, "}"],
126+
[:close_array, "]"],
127+
[:comma, ","],
128+
[:whitespace, " "],
129+
[:number, "4"],
130+
[:close_array, "]"],
131+
[:object_description, ":map"],
132+
[:close_object, ">"],
133+
]
134+
else
135+
tokens.should == [
136+
[:open_object, "#<"],
137+
[:object_class, "Enumerator"],
138+
[:object_description_prefix, ":"],
139+
[:whitespace, " "],
140+
[:open_array, "["],
141+
[:number, "2"],
142+
[:comma, ","],
143+
[:whitespace, " "],
144+
[:open_object, "#<"],
145+
[:object_class, "Set"],
146+
[:object_description_prefix, ":"],
147+
[:whitespace, " "],
148+
[:open_set, "{"],
149+
[:open_hash, "{"],
150+
[:number, "1"],
151+
([:whitespace, " "] if spaced_hashes?),
152+
[:refers, "=>"],
153+
([:whitespace, " "] if spaced_hashes?),
154+
[:number, "2"],
155+
[:close_hash, "}"],
156+
[:close_set, "}"],
157+
[:close_object, ">"],
158+
[:comma, ","],
159+
[:whitespace, " "],
160+
[:number, "4"],
161+
[:close_array, "]"],
162+
[:object_description, ":map"],
163+
[:close_object, ">"],
164+
].compact
165+
end
122166
end
123167

124168
please do check Wirb::Tokenizer.run('[2,3,4]')
@@ -140,72 +184,138 @@
140184
end
141185

142186
please do check [{1=>2},Wirb::Tokenizer.run('2'),Set[2,3],[3,4],[5,6].each].map
143-
tokens.should == [
144-
[:open_object, "#<"],
145-
[:object_class, "Enumerator"],
146-
[:object_description_prefix, ":"],
147-
[:whitespace, " "],
148-
[:open_array, "["],
149-
[:open_hash, "{"],
150-
[:number, "1"],
151-
([:whitespace, " "] if spaced_hashes?),
152-
[:refers, "=>"],
153-
([:whitespace, " "] if spaced_hashes?),
154-
[:number, "2"],
155-
[:close_hash, "}"],
156-
[:comma, ","],
157-
[:whitespace, " "],
158-
[:open_object, "#<"],
159-
[:object_class, "Enumerator"],
160-
[:object_description_prefix, ":"],
161-
[:whitespace, " "],
162-
[:class, "Wirb"],
163-
[:class_separator, "::"],
164-
[:class, "Tokenizer"],
165-
[:object_description, ":run("],
166-
[:open_string, "\""],
167-
[:string, "2"],
168-
[:close_string, "\""],
169-
[:object_description, ")"],
170-
[:close_object, ">"],
171-
[:comma, ","],
172-
[:whitespace, " "],
173-
[:open_object, "#<"],
174-
[:object_class, "Set"],
175-
[:object_description_prefix, ":"],
176-
[:whitespace, " "],
177-
[:open_set, "{"],
178-
[:number, "2"],
179-
[:comma, ","],
180-
[:whitespace, " "],
181-
[:number, "3"],
182-
[:close_set, "}"],
183-
[:close_object, ">"],
184-
[:comma, ","],
185-
[:whitespace, " "],
186-
[:open_array, "["],
187-
[:number, "3"],
188-
[:comma, ","],
189-
[:whitespace, " "],
190-
[:number, "4"],
191-
[:close_array, "]"],
192-
[:comma, ","],
193-
[:whitespace, " "],
194-
[:open_object, "#<"],
195-
[:object_class, "Enumerator"],
196-
[:object_description_prefix, ":"],
197-
[:whitespace, " "],
198-
[:open_array, "["],
199-
[:number, "5"],
200-
[:comma, ","],
201-
[:whitespace, " "],
202-
[:number, "6"],
203-
[:close_array, "]"],
204-
[:object_description, ":each"],
205-
[:close_object, ">"],
206-
[:close_array, "]"],
207-
[:object_description, ":map"],
208-
[:close_object, ">"],
209-
].compact
187+
if concise_set?
188+
tokens.should == [
189+
[:open_object, "#<"],
190+
[:object_class, "Enumerator"],
191+
[:object_description_prefix, ":"],
192+
[:whitespace, " "],
193+
[:open_array, "["],
194+
[:open_hash, "{"],
195+
[:number, "1"],
196+
[:whitespace, " "],
197+
[:refers, "=>"],
198+
[:whitespace, " "],
199+
[:number, "2"],
200+
[:close_hash, "}"],
201+
[:comma, ","],
202+
[:whitespace, " "],
203+
[:open_object, "#<"],
204+
[:object_class, "Enumerator"],
205+
[:object_description_prefix, ":"],
206+
[:whitespace, " "],
207+
[:class, "Wirb"],
208+
[:class_separator, "::"],
209+
[:class, "Tokenizer"],
210+
[:object_description, ":run("],
211+
[:open_string, "\""],
212+
[:string, "2"],
213+
[:close_string, "\""],
214+
[:object_description, ")"],
215+
[:close_object, ">"],
216+
[:comma, ","],
217+
[:whitespace, " "],
218+
[:class, "Set"],
219+
[:open_array, "["],
220+
[:number, "2"],
221+
[:comma, ","],
222+
[:whitespace, " "],
223+
[:number, "3"],
224+
[:close_array, "]"],
225+
[:comma, ","],
226+
[:whitespace, " "],
227+
[:open_array, "["],
228+
[:number, "3"],
229+
[:comma, ","],
230+
[:whitespace, " "],
231+
[:number, "4"],
232+
[:close_array, "]"],
233+
[:comma, ","],
234+
[:whitespace, " "],
235+
[:open_object, "#<"],
236+
[:object_class, "Enumerator"],
237+
[:object_description_prefix, ":"],
238+
[:whitespace, " "],
239+
[:open_array, "["],
240+
[:number, "5"],
241+
[:comma, ","],
242+
[:whitespace, " "],
243+
[:number, "6"],
244+
[:close_array, "]"],
245+
[:object_description, ":each"],
246+
[:close_object, ">"],
247+
[:close_array, "]"],
248+
[:object_description, ":map"],
249+
[:close_object, ">"],
250+
]
251+
else
252+
tokens.should == [
253+
[:open_object, "#<"],
254+
[:object_class, "Enumerator"],
255+
[:object_description_prefix, ":"],
256+
[:whitespace, " "],
257+
[:open_array, "["],
258+
[:open_hash, "{"],
259+
[:number, "1"],
260+
([:whitespace, " "] if spaced_hashes?),
261+
[:refers, "=>"],
262+
([:whitespace, " "] if spaced_hashes?),
263+
[:number, "2"],
264+
[:close_hash, "}"],
265+
[:comma, ","],
266+
[:whitespace, " "],
267+
[:open_object, "#<"],
268+
[:object_class, "Enumerator"],
269+
[:object_description_prefix, ":"],
270+
[:whitespace, " "],
271+
[:class, "Wirb"],
272+
[:class_separator, "::"],
273+
[:class, "Tokenizer"],
274+
[:object_description, ":run("],
275+
[:open_string, "\""],
276+
[:string, "2"],
277+
[:close_string, "\""],
278+
[:object_description, ")"],
279+
[:close_object, ">"],
280+
[:comma, ","],
281+
[:whitespace, " "],
282+
[:open_object, "#<"],
283+
[:object_class, "Set"],
284+
[:object_description_prefix, ":"],
285+
[:whitespace, " "],
286+
[:open_set, "{"],
287+
[:number, "2"],
288+
[:comma, ","],
289+
[:whitespace, " "],
290+
[:number, "3"],
291+
[:close_set, "}"],
292+
[:close_object, ">"],
293+
[:comma, ","],
294+
[:whitespace, " "],
295+
[:open_array, "["],
296+
[:number, "3"],
297+
[:comma, ","],
298+
[:whitespace, " "],
299+
[:number, "4"],
300+
[:close_array, "]"],
301+
[:comma, ","],
302+
[:whitespace, " "],
303+
[:open_object, "#<"],
304+
[:object_class, "Enumerator"],
305+
[:object_description_prefix, ":"],
306+
[:whitespace, " "],
307+
[:open_array, "["],
308+
[:number, "5"],
309+
[:comma, ","],
310+
[:whitespace, " "],
311+
[:number, "6"],
312+
[:close_array, "]"],
313+
[:object_description, ":each"],
314+
[:close_object, ">"],
315+
[:close_array, "]"],
316+
[:object_description, ":map"],
317+
[:close_object, ">"],
318+
].compact
319+
end
210320
end
211321
end

0 commit comments

Comments
 (0)