1
- require 'ripper'
1
+ begin
2
+ require 'ripper'
3
+ rescue LoadError => e
4
+ begin ; require 'ripper18' ; rescue LoadError ; raise ( e ) end
5
+ end
2
6
3
7
module YARD
4
8
module Parser
@@ -117,32 +121,32 @@ def enumerator
117
121
PARSER_EVENT_TABLE . each do |event , arity |
118
122
node_class = AstNode . node_class_for ( event )
119
123
120
- if /_new\z / =~ event and arity == 0
124
+ if /_new\z / =~ event . to_s and arity == 0
121
125
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
122
126
def on_#{ event } (*args)
123
- #{ node_class } .new(:list, args, listchar: charno...charno, listline: lineno..lineno)
127
+ #{ node_class } .new(:list, args, :listchar => charno...charno, :listline => lineno..lineno)
124
128
end
125
129
eof
126
- elsif /_add(_.+)?\z / =~ event
130
+ elsif /_add(_.+)?\z / =~ event . to_s
127
131
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
128
- undef on_#{ event } if instance_method(:on_ #{ event } )
132
+ begin; undef on_#{ event } ; rescue NameError; end
129
133
def on_#{ event } (list, item)
130
134
list.push(item)
131
135
list
132
136
end
133
137
eof
134
138
elsif MAPPINGS . has_key? ( event )
135
139
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
136
- undef on_#{ event } if instance_method(:on_ #{ event } )
140
+ begin; undef on_#{ event } ; rescue NameError; end
137
141
def on_#{ event } (*args)
138
142
visit_event #{ node_class } .new(:#{ event } , args)
139
143
end
140
144
eof
141
145
else
142
146
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
143
- undef on_#{ event } if instance_method(:on_ #{ event } )
147
+ begin; undef on_#{ event } ; rescue NameError; end
144
148
def on_#{ event } (*args)
145
- #{ node_class } .new(:#{ event } , args, listline: lineno..lineno, listchar: charno...charno)
149
+ #{ node_class } .new(:#{ event } , args, :listline => lineno..lineno, :listchar => charno...charno)
146
150
end
147
151
eof
148
152
end
@@ -151,17 +155,18 @@ def on_#{event}(*args)
151
155
SCANNER_EVENTS . each do |event |
152
156
ast_token = AST_TOKENS . include? ( event )
153
157
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
154
- undef on_#{ event } if instance_method(:on_ #{ event } )
158
+ begin; undef on_#{ event } ; rescue NameError; end
155
159
def on_#{ event } (tok)
156
160
visit_ns_token(:#{ event } , tok, #{ ast_token . inspect } )
157
161
end
158
162
eof
159
163
end
160
164
161
- REV_MAPPINGS . select { |k | k . is_a? ( Symbol ) } . each do |event , value |
165
+ REV_MAPPINGS . select { |k , v | k . is_a? ( Symbol ) } . each do |pair |
166
+ event , value = *pair
162
167
ast_token = AST_TOKENS . include? ( event )
163
168
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
164
- undef on_#{ event } if instance_method(:on_ #{ event } )
169
+ begin; undef on_#{ event } ; rescue NameError; end
165
170
def on_#{ event } (tok)
166
171
(@map[:#{ event } ] ||= []) << [lineno, charno]
167
172
visit_ns_token(:#{ event } , tok, #{ ast_token . inspect } )
@@ -171,7 +176,7 @@ def on_#{event}(tok)
171
176
172
177
[ :kw , :op ] . each do |event |
173
178
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
174
- undef on_#{ event } if instance_method(:on_ #{ event } )
179
+ begin; undef on_#{ event } ; rescue NameError; end
175
180
def on_#{ event } (tok)
176
181
unless @last_ns_token == [:kw, "def"] ||
177
182
(@tokens.last && @tokens.last[0] == :symbeg)
@@ -184,7 +189,7 @@ def on_#{event}(tok)
184
189
185
190
[ :sp , :nl , :ignored_nl ] . each do |event |
186
191
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
187
- undef on_#{ event } if instance_method(:on_ #{ event } )
192
+ begin; undef on_#{ event } ; rescue NameError; end
188
193
def on_#{ event } (tok)
189
194
add_token(:#{ event } , tok)
190
195
@charno += tok.length
@@ -193,7 +198,8 @@ def on_#{event}(tok)
193
198
end
194
199
195
200
def visit_event ( node )
196
- lstart , sstart = *@map [ MAPPINGS [ node . type ] ] . pop
201
+ map = @map [ MAPPINGS [ node . type ] ]
202
+ lstart , sstart = *( map ? map . pop : [ lineno , lineno ] )
197
203
node . source_range = Range . new ( sstart , @ns_charno - 1 )
198
204
node . line_range = Range . new ( lstart , lineno )
199
205
node
@@ -214,7 +220,7 @@ def visit_ns_token(token, data, ast_token = false)
214
220
@charno += data . length
215
221
@ns_charno = charno
216
222
if ast_token
217
- AstNode . new ( token , [ data ] , line : lineno ..lineno , char : ch ..charno -1 , token : true )
223
+ AstNode . new ( token , [ data ] , :line => lineno ..lineno , :char => ch ..charno -1 , :token => true )
218
224
end
219
225
end
220
226
@@ -281,7 +287,7 @@ def on_aref(*args)
281
287
ll , lc = *@map [ :aref ] . pop
282
288
sr = args . first . source_range . first ..lc
283
289
lr = args . first . line_range . first ..ll
284
- AstNode . new ( :aref , args , char : sr , line : lr )
290
+ AstNode . new ( :aref , args , :char => sr , :line => lr )
285
291
end
286
292
287
293
def on_rbracket ( tok )
@@ -303,17 +309,17 @@ def on_top_const_ref(*args)
303
309
304
310
def on_const_path_ref ( *args )
305
311
klass = AstNode . node_class_for ( :const_path_ref )
306
- klass . new ( :const_path_ref , args , listline : lineno ..lineno , listchar : charno ..charno )
312
+ klass . new ( :const_path_ref , args , :listline => lineno ..lineno , :listchar => charno ..charno )
307
313
end
308
314
309
315
[ :if_mod , :unless_mod , :while_mod ] . each do |kw |
310
316
node_class = AstNode . node_class_for ( kw )
311
317
module_eval ( <<-eof , __FILE__ , __LINE__ + 1 )
312
- undef on_#{ kw } if instance_method(:on_ #{ kw } )
318
+ begin; undef on_#{ kw } ; rescue NameError; end
313
319
def on_#{ kw } (*args)
314
320
sr = args.last.source_range.first..args.first.source_range.last
315
321
lr = args.last.line_range.first..args.first.line_range.last
316
- #{ node_class } .new(:#{ kw } , args, line: lr, char: sr)
322
+ #{ node_class } .new(:#{ kw } , args, :line => lr, :char => sr)
317
323
end
318
324
eof
319
325
end
@@ -336,7 +342,7 @@ def on_lambda(*args)
336
342
end
337
343
338
344
def on_string_content ( *args )
339
- AstNode . new ( :string_content , args , listline : lineno ..lineno , listchar : charno ..charno )
345
+ AstNode . new ( :string_content , args , :listline => lineno ..lineno , :listchar => charno ..charno )
340
346
end
341
347
342
348
def on_rescue ( exc , *args )
@@ -345,7 +351,7 @@ def on_rescue(exc, *args)
345
351
end
346
352
347
353
def on_void_stmt
348
- AstNode . new ( :void_stmt , [ ] , line : lineno ..lineno , char : charno ...charno )
354
+ AstNode . new ( :void_stmt , [ ] , :line => lineno ..lineno , :char => charno ...charno )
349
355
end
350
356
351
357
def on_params ( *args )
@@ -354,26 +360,26 @@ def on_params(*args)
354
360
if arg . first . class == Array
355
361
arg . map! do |sub_arg |
356
362
if sub_arg . class == Array
357
- AstNode . new ( :default_arg , sub_arg , listline : lineno ..lineno , listchar : charno ..charno )
363
+ AstNode . new ( :default_arg , sub_arg , :listline => lineno ..lineno , :listchar => charno ..charno )
358
364
else
359
365
sub_arg
360
366
end
361
367
end
362
368
end
363
- AstNode . new ( :list , arg , listline : lineno ..lineno , listchar : charno ..charno )
369
+ AstNode . new ( :list , arg , :listline => lineno ..lineno , :listchar => charno ..charno )
364
370
else
365
371
arg
366
372
end
367
373
end
368
- ParameterNode . new ( :params , args , listline : lineno ..lineno , listchar : charno ..charno )
374
+ ParameterNode . new ( :params , args , :listline => lineno ..lineno , :listchar => charno ..charno )
369
375
end
370
376
371
377
def on_label ( data )
372
378
add_token ( :label , data )
373
379
ch = charno
374
380
@charno += data . length
375
381
@ns_charno = charno
376
- AstNode . new ( :label , [ data [ 0 ...-1 ] ] , line : lineno ..lineno , char : ch ..charno -1 , token : true )
382
+ AstNode . new ( :label , [ data [ 0 ...-1 ] ] , :line => lineno ..lineno , :char => ch ..charno -1 , :token => true )
377
383
end
378
384
379
385
def on_comment ( comment )
0 commit comments