@@ -5,6 +5,8 @@ class RDoc::Parser::RipperStateLex
5
5
# TODO: Remove this constants after Ruby 2.4 EOL
6
6
RIPPER_HAS_LEX_STATE = Ripper ::Filter . method_defined? ( :state )
7
7
8
+ Token = Struct . new ( :line_no , :char_no , :kind , :text , :state )
9
+
8
10
EXPR_NONE = 0
9
11
EXPR_BEG = 1
10
12
EXPR_END = 2
@@ -48,7 +50,7 @@ def on_nl(tok, data)
48
50
@continue = false
49
51
@lex_state = EXPR_BEG unless ( EXPR_LABEL & @lex_state ) != 0
50
52
end
51
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
53
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
52
54
end
53
55
54
56
def on_ignored_nl ( tok , data )
@@ -59,7 +61,7 @@ def on_ignored_nl(tok, data)
59
61
@continue = false
60
62
@lex_state = EXPR_BEG unless ( EXPR_LABEL & @lex_state ) != 0
61
63
end
62
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
64
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
63
65
end
64
66
65
67
def on_op ( tok , data )
@@ -101,7 +103,7 @@ def on_op(tok, data)
101
103
@lex_state = EXPR_BEG
102
104
end
103
105
end
104
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
106
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
105
107
end
106
108
107
109
def on_kw ( tok , data )
@@ -130,54 +132,54 @@ def on_kw(tok, data)
130
132
@lex_state = EXPR_END
131
133
end
132
134
end
133
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
135
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
134
136
end
135
137
136
138
def on_tstring_beg ( tok , data )
137
139
@lex_state = EXPR_BEG
138
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
140
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
139
141
end
140
142
141
143
def on_tstring_end ( tok , data )
142
144
@lex_state = EXPR_END | EXPR_ENDARG
143
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
145
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
144
146
end
145
147
146
148
def on_CHAR ( tok , data )
147
149
@lex_state = EXPR_END
148
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
150
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
149
151
end
150
152
151
153
def on_period ( tok , data )
152
154
@lex_state = EXPR_DOT
153
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
155
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
154
156
end
155
157
156
158
def on_int ( tok , data )
157
159
@lex_state = EXPR_END | EXPR_ENDARG
158
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
160
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
159
161
end
160
162
161
163
def on_float ( tok , data )
162
164
@lex_state = EXPR_END | EXPR_ENDARG
163
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
165
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
164
166
end
165
167
166
168
def on_rational ( tok , data )
167
169
@lex_state = EXPR_END | EXPR_ENDARG
168
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
170
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
169
171
end
170
172
171
173
def on_imaginary ( tok , data )
172
174
@lex_state = EXPR_END | EXPR_ENDARG
173
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
175
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
174
176
end
175
177
176
178
def on_symbeg ( tok , data )
177
179
@lex_state = EXPR_FNAME
178
180
@continue = true
179
181
@in_fname = true
180
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
182
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
181
183
end
182
184
183
185
private def on_variables ( event , tok , data )
@@ -196,7 +198,7 @@ def on_symbeg(tok, data)
196
198
else
197
199
@lex_state = EXPR_CMDARG
198
200
end
199
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => event , :text => tok , :state => @lex_state } )
201
+ @callback . call ( Token . new ( lineno , column , event , tok , @lex_state ) )
200
202
end
201
203
202
204
def on_ident ( tok , data )
@@ -225,32 +227,32 @@ def on_backref(tok, data)
225
227
226
228
def on_lparen ( tok , data )
227
229
@lex_state = EXPR_LABEL | EXPR_BEG
228
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
230
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
229
231
end
230
232
231
233
def on_rparen ( tok , data )
232
234
@lex_state = EXPR_ENDFN
233
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
235
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
234
236
end
235
237
236
238
def on_lbrace ( tok , data )
237
239
@lex_state = EXPR_LABEL | EXPR_BEG
238
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
240
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
239
241
end
240
242
241
243
def on_rbrace ( tok , data )
242
244
@lex_state = EXPR_ENDARG
243
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
245
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
244
246
end
245
247
246
248
def on_lbracket ( tok , data )
247
249
@lex_state = EXPR_LABEL | EXPR_BEG
248
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
250
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
249
251
end
250
252
251
253
def on_rbracket ( tok , data )
252
254
@lex_state = EXPR_ENDARG
253
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
255
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
254
256
end
255
257
256
258
def on_const ( tok , data )
@@ -262,36 +264,36 @@ def on_const(tok, data)
262
264
else
263
265
@lex_state = EXPR_CMDARG
264
266
end
265
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
267
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
266
268
end
267
269
268
270
def on_sp ( tok , data )
269
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
271
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
270
272
end
271
273
272
274
def on_comma ( tok , data )
273
275
@lex_state = EXPR_BEG | EXPR_LABEL if ( EXPR_ARG_ANY & @lex_state ) != 0
274
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
276
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
275
277
end
276
278
277
279
def on_comment ( tok , data )
278
280
@lex_state = EXPR_BEG unless ( EXPR_LABEL & @lex_state ) != 0
279
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
281
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
280
282
end
281
283
282
284
def on_ignored_sp ( tok , data )
283
285
@lex_state = EXPR_BEG unless ( EXPR_LABEL & @lex_state ) != 0
284
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
286
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
285
287
end
286
288
287
289
def on_heredoc_end ( tok , data )
288
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => __method__ , :text => tok , :state => @lex_state } )
290
+ @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
289
291
@lex_state = EXPR_BEG
290
292
end
291
293
292
294
def on_default ( event , tok , data )
293
295
reset
294
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => event , :text => tok , :state => @lex_state } )
296
+ @callback . call ( Token . new ( lineno , column , event , tok , @lex_state ) )
295
297
end
296
298
297
299
def each ( &block )
@@ -306,7 +308,7 @@ def initialize(code)
306
308
end
307
309
308
310
def on_default ( event , tok , data )
309
- @callback . call ( { :line_no => lineno , :char_no => column , :kind => event , :text => tok , : state => state } )
311
+ @callback . call ( Token . new ( lineno , column , event , tok , state ) )
310
312
end
311
313
312
314
def each ( &block )
@@ -367,7 +369,7 @@ def get_squashed_tk
367
369
368
370
private def get_symbol_tk ( tk )
369
371
is_symbol = true
370
- symbol_tk = { :line_no => tk [ : line_no] , :char_no => tk [ : char_no] , :kind => : on_symbol }
372
+ symbol_tk = Token . new ( tk . line_no , tk . char_no , :on_symbol )
371
373
if ":'" == tk [ :text ] or ':"' == tk [ :text ]
372
374
tk1 = get_string_tk ( tk )
373
375
symbol_tk [ :text ] = tk1 [ :text ]
@@ -436,13 +438,7 @@ def get_squashed_tk
436
438
end
437
439
end
438
440
end
439
- {
440
- :line_no => tk [ :line_no ] ,
441
- :char_no => tk [ :char_no ] ,
442
- :kind => kind ,
443
- :text => string ,
444
- :state => state
445
- }
441
+ Token . new ( tk . line_no , tk . char_no , kind , string , state )
446
442
end
447
443
448
444
private def get_regexp_tk ( tk )
@@ -460,13 +456,7 @@ def get_squashed_tk
460
456
string = string + inner_str_tk [ :text ]
461
457
end
462
458
end
463
- {
464
- :line_no => tk [ :line_no ] ,
465
- :char_no => tk [ :char_no ] ,
466
- :kind => :on_regexp ,
467
- :text => string ,
468
- :state => state
469
- }
459
+ Token . new ( tk . line_no , tk . char_no , :on_regexp , string , state )
470
460
end
471
461
472
462
private def get_embdoc_tk ( tk )
@@ -475,13 +465,7 @@ def get_squashed_tk
475
465
string = string + embdoc_tk [ :text ]
476
466
end
477
467
string = string + embdoc_tk [ :text ]
478
- {
479
- :line_no => tk [ :line_no ] ,
480
- :char_no => tk [ :char_no ] ,
481
- :kind => :on_embdoc ,
482
- :text => string ,
483
- :state => embdoc_tk [ :state ]
484
- }
468
+ Token . new ( tk . line_no , tk . char_no , :on_embdoc , string , embdoc_tk . state )
485
469
end
486
470
487
471
private def get_heredoc_tk ( heredoc_name , indent )
@@ -499,13 +483,7 @@ def get_squashed_tk
499
483
start_tk = tk unless start_tk
500
484
prev_tk = tk unless prev_tk
501
485
@buf . unshift tk # closing heredoc
502
- heredoc_tk = {
503
- :line_no => start_tk [ :line_no ] ,
504
- :char_no => start_tk [ :char_no ] ,
505
- :kind => :on_heredoc ,
506
- :text => string ,
507
- :state => prev_tk [ :state ]
508
- }
486
+ heredoc_tk = Token . new ( start_tk . line_no , start_tk . char_no , :on_heredoc , string , prev_tk . state )
509
487
@buf . unshift heredoc_tk
510
488
end
511
489
@@ -561,13 +539,7 @@ def get_squashed_tk
561
539
end
562
540
end
563
541
text = "#{ start_token } #{ string } #{ end_token } "
564
- {
565
- :line_no => line_no ,
566
- :char_no => char_no ,
567
- :kind => :on_dstring ,
568
- :text => text ,
569
- :state => state
570
- }
542
+ Token . new ( line_no , char_no , :on_dstring , text , state )
571
543
end
572
544
573
545
private def get_op_tk ( tk )
0 commit comments