jruby-parser 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|