ripper-plus 1.2.2 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/ripper-plus/transformer.rb +4 -4
- data/lib/ripper-plus/version.rb +2 -2
- data/spec/transformer_spec.rb +29 -29
- metadata +4 -4
data/README.md
CHANGED
@@ -91,7 +91,7 @@ Need to be properly resolved. Did you know that, unlike the `label = label` exam
|
|
91
91
|
|
92
92
|
Why doesn't y end up `nil` in the default case, as it would if you typed `y = y` into a method definition?
|
93
93
|
|
94
|
-
Anyway, ripper-plus turns all method-call `:var_ref` nodes into `:
|
94
|
+
Anyway, ripper-plus turns all method-call `:var_ref` nodes into `:vcall` nodes; the node structure is otherwise unchanged. I believe Ripper should already make this distinction, and it can relatively simply: it simply has to re-implement the existing scope-tracking behavior to the relevant Ripper action routines. Not trivial, but `ripper-plus` does it in a couple hundred lines of Ruby.
|
95
95
|
|
96
96
|
# Error Handling
|
97
97
|
|
@@ -7,7 +7,7 @@ module RipperPlus
|
|
7
7
|
class DuplicateArgumentError < SyntaxError; end
|
8
8
|
# Transforms a 1.9.2 Ripper AST into a RipperPlus AST. The only
|
9
9
|
# change as a result of this transformation is that the nodes for
|
10
|
-
# local variable references and
|
10
|
+
# local variable references and vcalls (bareword calls to self)
|
11
11
|
# have different node types:
|
12
12
|
#
|
13
13
|
# def foo(x)
|
@@ -21,7 +21,7 @@ module RipperPlus
|
|
21
21
|
# [:@ident, "foo", [1, 4]],
|
22
22
|
# [:paren, [:params, [[:@ident, "x", [1, 8]]], nil, nil, nil, nil]],
|
23
23
|
# [:bodystmt,
|
24
|
-
# [[:
|
24
|
+
# [[:vcall, [:@ident, "y", [2, 2]]],
|
25
25
|
# [:assign,
|
26
26
|
# [:var_field, [:@ident, "y", [3, 2]]],
|
27
27
|
# [:var_ref, [:@ident, "x", [3, 6]]]]],
|
@@ -77,9 +77,9 @@ module RipperPlus
|
|
77
77
|
transform_tree(body, scope_stack)
|
78
78
|
when :var_ref
|
79
79
|
# When we reach a :var_ref, we should know everything we need to know
|
80
|
-
# in order to tell if it should be transformed into a :
|
80
|
+
# in order to tell if it should be transformed into a :vcall.
|
81
81
|
if tree[1][0] == :@ident && !scope_stack.has_variable?(tree[1][1])
|
82
|
-
tree[0] = :
|
82
|
+
tree[0] = :vcall
|
83
83
|
end
|
84
84
|
when :class
|
85
85
|
name, superclass, body = tree[1..3]
|
data/lib/ripper-plus/version.rb
CHANGED
data/spec/transformer_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe RipperPlus::Transformer do
|
4
|
-
describe '
|
5
|
-
it 'should transform a simple
|
4
|
+
describe 'vcall detection' do
|
5
|
+
it 'should transform a simple vcall in a method' do
|
6
6
|
input_tree =
|
7
7
|
[:program,
|
8
8
|
[[:def,
|
@@ -22,7 +22,7 @@ describe RipperPlus::Transformer do
|
|
22
22
|
[:paren, [:params, [[:@ident, "x", [1, 8]]], nil, nil, nil, nil]],
|
23
23
|
[:bodystmt,
|
24
24
|
[[:void_stmt],
|
25
|
-
[:
|
25
|
+
[:vcall, [:@ident, "y", [1, 12]]],
|
26
26
|
[:assign,
|
27
27
|
[:var_field, [:@ident, "y", [1, 15]]],
|
28
28
|
[:var_ref, [:@ident, "x", [1, 19]]]]],
|
@@ -51,7 +51,7 @@ describe RipperPlus::Transformer do
|
|
51
51
|
[:paren,
|
52
52
|
[:params,
|
53
53
|
[[:@ident, "x", [1, 8]]],
|
54
|
-
[[[:@ident, "y", [1, 11]], [:
|
54
|
+
[[[:@ident, "y", [1, 11]], [:vcall, [:@ident, "z", [1, 13]]]],
|
55
55
|
[[:@ident, "z", [1, 16]], [:var_ref, [:@ident, "y", [1, 18]]]]],
|
56
56
|
nil,
|
57
57
|
nil,
|
@@ -93,7 +93,7 @@ describe RipperPlus::Transformer do
|
|
93
93
|
[:params,
|
94
94
|
[[:@ident, "x", [1, 10]]],
|
95
95
|
[[[:@ident, "y", [1, 13]], [:var_ref, [:@ident, "x", [1, 15]]]],
|
96
|
-
[[:@ident, "z", [1, 18]], [:
|
96
|
+
[[:@ident, "z", [1, 18]], [:vcall, [:@ident, "a", [1, 20]]]]],
|
97
97
|
[:rest_param, [:@ident, "a", [1, 24]]],
|
98
98
|
nil,
|
99
99
|
nil],
|
@@ -122,7 +122,7 @@ describe RipperPlus::Transformer do
|
|
122
122
|
output_tree =
|
123
123
|
[:program,
|
124
124
|
[[:defs,
|
125
|
-
[:
|
125
|
+
[:vcall, [:@ident, "foo", [1, 4]]],
|
126
126
|
[:@period, ".", [1, 7]],
|
127
127
|
[:@ident, "silly", [1, 8]],
|
128
128
|
[:paren, [:params, nil, nil, nil, nil, nil]],
|
@@ -188,7 +188,7 @@ describe RipperPlus::Transformer do
|
|
188
188
|
[:arg_paren,
|
189
189
|
[:args_add_block,
|
190
190
|
[[:var_ref, [:@ident, "a", [1, 30]]],
|
191
|
-
[:
|
191
|
+
[:vcall, [:@ident, "c", [1, 33]]],
|
192
192
|
[:var_ref, [:@ident, "d", [1, 36]]]],
|
193
193
|
false]]]]]]
|
194
194
|
input_tree.should transform_to(output_tree)
|
@@ -241,8 +241,8 @@ describe RipperPlus::Transformer do
|
|
241
241
|
[:var_ref, [:@ident, "c", [1, 36]]],
|
242
242
|
[:var_ref, [:@ident, "d", [1, 39]]],
|
243
243
|
[:var_ref, [:@ident, "e", [1, 42]]],
|
244
|
-
[:
|
245
|
-
[:
|
244
|
+
[:vcall, [:@ident, "f", [1, 45]]],
|
245
|
+
[:vcall, [:@ident, "g", [1, 48]]]],
|
246
246
|
false]]],
|
247
247
|
[[:void_stmt]]]]]
|
248
248
|
input_tree.should transform_to(output_tree)
|
@@ -286,7 +286,7 @@ describe RipperPlus::Transformer do
|
|
286
286
|
[:params,
|
287
287
|
[[:@ident, "a", [1, 7]]],
|
288
288
|
[[[:@ident, "b", [1, 10]], [:var_ref, [:@ident, "a", [1, 12]]]],
|
289
|
-
[[:@ident, "c", [1, 15]], [:
|
289
|
+
[[:@ident, "c", [1, 15]], [:vcall, [:@ident, "d", [1, 17]]]]],
|
290
290
|
[:rest_param, [:@ident, "rest", [1, 21]]],
|
291
291
|
nil,
|
292
292
|
nil]],
|
@@ -301,10 +301,10 @@ describe RipperPlus::Transformer do
|
|
301
301
|
:*,
|
302
302
|
[:var_ref, [:@ident, "c", [1, 38]]]],
|
303
303
|
:*,
|
304
|
-
[:
|
304
|
+
[:vcall, [:@ident, "d", [1, 42]]]]]],
|
305
305
|
:+,
|
306
306
|
[:var_ref, [:@ident, "rest", [1, 47]]]]]]],
|
307
|
-
[:
|
307
|
+
[:vcall, [:@ident, "a", [1, 55]]]]]
|
308
308
|
input_tree.should transform_to output_tree
|
309
309
|
end
|
310
310
|
|
@@ -360,7 +360,7 @@ describe RipperPlus::Transformer do
|
|
360
360
|
[[:mlhs_paren, [:@ident, "z", [1, 26]]],
|
361
361
|
[:mlhs_paren, [:@ident, "a", [1, 29]]]]]],
|
362
362
|
[[[:@ident, "k", [1, 33]], [:var_ref, [:@ident, "z", [1, 37]]]],
|
363
|
-
[[:@ident, "j", [1, 40]], [:
|
363
|
+
[[:@ident, "j", [1, 40]], [:vcall, [:@ident, "d", [1, 44]]]]],
|
364
364
|
[:rest_param, [:@ident, "r", [1, 48]]],
|
365
365
|
nil,
|
366
366
|
[:blockarg, [:@ident, "blk", [1, 52]]]],
|
@@ -377,7 +377,7 @@ describe RipperPlus::Transformer do
|
|
377
377
|
[:var_ref, [:@ident, "r", [1, 84]]],
|
378
378
|
[:var_ref, [:@ident, "blk", [1, 87]]],
|
379
379
|
[:var_ref, [:@ident, "local", [1, 92]]],
|
380
|
-
[:
|
380
|
+
[:vcall, [:@ident, "foo", [1, 99]]]],
|
381
381
|
false]]]]]]]
|
382
382
|
input_tree.should transform_to(output_tree)
|
383
383
|
end
|
@@ -411,8 +411,8 @@ describe RipperPlus::Transformer do
|
|
411
411
|
[:var_ref, [:@ident, "y", [1, 28]]],
|
412
412
|
[:var_ref, [:@ident, "z", [1, 30]]]]]],
|
413
413
|
[:var_ref, [:@ident, "x", [1, 36]]],
|
414
|
-
[:
|
415
|
-
[:
|
414
|
+
[:vcall, [:@ident, "y", [1, 39]]],
|
415
|
+
[:vcall, [:@ident, "z", [1, 42]]]]]
|
416
416
|
input_tree.should transform_to(output_tree)
|
417
417
|
end
|
418
418
|
|
@@ -431,7 +431,7 @@ describe RipperPlus::Transformer do
|
|
431
431
|
[:class,
|
432
432
|
[:const_ref, [:@const, "Foo", [1, 13]]],
|
433
433
|
nil,
|
434
|
-
[:bodystmt, [[:
|
434
|
+
[:bodystmt, [[:vcall, [:@ident, "x", [1, 18]]]], nil, nil, nil]],
|
435
435
|
[:var_ref, [:@ident, "x", [1, 26]]]]]
|
436
436
|
input_tree.should transform_to(output_tree)
|
437
437
|
end
|
@@ -454,7 +454,7 @@ describe RipperPlus::Transformer do
|
|
454
454
|
[:class,
|
455
455
|
[:const_ref, [:@const, "A", [1, 18]]],
|
456
456
|
[:var_ref, [:@ident, "x", [1, 22]]],
|
457
|
-
[:bodystmt, [[:
|
457
|
+
[:bodystmt, [[:vcall, [:@ident, "x", [1, 25]]]], nil, nil, nil]]]]
|
458
458
|
input_tree.should transform_to output_tree
|
459
459
|
end
|
460
460
|
|
@@ -476,7 +476,7 @@ describe RipperPlus::Transformer do
|
|
476
476
|
[:module,
|
477
477
|
[:const_ref, [:@const, "Foo", [1, 14]]],
|
478
478
|
[:bodystmt,
|
479
|
-
[[:void_stmt], [:
|
479
|
+
[[:void_stmt], [:vcall, [:@ident, "x", [1, 19]]]],
|
480
480
|
nil,
|
481
481
|
nil,
|
482
482
|
nil]],
|
@@ -496,7 +496,7 @@ describe RipperPlus::Transformer do
|
|
496
496
|
[[:assign, [:var_field, [:@ident, "x", [1, 0]]], [:@int, "5", [1, 4]]],
|
497
497
|
[:sclass,
|
498
498
|
[:var_ref, [:@const, "String", [1, 16]]],
|
499
|
-
[:bodystmt, [[:
|
499
|
+
[:bodystmt, [[:vcall, [:@ident, "x", [1, 24]]]], nil, nil, nil]]]]
|
500
500
|
input_tree.should transform_to output_tree
|
501
501
|
end
|
502
502
|
|
@@ -512,7 +512,7 @@ describe RipperPlus::Transformer do
|
|
512
512
|
input_tree.should transform_to input_tree
|
513
513
|
end
|
514
514
|
|
515
|
-
it 'refers to the enclosing environment to determine the singleton to open - resulting in
|
515
|
+
it 'refers to the enclosing environment to determine the singleton to open - resulting in vcall' do
|
516
516
|
input_tree =
|
517
517
|
[:program,
|
518
518
|
[[:sclass,
|
@@ -521,7 +521,7 @@ describe RipperPlus::Transformer do
|
|
521
521
|
output_tree =
|
522
522
|
[:program,
|
523
523
|
[[:sclass,
|
524
|
-
[:
|
524
|
+
[:vcall, [:@ident, "x", [1, 19]]],
|
525
525
|
[:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
|
526
526
|
input_tree.should transform_to output_tree
|
527
527
|
end
|
@@ -639,18 +639,18 @@ describe RipperPlus::Transformer do
|
|
639
639
|
nil,
|
640
640
|
[[:command,
|
641
641
|
[:@ident, "p", [1, 48]],
|
642
|
-
[:args_add_block, [[:
|
642
|
+
[:args_add_block, [[:vcall, [:@ident, "err", [1, 50]]]], false]]],
|
643
643
|
nil],
|
644
644
|
[:else,
|
645
645
|
[[:void_stmt],
|
646
646
|
[:command,
|
647
647
|
[:@ident, "p", [1, 61]],
|
648
|
-
[:args_add_block, [[:
|
648
|
+
[:args_add_block, [[:vcall, [:@ident, "err", [1, 63]]]], false]]]],
|
649
649
|
[:ensure,
|
650
650
|
[[:void_stmt],
|
651
651
|
[:command,
|
652
652
|
[:@ident, "p", [1, 76]],
|
653
|
-
[:args_add_block, [[:
|
653
|
+
[:args_add_block, [[:vcall, [:@ident, "err", [1, 78]]]], false]]]]]]]]
|
654
654
|
input_tree.should transform_to output_tree
|
655
655
|
end
|
656
656
|
|
@@ -691,7 +691,7 @@ describe RipperPlus::Transformer do
|
|
691
691
|
[:command,
|
692
692
|
[:@ident, "p", [1, 38]],
|
693
693
|
[:args_add_block, [[:var_ref, [:@ident, "name", [1, 40]]]], false]],
|
694
|
-
[:
|
694
|
+
[:vcall, [:@ident, "named", [1, 46]]]],
|
695
695
|
nil,
|
696
696
|
nil,
|
697
697
|
nil]]]]
|
@@ -730,8 +730,8 @@ describe RipperPlus::Transformer do
|
|
730
730
|
[[:void_stmt],
|
731
731
|
[:binary,
|
732
732
|
[:paren,
|
733
|
-
[[:
|
734
|
-
[:
|
733
|
+
[[:vcall, [:@ident, "foo", [1, 13]]],
|
734
|
+
[:vcall, [:@ident, "bar", [1, 18]]],
|
735
735
|
[:regexp_literal,
|
736
736
|
[[:@tstring_content, "name: (?<name>w+) (?<numba>d+)", [1, 24]]],
|
737
737
|
[:@regexp_end, "/", [1, 54]]]]],
|
@@ -739,7 +739,7 @@ describe RipperPlus::Transformer do
|
|
739
739
|
[:var_ref, [:@ident, "a", [1, 60]]]],
|
740
740
|
[:var_ref, [:@ident, "name", [1, 63]]],
|
741
741
|
[:var_ref, [:@ident, "numba", [1, 69]]],
|
742
|
-
[:
|
742
|
+
[:vcall, [:@ident, "number", [1, 76]]]],
|
743
743
|
nil,
|
744
744
|
nil,
|
745
745
|
nil]]]]
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: ripper-plus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Michael Edgar
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-07-09 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -98,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
98
|
requirements:
|
99
99
|
- - ">="
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
hash:
|
101
|
+
hash: 393845268359154104
|
102
102
|
segments:
|
103
103
|
- 0
|
104
104
|
version: "0"
|
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
111
|
requirements: []
|
112
112
|
|
113
113
|
rubyforge_project:
|
114
|
-
rubygems_version: 1.
|
114
|
+
rubygems_version: 1.8.5
|
115
115
|
signing_key:
|
116
116
|
specification_version: 3
|
117
117
|
summary: Parses Ruby code into an improved Ripper AST format
|