jruby-parser 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/jruby-parser.jar +0 -0
- data/lib/jruby-parser/util/coercer.rb +22 -16
- data/lib/jruby-parser/version.rb +1 -1
- data/spec/ast/node/array_spec.rb +24 -0
- data/spec/ast/node/break_spec.rb +19 -0
- data/spec/ast/node/comments_spec.rb +59 -0
- data/spec/{jruby-parser → ast/node}/find_scopes_spec.rb +4 -7
- data/spec/ast/node/get_declaration_spec.rb +50 -0
- data/spec/ast/node/get_defined_scope_spec.rb +89 -0
- data/spec/{jruby-parser → ast/node}/get_node_at_spec.rb +3 -7
- data/spec/ast/node/get_occurences_spec.rb +87 -0
- data/spec/{jruby-parser → ast/node}/is_block_parameter_spec.rb +4 -8
- data/spec/{jruby-parser → ast/node}/is_method_parameter_spec.rb +4 -8
- data/spec/ast/node/next_spec.rb +19 -0
- data/spec/ast/node/op_element_asgn_and_spec.rb +11 -0
- data/spec/ast/node/op_element_asgn_or_spec.rb +11 -0
- data/spec/ast/node/op_element_asgn_spec.rb +11 -0
- data/spec/ast/node/return_spec.rb +19 -0
- data/spec/ast/node_path.rb +1 -5
- data/spec/helpers.rb +4 -0
- data/spec/helpers/node_helpers.rb +17 -6
- data/spec/helpers/parser_helpers.rb +84 -8
- data/spec/jruby-parser/find_spec.rb +2 -6
- data/spec/jruby-parser/parse_spec.rb +17 -0
- data/spec/jruby-parser/rewriting_spec.rb +27 -12
- data/spec/jruby-parser/static_analysis_spec.rb +51 -48
- data/spec/parser/alias_spec.rb +2 -6
- data/spec/parser/broken_spec.rb +2 -6
- data/spec/parser/calls_spec.rb +100 -0
- data/spec/positions/alias_spec.rb +23 -0
- data/spec/positions/arg_spec.rb +2 -6
- data/spec/positions/attr_asgn_spec.rb +2 -6
- data/spec/positions/call_spec.rb +2 -10
- data/spec/positions/conditionals_spec.rb +2 -6
- data/spec/positions/hash_spec.rb +2 -6
- data/spec/positions/heredoc_spec.rb +2 -6
- data/spec/positions/name_spec.rb +56 -0
- data/spec/positions/op_asgn_or_spec.rb +15 -0
- data/spec/positions/str_spec.rb +2 -6
- metadata +51 -21
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1a8e7fce9790155c3de58d121b229d94dae09c80
|
4
|
+
data.tar.gz: 29e91b679491ee3e139e57cb68a3a0679367c045
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 23453af440f18474847c8ac0ee69cecec9dd82fa6c70b481349e73636a9b31d8af718fd5a1e9f457487d0b5f5a2cfa5e299229ff79a5d41e115d3a7f8db8ce33
|
7
|
+
data.tar.gz: 9ff515f22b2116e0d03702612308fa3748ad5e5c84ddf3e37a552c81626973a4f326cca65da0f797ab1ff11d7290d0f53ce5272e25407fc835b49041e7f41768
|
data/lib/jruby-parser.jar
CHANGED
Binary file
|
@@ -3,10 +3,11 @@ module JRubyParser
|
|
3
3
|
def self.included(cls)
|
4
4
|
cls.class_eval do
|
5
5
|
def receiver=(value)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
old_value = getReceiver
|
7
|
+
if value.respond_to? :to_ast_node
|
8
|
+
value = value.to_ast_node(old_value.position)
|
9
|
+
end
|
10
|
+
setReceiver(value)
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
@@ -16,10 +17,12 @@ module JRubyParser
|
|
16
17
|
def self.included(cls)
|
17
18
|
cls.class_eval do
|
18
19
|
def value=(value)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
old_value = getValue
|
21
|
+
if value.respond_to? :to_ast_node
|
22
|
+
value = value.to_ast_node(old_value.position)
|
23
|
+
end
|
24
|
+
|
25
|
+
setValue(value)
|
23
26
|
end
|
24
27
|
end
|
25
28
|
end
|
@@ -29,16 +32,19 @@ module JRubyParser
|
|
29
32
|
def self.included(cls)
|
30
33
|
cls.class_eval do
|
31
34
|
def args=(value)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
old_value = getArgs
|
36
|
+
if value.respond_to? :to_ast_node
|
37
|
+
value = value.to_ast_node(old_value.position)
|
38
|
+
end
|
39
|
+
|
40
|
+
unless value.position
|
41
|
+
value.position = old_value.position
|
42
|
+
value.each { |e| e.position = old_value.position } #if value.respond_to? :each
|
43
|
+
end
|
38
44
|
|
39
|
-
|
45
|
+
setArgs(value)
|
40
46
|
end
|
41
47
|
end
|
42
48
|
end
|
43
49
|
end
|
44
|
-
end
|
50
|
+
end
|
data/lib/jruby-parser/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../../helpers'
|
2
|
+
|
3
|
+
tnode, fnode = org.jrubyparser.ast.TrueNode, org.jrubyparser.ast.FalseNode
|
4
|
+
inil = org.jrubyparser.ast.ImplicitNilNode
|
5
|
+
|
6
|
+
describe org.jrubyparser.ast.ArrayNode do
|
7
|
+
VERSIONS.each do |v|
|
8
|
+
it "can have multiple elements [#{v}]" do
|
9
|
+
parse("[true, false]", v).find_node(:array).tap do |list|
|
10
|
+
list.should have_position(0, 0, 0, 13)
|
11
|
+
list.size.should == 2
|
12
|
+
list.child_nodes.to_a.map(&:class).should == [tnode, fnode]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "can have nasty implcit nil elements [#{v}]" do
|
17
|
+
parse("[()]", v).find_node(:array).tap do |list|
|
18
|
+
list.should have_position(0, 0, 0, 4)
|
19
|
+
list.size.should == 1
|
20
|
+
list.child_nodes.to_a.map(&:class).should == [inil]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative '../../helpers'
|
2
|
+
|
3
|
+
describe org.jrubyparser.ast.BreakNode do
|
4
|
+
VERSIONS.each do |v|
|
5
|
+
it "can accept a single value [#{v}]" do
|
6
|
+
rparse("break true", v).find_node(:break).tap do |b|
|
7
|
+
b.should have_position(0, 0, 0, 10)
|
8
|
+
b.value_node.class.should == org.jrubyparser.ast.TrueNode
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "can accept no value [#{v}]" do
|
13
|
+
rparse("break", v).find_node(:break).tap do |b|
|
14
|
+
b.should have_position(0, 0, 0, 5)
|
15
|
+
b.value_node.should == nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative '../../helpers'
|
2
|
+
|
3
|
+
describe org.jrubyparser.ast.Node do
|
4
|
+
VERSIONS.each do |v|
|
5
|
+
it "can see a single previous comment [#{v}]" do
|
6
|
+
rparse("# c1\ndef foo; end", v).find_node(:defn).tap do |defn|
|
7
|
+
defn.previous_comments.to_a.map(&:content).should =~ ["# c1"]
|
8
|
+
end
|
9
|
+
|
10
|
+
rparse("# c1\ndef foo; end\nfoo\n", v).find_node(:defn).tap do |defn|
|
11
|
+
defn.previous_comments.to_a.map(&:content).should =~ ["# c1"]
|
12
|
+
end
|
13
|
+
|
14
|
+
rparse("# c1\ndef self.[]\nend", v).find_node(:defs).tap do |defs|
|
15
|
+
defs.previous_comments.to_a.map(&:content).should =~ ["# c1"]
|
16
|
+
end
|
17
|
+
|
18
|
+
rparse("# c1\nclass Foo\nend", v).find_node(:class).tap do |defn|
|
19
|
+
defn.previous_comments.to_a.map(&:content).should =~ ["# c1"]
|
20
|
+
end
|
21
|
+
|
22
|
+
rparse("# c1\nif 1; end", v).find_node(:if).tap do |ifn|
|
23
|
+
ifn.previous_comments.to_a.map(&:content).should =~ ["# c1"]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "can see a multiple previous comments [#{v}]" do
|
28
|
+
rparse("# c1\n# c2\ndef foo; end", v).find_node(:defn).tap do |defn|
|
29
|
+
defn.previous_comments.to_a.map(&:content).should =~ ["# c1", "# c2"]
|
30
|
+
end
|
31
|
+
|
32
|
+
rparse("# c1\n# c2\nclass Foo\nend", v).find_node(:class).tap do |defn|
|
33
|
+
defn.previous_comments.to_a.map(&:content).should =~ ["# c1", "# c2"]
|
34
|
+
end
|
35
|
+
|
36
|
+
rparse("# c1\n# c2\nif 1\nend", v).find_node(:if).tap do |ifn|
|
37
|
+
ifn.previous_comments.to_a.map(&:content).should =~ ["# c1", "# c2"]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "can see an inline comment [#{v}]" do
|
42
|
+
rparse("1 + 2 # inline").find_node(:call).tap do |call|
|
43
|
+
call.inline_comment.content.should == "# inline"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "places trailing comments as last element in root [#{v}]" do
|
48
|
+
rparse("def foo\n end\n #trailing").child_nodes.to_a.last.tap do |child|
|
49
|
+
child.content.should =~ /#trailing/
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "handles a lone comment [#{v}]" do
|
54
|
+
rparse("#trailing").child_nodes.to_a.last.tap do |child|
|
55
|
+
child.content.should =~ /#trailing/
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,11 +1,8 @@
|
|
1
|
-
|
2
|
-
$LOAD_PATH.unshift File.dirname(__FILE__) + "/../helpers"
|
3
|
-
require 'java'
|
4
|
-
require 'jruby-parser'
|
5
|
-
require 'parser_helpers'
|
1
|
+
require_relative '../../helpers'
|
6
2
|
|
7
|
-
|
8
|
-
|
3
|
+
# FIXME: Move each of these methods into their respective spec files (e.g method_for_spec.rb)
|
4
|
+
describe org.jrubyparser.ast.Node do
|
5
|
+
VERSIONS.each do |v|
|
9
6
|
it "children can ask for the method it is contained in [#{v}]" do
|
10
7
|
parse("def foo; true if false; end").find_node(:defn) do |defn|
|
11
8
|
defn.find_node(:true).method_for.should == defn
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require_relative '../../helpers'
|
2
|
+
|
3
|
+
describe org.jrubyparser.ast.Node do
|
4
|
+
VERSIONS.each do |v|
|
5
|
+
it "finds a variable's parameter declaration via get_declaration [#{v}]" do
|
6
|
+
carets_parse("def foo(^a); ^a; end", v).tap do |_, caret_nodes|
|
7
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
8
|
+
end
|
9
|
+
carets_parse("def foo(^a); a = 1; ^a; end", v).tap do |_, caret_nodes|
|
10
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
11
|
+
end
|
12
|
+
carets_parse("def foo(*^a); a = 1; ^a; end", v).tap do |_, caret_nodes|
|
13
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
14
|
+
end
|
15
|
+
carets_parse("def foo(&^a); a = 1; ^a; end", v).tap do |_, caret_nodes|
|
16
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
17
|
+
end
|
18
|
+
carets_parse("def foo(^a=1); a = 1; ^a; end", v).tap do |_, caret_nodes|
|
19
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
it "finds a variable's lvar declaration via get_declaration [#{v}]" do
|
23
|
+
carets_parse("def foo; ^a = 1; ^a; end", v).tap do |_, caret_nodes|
|
24
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
25
|
+
end
|
26
|
+
carets_parse("def foo; ^a = 1; a = 2; ^a; end", v).tap do |_, caret_nodes|
|
27
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
it "finds a variable's parameter declaration via get_declaration [#{v}]" do
|
31
|
+
carets_parse("proc {|^a| ^a}", v).tap do |_, caret_nodes|
|
32
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
33
|
+
end
|
34
|
+
carets_parse("proc {|^a| a = 1; ^a}", v).tap do |_, caret_nodes|
|
35
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
36
|
+
end
|
37
|
+
carets_parse("proc {|*^a| a = 1; ^a}", v).tap do |_, caret_nodes|
|
38
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
39
|
+
end
|
40
|
+
carets_parse("proc {|&^a| a = 1; ^a}", v).tap do |_, caret_nodes|
|
41
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
42
|
+
end
|
43
|
+
if v != 1.8
|
44
|
+
carets_parse("proc {|^a=1| a = 1; ^a}", v).tap do |_, caret_nodes|
|
45
|
+
caret_nodes[1].declaration.should == caret_nodes[0]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require_relative '../../helpers'
|
2
|
+
|
3
|
+
describe org.jrubyparser.ast.Node do
|
4
|
+
VERSIONS.each do |v|
|
5
|
+
it "finds method via get_defined_scope [#{v}]" do
|
6
|
+
caret_parse("def foo(^a); end", v).tap do |root, caret_node|
|
7
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
8
|
+
end
|
9
|
+
caret_parse("def foo(); ^a = 1; end", v).tap do |root, caret_node|
|
10
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
11
|
+
end
|
12
|
+
caret_parse("def foo(a); ^a; end", v).tap do |root, caret_node|
|
13
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
14
|
+
end
|
15
|
+
caret_parse("def foo(*^a); end", v).tap do |root, caret_node|
|
16
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
17
|
+
end
|
18
|
+
caret_parse("def foo(&^a); end", v).tap do |root, caret_node|
|
19
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
20
|
+
end
|
21
|
+
caret_parse("def foo(^a=1); end", v).tap do |root, caret_node|
|
22
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
23
|
+
end
|
24
|
+
|
25
|
+
caret_parse("def foo(a); proc { ^a }end", v).tap do |root, caret_node|
|
26
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
27
|
+
end
|
28
|
+
caret_parse("def foo(a);proc{proc{^a}};end", v).tap do |root, caret_node|
|
29
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
30
|
+
end
|
31
|
+
caret_parse("def foo(a);proc{proc{^a=1}};end", v).tap do |root, caret_node|
|
32
|
+
caret_node.defined_scope.should == root.find_node(:defn)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "finds iter via get_defined_scope [#{v}]" do
|
37
|
+
caret_parse("proc { |^a| }", v).tap do |root, caret_node|
|
38
|
+
caret_node.defined_scope.should == root.find_node(:iter)
|
39
|
+
end
|
40
|
+
caret_parse("proc { || ^a=1}", v).tap do |root, caret_node|
|
41
|
+
caret_node.defined_scope.should == root.find_node(:iter)
|
42
|
+
end
|
43
|
+
caret_parse("proc { |a| ^a}", v).tap do |root, caret_node|
|
44
|
+
caret_node.defined_scope.should == root.find_node(:iter)
|
45
|
+
end
|
46
|
+
caret_parse("proc { |*^a| }", v).tap do |root, caret_node|
|
47
|
+
caret_node.defined_scope.should == root.find_node(:iter)
|
48
|
+
end
|
49
|
+
caret_parse("proc { |&^a| }", v).tap do |root, caret_node|
|
50
|
+
caret_node.defined_scope.should == root.find_node(:iter)
|
51
|
+
end
|
52
|
+
if v != 1.8
|
53
|
+
caret_parse("proc { |^a=1| }", v).tap do |root, caret_node|
|
54
|
+
caret_node.defined_scope.should == root.find_node(:iter)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
caret_parse("proc { |a| lambda { ^a }}", v).tap do |root, caret_node|
|
58
|
+
caret_node.defined_scope.parent.name.should == root.find_node(:iter).parent.name
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it "finds root via get_defined_scope [#{v}]" do
|
63
|
+
caret_parse("^a = 1", v).tap do |root, caret_node|
|
64
|
+
caret_node.defined_scope.should == root
|
65
|
+
end
|
66
|
+
caret_parse("a = 1; ^a", v).tap do |root, caret_node|
|
67
|
+
caret_node.defined_scope.should == root
|
68
|
+
end
|
69
|
+
caret_parse("a = 1; proc { ^a }", v).tap do |root, caret_node|
|
70
|
+
caret_node.defined_scope.should == root
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it "finds proper scope per 1.8/1.9 rules for block vars [#{v}]" do
|
75
|
+
if v == 1.8
|
76
|
+
caret_parse("a = 1; proc { |a| ^a }", v).tap do |root, caret_node|
|
77
|
+
caret_node.defined_scope.should == root
|
78
|
+
end
|
79
|
+
else # 1.9+
|
80
|
+
caret_parse("a = 1; proc { |a| ^a }", v).tap do |root, caret_node|
|
81
|
+
caret_node.defined_scope.should == root.find_node(:iter)
|
82
|
+
end
|
83
|
+
caret_parse("a = 1; proc { |;a| ^a }", v).tap do |root, caret_node|
|
84
|
+
caret_node.defined_scope.should == root.find_node(:iter)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -1,11 +1,7 @@
|
|
1
|
-
|
2
|
-
$LOAD_PATH.unshift File.dirname(__FILE__) + "/../helpers"
|
3
|
-
require 'java'
|
4
|
-
require 'jruby-parser'
|
5
|
-
require 'parser_helpers'
|
1
|
+
require_relative '../../helpers'
|
6
2
|
|
7
|
-
describe
|
8
|
-
|
3
|
+
describe org.jrubyparser.ast.Node do
|
4
|
+
VERSIONS.each do |v|
|
9
5
|
it "finds fcall via simple getNodeAt search [#{v}]" do
|
10
6
|
caret_parse("b = fo^o(1)", v).tap do |root, caret_node|
|
11
7
|
root.find_node(:fcall).should == caret_node
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require_relative '../../helpers'
|
2
|
+
|
3
|
+
describe org.jrubyparser.ast.Node do
|
4
|
+
VERSIONS.each do |v|
|
5
|
+
it "finds all def variable occurrences via get_occurrences [#{v}]" do
|
6
|
+
carets_parse("def foo(^a); ^a; end", v).tap do |_, caret_nodes|
|
7
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
8
|
+
end
|
9
|
+
carets_parse("def foo(*^a); ^a; end", v).tap do |_, caret_nodes|
|
10
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
11
|
+
end
|
12
|
+
carets_parse("def foo(^a=1); ^a; end", v).tap do |_, caret_nodes|
|
13
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
14
|
+
end
|
15
|
+
if v != 1.8
|
16
|
+
carets_parse("def foo(a=1, ^b); ^b; end", v).tap do |_, caret_nodes|
|
17
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
18
|
+
end
|
19
|
+
end
|
20
|
+
carets_parse("def foo(&^a); ^a; end", v).tap do |_, caret_nodes|
|
21
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
22
|
+
end
|
23
|
+
carets_parse("def foo(^a, b); p ^a; end", v).tap do |_, caret_nodes|
|
24
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
25
|
+
end
|
26
|
+
carets_parse("def foo(^a); proc { ^a }; end", v).tap do |_, caret_nodes|
|
27
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
28
|
+
end
|
29
|
+
if v == 1.8
|
30
|
+
carets_parse("def foo(^a); proc { |^a| ^a } end", v).tap do |_, caret_nodes|
|
31
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
32
|
+
end
|
33
|
+
else
|
34
|
+
carets_parse("def foo(^a); proc { |a| a } end", v).tap do |_, caret_nodes|
|
35
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
36
|
+
end
|
37
|
+
end
|
38
|
+
carets_parse("def foo(^a); ^a[:b] = 1; ^a[:b]; end", v).tap do |_, nodes|
|
39
|
+
nodes.first.occurrences.to_a.should =~ nodes
|
40
|
+
end
|
41
|
+
carets_parse("def foo(^a); b = ^a ? {} : []; end", v).tap do |_, nodes|
|
42
|
+
nodes.first.occurrences.to_a.should =~ nodes
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "finds all root variable occurrences via get_occurrences [#{v}]" do
|
47
|
+
carets_parse("^a=1; ^a; ^a if b", v).tap do |_, caret_nodes|
|
48
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
49
|
+
end
|
50
|
+
carets_parse("^a=1; def foo; a=1; end", v).tap do |_, caret_nodes|
|
51
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
52
|
+
end
|
53
|
+
carets_parse("a=1; def foo; ^a=1; end", v).tap do |_, caret_nodes|
|
54
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "finds all block variable occurrences via get_occurrences [#{v}]" do
|
59
|
+
if v == 1.8
|
60
|
+
carets_parse("def foo(^a); proc { |^a| ^a } end", v).tap do |_, caret_nodes|
|
61
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
62
|
+
end
|
63
|
+
else
|
64
|
+
carets_parse("def foo(a); proc { |^a| ^a } end", v).tap do |_, caret_nodes|
|
65
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
66
|
+
end
|
67
|
+
end
|
68
|
+
carets_parse("proc { |^a| ^a }", v).tap do |_, caret_nodes|
|
69
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
70
|
+
end
|
71
|
+
if v != 1.8
|
72
|
+
carets_parse("proc { |^a=1| ^a }", v).tap do |_, caret_nodes|
|
73
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
74
|
+
end
|
75
|
+
carets_parse("proc { |a=1, ^b| ^b }", v).tap do |_, caret_nodes|
|
76
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
77
|
+
end
|
78
|
+
end
|
79
|
+
carets_parse("proc { |&^a| ^a }", v).tap do |_, caret_nodes|
|
80
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
81
|
+
end
|
82
|
+
carets_parse("proc { |*^a| ^a }", v).tap do |_, caret_nodes|
|
83
|
+
caret_nodes.first.occurrences.to_a.should =~ caret_nodes
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|