codeminer 0.1.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/codeminer.gemspec +28 -0
- data/lib/codeminer.rb +112 -0
- data/lib/codeminer/expression_processor.rb +29 -0
- data/lib/codeminer/expressions/alias_expression.rb +23 -0
- data/lib/codeminer/expressions/ambiguous_operator_expression.rb +27 -0
- data/lib/codeminer/expressions/aref_assign_expression.rb +23 -0
- data/lib/codeminer/expressions/aref_field_expression.rb +28 -0
- data/lib/codeminer/expressions/arguments_expression.rb +29 -0
- data/lib/codeminer/expressions/array_expression.rb +22 -0
- data/lib/codeminer/expressions/attribute_assign_expression.rb +35 -0
- data/lib/codeminer/expressions/backref_variable_expression.rb +22 -0
- data/lib/codeminer/expressions/begin_expression.rb +38 -0
- data/lib/codeminer/expressions/binary_expression.rb +31 -0
- data/lib/codeminer/expressions/block_expression.rb +24 -0
- data/lib/codeminer/expressions/block_param_expression.rb +24 -0
- data/lib/codeminer/expressions/body_expression.rb +35 -0
- data/lib/codeminer/expressions/bodystmt_expression.rb +25 -0
- data/lib/codeminer/expressions/break_expression.rb +22 -0
- data/lib/codeminer/expressions/call_expression.rb +35 -0
- data/lib/codeminer/expressions/case_expression.rb +27 -0
- data/lib/codeminer/expressions/class_expression.rb +28 -0
- data/lib/codeminer/expressions/class_variable_assign_expression.rb +27 -0
- data/lib/codeminer/expressions/class_variable_expression.rb +22 -0
- data/lib/codeminer/expressions/colon2_assign_expression.rb +23 -0
- data/lib/codeminer/expressions/colon2_expression.rb +27 -0
- data/lib/codeminer/expressions/colon3_assign_expression.rb +23 -0
- data/lib/codeminer/expressions/colon3_expression.rb +26 -0
- data/lib/codeminer/expressions/command_expression.rb +30 -0
- data/lib/codeminer/expressions/condition_expression.rb +25 -0
- data/lib/codeminer/expressions/constant_assign_expression.rb +27 -0
- data/lib/codeminer/expressions/constant_variable_expression.rb +24 -0
- data/lib/codeminer/expressions/defined_expression.rb +22 -0
- data/lib/codeminer/expressions/defn_expression.rb +24 -0
- data/lib/codeminer/expressions/defs_expression.rb +29 -0
- data/lib/codeminer/expressions/destructured_param_expression.rb +24 -0
- data/lib/codeminer/expressions/dynamic_string_expression.rb +36 -0
- data/lib/codeminer/expressions/dynamic_symbol_expression.rb +22 -0
- data/lib/codeminer/expressions/else_expression.rb +26 -0
- data/lib/codeminer/expressions/empty_expression.rb +19 -0
- data/lib/codeminer/expressions/ensure_expression.rb +22 -0
- data/lib/codeminer/expressions/expression.rb +24 -0
- data/lib/codeminer/expressions/expression_container.rb +41 -0
- data/lib/codeminer/expressions/false_expression.rb +22 -0
- data/lib/codeminer/expressions/field_expression.rb +27 -0
- data/lib/codeminer/expressions/for_expression.rb +24 -0
- data/lib/codeminer/expressions/global_variable_assign_expression.rb +27 -0
- data/lib/codeminer/expressions/global_variable_expression.rb +22 -0
- data/lib/codeminer/expressions/hash_expression.rb +22 -0
- data/lib/codeminer/expressions/hash_pair_expression.rb +23 -0
- data/lib/codeminer/expressions/instance_variable_assign_expression.rb +27 -0
- data/lib/codeminer/expressions/instance_variable_expression.rb +22 -0
- data/lib/codeminer/expressions/int_expression.rb +24 -0
- data/lib/codeminer/expressions/keyword_param_expression.rb +31 -0
- data/lib/codeminer/expressions/lambda_expression.rb +25 -0
- data/lib/codeminer/expressions/local_assign_expression.rb +35 -0
- data/lib/codeminer/expressions/local_variable_expression.rb +24 -0
- data/lib/codeminer/expressions/magic_comment_expression.rb +23 -0
- data/lib/codeminer/expressions/module_expression.rb +27 -0
- data/lib/codeminer/expressions/multiple_assignment_expression.rb +25 -0
- data/lib/codeminer/expressions/next_expression.rb +22 -0
- data/lib/codeminer/expressions/nil_expression.rb +22 -0
- data/lib/codeminer/expressions/op_assign_expression.rb +26 -0
- data/lib/codeminer/expressions/optional_param_expression.rb +31 -0
- data/lib/codeminer/expressions/params_expression.rb +67 -0
- data/lib/codeminer/expressions/positional_param_expression.rb +32 -0
- data/lib/codeminer/expressions/range_expression.rb +28 -0
- data/lib/codeminer/expressions/redo_expression.rb +21 -0
- data/lib/codeminer/expressions/regexp_expression.rb +26 -0
- data/lib/codeminer/expressions/rescue_body_expression.rb +22 -0
- data/lib/codeminer/expressions/rescue_expression.rb +25 -0
- data/lib/codeminer/expressions/retry_expression.rb +21 -0
- data/lib/codeminer/expressions/return_expression.rb +26 -0
- data/lib/codeminer/expressions/root_expression.rb +22 -0
- data/lib/codeminer/expressions/sclass_expression.rb +23 -0
- data/lib/codeminer/expressions/self_expression.rb +22 -0
- data/lib/codeminer/expressions/splat_expression.rb +24 -0
- data/lib/codeminer/expressions/string_content_expression.rb +29 -0
- data/lib/codeminer/expressions/string_embedded_expression.rb +22 -0
- data/lib/codeminer/expressions/string_expression.rb +45 -0
- data/lib/codeminer/expressions/super_expression.rb +26 -0
- data/lib/codeminer/expressions/symbol_expression.rb +32 -0
- data/lib/codeminer/expressions/true_expression.rb +22 -0
- data/lib/codeminer/expressions/unary_expression.rb +23 -0
- data/lib/codeminer/expressions/undef_expression.rb +22 -0
- data/lib/codeminer/expressions/unknown_expression.rb +35 -0
- data/lib/codeminer/expressions/until_expression.rb +23 -0
- data/lib/codeminer/expressions/variable_expression.rb +20 -0
- data/lib/codeminer/expressions/void_expression.rb +21 -0
- data/lib/codeminer/expressions/when_expression.rb +24 -0
- data/lib/codeminer/expressions/while_expression.rb +23 -0
- data/lib/codeminer/expressions/xstring_expression.rb +24 -0
- data/lib/codeminer/expressions/yield_expression.rb +22 -0
- data/lib/codeminer/parser.rb +215 -0
- data/lib/codeminer/processors/argument_processor.rb +25 -0
- data/lib/codeminer/processors/array_processor.rb +86 -0
- data/lib/codeminer/processors/assignment_processor.rb +42 -0
- data/lib/codeminer/processors/binary_processor.rb +12 -0
- data/lib/codeminer/processors/call_processor.rb +32 -0
- data/lib/codeminer/processors/class_processor.rb +19 -0
- data/lib/codeminer/processors/command_processor.rb +15 -0
- data/lib/codeminer/processors/condition_processor.rb +59 -0
- data/lib/codeminer/processors/default_processor.rb +33 -0
- data/lib/codeminer/processors/hash_processor.rb +27 -0
- data/lib/codeminer/processors/loop_processor.rb +30 -0
- data/lib/codeminer/processors/method_processor.rb +58 -0
- data/lib/codeminer/processors/params_processor.rb +97 -0
- data/lib/codeminer/processors/range_processor.rb +15 -0
- data/lib/codeminer/processors/regexp_processor.rb +27 -0
- data/lib/codeminer/processors/return_processor.rb +15 -0
- data/lib/codeminer/processors/string_processor.rb +79 -0
- data/lib/codeminer/processors/symbol_processor.rb +31 -0
- data/lib/codeminer/processors/token_processor.rb +41 -0
- data/lib/codeminer/processors/variable_processor.rb +70 -0
- data/lib/codeminer/source_extract.rb +120 -0
- data/lib/codeminer/substitution.rb +48 -0
- data/lib/codeminer/token.rb +19 -0
- metadata +172 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 87e6c5fc088b7426bbd290c30432131c9eef2a01
|
4
|
+
data.tar.gz: b1bbc69b9634a247d1d59585621fec02a92e7e17
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: eb5540dab6c63c8d8bfd1c2116f50318325559453b90fb2143041b12c623eb6bc86307b81eb9c0996ea26537a81a78f87f4f686d0e2729b4acd321c8cad0dd3a
|
7
|
+
data.tar.gz: 3f90069d2fb224d74b31c581b14bca0a27785de8d3b64553a8f5dc2d27e157f1847c8ef2a1d5421de80c8f9dd120fb4f14015485680e2d01d2500a5ea2184425
|
data/codeminer.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'codeminer'
|
3
|
+
s.version = '0.1.0'
|
4
|
+
s.date = '2014-06-30'
|
5
|
+
|
6
|
+
s.summary = 'Mines Ruby code'
|
7
|
+
s.description = 'Streamlined parsing and processing of Ruby code using Ripper'
|
8
|
+
|
9
|
+
s.authors = ['Jacob Richardson']
|
10
|
+
s.email = 'jacob.ninja.dev@gmail.com'
|
11
|
+
|
12
|
+
s.require_paths = %w[lib]
|
13
|
+
|
14
|
+
s.add_development_dependency('test-unit', '2.5.5')
|
15
|
+
|
16
|
+
s.files = %w[
|
17
|
+
codeminer.gemspec
|
18
|
+
lib/codeminer.rb
|
19
|
+
lib/codeminer/parser.rb
|
20
|
+
lib/codeminer/expression_processor.rb
|
21
|
+
lib/codeminer/source_extract.rb
|
22
|
+
lib/codeminer/substitution.rb
|
23
|
+
lib/codeminer/token.rb
|
24
|
+
]
|
25
|
+
s.files += Dir.glob('lib/codeminer/expressions/*.rb')
|
26
|
+
s.files += Dir.glob('lib/codeminer/processors/*.rb')
|
27
|
+
|
28
|
+
end
|
data/lib/codeminer.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
require File.expand_path('../codeminer/source_extract', __FILE__)
|
2
|
+
|
3
|
+
require File.expand_path('../codeminer/expressions/expression', __FILE__)
|
4
|
+
require File.expand_path('../codeminer/expressions/alias_expression', __FILE__)
|
5
|
+
require File.expand_path('../codeminer/expressions/ambiguous_operator_expression', __FILE__)
|
6
|
+
require File.expand_path('../codeminer/expressions/aref_assign_expression', __FILE__)
|
7
|
+
require File.expand_path('../codeminer/expressions/aref_field_expression', __FILE__)
|
8
|
+
require File.expand_path('../codeminer/expressions/array_expression', __FILE__)
|
9
|
+
require File.expand_path('../codeminer/expressions/arguments_expression', __FILE__)
|
10
|
+
require File.expand_path('../codeminer/expressions/attribute_assign_expression', __FILE__)
|
11
|
+
require File.expand_path('../codeminer/expressions/backref_variable_expression', __FILE__)
|
12
|
+
require File.expand_path('../codeminer/expressions/begin_expression', __FILE__)
|
13
|
+
require File.expand_path('../codeminer/expressions/binary_expression', __FILE__)
|
14
|
+
require File.expand_path('../codeminer/expressions/block_expression', __FILE__)
|
15
|
+
require File.expand_path('../codeminer/expressions/block_param_expression', __FILE__)
|
16
|
+
require File.expand_path('../codeminer/expressions/body_expression', __FILE__)
|
17
|
+
require File.expand_path('../codeminer/expressions/bodystmt_expression', __FILE__)
|
18
|
+
require File.expand_path('../codeminer/expressions/break_expression', __FILE__)
|
19
|
+
require File.expand_path('../codeminer/expressions/call_expression', __FILE__)
|
20
|
+
require File.expand_path('../codeminer/expressions/case_expression', __FILE__)
|
21
|
+
require File.expand_path('../codeminer/expressions/class_expression', __FILE__)
|
22
|
+
require File.expand_path('../codeminer/expressions/class_variable_assign_expression', __FILE__)
|
23
|
+
require File.expand_path('../codeminer/expressions/class_variable_expression', __FILE__)
|
24
|
+
require File.expand_path('../codeminer/expressions/colon2_assign_expression', __FILE__)
|
25
|
+
require File.expand_path('../codeminer/expressions/colon2_expression', __FILE__)
|
26
|
+
require File.expand_path('../codeminer/expressions/colon3_assign_expression', __FILE__)
|
27
|
+
require File.expand_path('../codeminer/expressions/colon3_expression', __FILE__)
|
28
|
+
require File.expand_path('../codeminer/expressions/command_expression', __FILE__)
|
29
|
+
require File.expand_path('../codeminer/expressions/condition_expression', __FILE__)
|
30
|
+
require File.expand_path('../codeminer/expressions/constant_assign_expression', __FILE__)
|
31
|
+
require File.expand_path('../codeminer/expressions/constant_variable_expression', __FILE__)
|
32
|
+
require File.expand_path('../codeminer/expressions/defined_expression', __FILE__)
|
33
|
+
require File.expand_path('../codeminer/expressions/defn_expression', __FILE__)
|
34
|
+
require File.expand_path('../codeminer/expressions/defs_expression', __FILE__)
|
35
|
+
require File.expand_path('../codeminer/expressions/destructured_param_expression', __FILE__)
|
36
|
+
require File.expand_path('../codeminer/expressions/dynamic_symbol_expression', __FILE__)
|
37
|
+
require File.expand_path('../codeminer/expressions/else_expression', __FILE__)
|
38
|
+
require File.expand_path('../codeminer/expressions/empty_expression', __FILE__)
|
39
|
+
require File.expand_path('../codeminer/expressions/ensure_expression', __FILE__)
|
40
|
+
require File.expand_path('../codeminer/expressions/false_expression', __FILE__)
|
41
|
+
require File.expand_path('../codeminer/expressions/field_expression', __FILE__)
|
42
|
+
require File.expand_path('../codeminer/expressions/for_expression', __FILE__)
|
43
|
+
require File.expand_path('../codeminer/expressions/global_variable_assign_expression', __FILE__)
|
44
|
+
require File.expand_path('../codeminer/expressions/global_variable_expression', __FILE__)
|
45
|
+
require File.expand_path('../codeminer/expressions/hash_expression', __FILE__)
|
46
|
+
require File.expand_path('../codeminer/expressions/hash_pair_expression', __FILE__)
|
47
|
+
require File.expand_path('../codeminer/expressions/instance_variable_assign_expression', __FILE__)
|
48
|
+
require File.expand_path('../codeminer/expressions/instance_variable_expression', __FILE__)
|
49
|
+
require File.expand_path('../codeminer/expressions/int_expression', __FILE__)
|
50
|
+
require File.expand_path('../codeminer/expressions/keyword_param_expression', __FILE__)
|
51
|
+
require File.expand_path('../codeminer/expressions/lambda_expression', __FILE__)
|
52
|
+
require File.expand_path('../codeminer/expressions/local_assign_expression', __FILE__)
|
53
|
+
require File.expand_path('../codeminer/expressions/local_variable_expression', __FILE__)
|
54
|
+
require File.expand_path('../codeminer/expressions/magic_comment_expression', __FILE__)
|
55
|
+
require File.expand_path('../codeminer/expressions/module_expression', __FILE__)
|
56
|
+
require File.expand_path('../codeminer/expressions/multiple_assignment_expression', __FILE__)
|
57
|
+
require File.expand_path('../codeminer/expressions/next_expression', __FILE__)
|
58
|
+
require File.expand_path('../codeminer/expressions/nil_expression', __FILE__)
|
59
|
+
require File.expand_path('../codeminer/expressions/op_assign_expression', __FILE__)
|
60
|
+
require File.expand_path('../codeminer/expressions/optional_param_expression', __FILE__)
|
61
|
+
require File.expand_path('../codeminer/expressions/params_expression', __FILE__)
|
62
|
+
require File.expand_path('../codeminer/expressions/expression_container', __FILE__)
|
63
|
+
require File.expand_path('../codeminer/expressions/positional_param_expression', __FILE__)
|
64
|
+
require File.expand_path('../codeminer/expressions/range_expression', __FILE__)
|
65
|
+
require File.expand_path('../codeminer/expressions/redo_expression', __FILE__)
|
66
|
+
require File.expand_path('../codeminer/expressions/regexp_expression', __FILE__)
|
67
|
+
require File.expand_path('../codeminer/expressions/rescue_body_expression', __FILE__)
|
68
|
+
require File.expand_path('../codeminer/expressions/rescue_expression', __FILE__)
|
69
|
+
require File.expand_path('../codeminer/expressions/retry_expression', __FILE__)
|
70
|
+
require File.expand_path('../codeminer/expressions/return_expression', __FILE__)
|
71
|
+
require File.expand_path('../codeminer/expressions/root_expression', __FILE__)
|
72
|
+
require File.expand_path('../codeminer/expressions/sclass_expression', __FILE__)
|
73
|
+
require File.expand_path('../codeminer/expressions/self_expression', __FILE__)
|
74
|
+
require File.expand_path('../codeminer/expressions/splat_expression', __FILE__)
|
75
|
+
require File.expand_path('../codeminer/expressions/string_expression', __FILE__)
|
76
|
+
require File.expand_path('../codeminer/expressions/string_content_expression', __FILE__)
|
77
|
+
require File.expand_path('../codeminer/expressions/string_embedded_expression', __FILE__)
|
78
|
+
require File.expand_path('../codeminer/expressions/super_expression', __FILE__)
|
79
|
+
require File.expand_path('../codeminer/expressions/symbol_expression', __FILE__)
|
80
|
+
require File.expand_path('../codeminer/expressions/true_expression', __FILE__)
|
81
|
+
require File.expand_path('../codeminer/expressions/unknown_expression', __FILE__)
|
82
|
+
require File.expand_path('../codeminer/expressions/unary_expression', __FILE__)
|
83
|
+
require File.expand_path('../codeminer/expressions/undef_expression', __FILE__)
|
84
|
+
require File.expand_path('../codeminer/expressions/until_expression', __FILE__)
|
85
|
+
require File.expand_path('../codeminer/expressions/variable_expression', __FILE__)
|
86
|
+
require File.expand_path('../codeminer/expressions/void_expression', __FILE__)
|
87
|
+
require File.expand_path('../codeminer/expressions/when_expression', __FILE__)
|
88
|
+
require File.expand_path('../codeminer/expressions/while_expression', __FILE__)
|
89
|
+
require File.expand_path('../codeminer/expressions/xstring_expression', __FILE__)
|
90
|
+
require File.expand_path('../codeminer/expressions/yield_expression', __FILE__)
|
91
|
+
|
92
|
+
require File.expand_path('../codeminer/token', __FILE__)
|
93
|
+
require File.expand_path('../codeminer/parser', __FILE__)
|
94
|
+
require File.expand_path('../codeminer/substitution', __FILE__)
|
95
|
+
|
96
|
+
module CodeMiner
|
97
|
+
|
98
|
+
ParseError = Class.new(RuntimeError)
|
99
|
+
|
100
|
+
def self.parse(code)
|
101
|
+
Parser.parse(code)
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.process(code, processors)
|
105
|
+
Parser.process(code, processors)
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.sexp(code, formatters={})
|
109
|
+
Parser.sexp(code, formatters)
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module ExpressionProcessor
|
4
|
+
|
5
|
+
Ripper::PARSER_EVENT_TABLE.each do |event, arity|
|
6
|
+
next if event == :parse_error
|
7
|
+
next if /_new\z/ =~ event.to_s and arity == 0
|
8
|
+
next if /_add\z/ =~ event.to_s
|
9
|
+
next if /_from_[a-z]+\z/ =~ event.to_s
|
10
|
+
|
11
|
+
define_method :"on_#{event}" do |*args|
|
12
|
+
super(*args).tap do |node|
|
13
|
+
invoke_processor(node, event)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def invoke_processor(node, event)
|
21
|
+
@processors.each do |p|
|
22
|
+
meth = :"process_#{event}"
|
23
|
+
p.public_send(meth, node) if p.respond_to?(meth)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class AliasExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :left, :right, :value
|
6
|
+
|
7
|
+
def initialize(left, right, src)
|
8
|
+
@left = left
|
9
|
+
@right = right
|
10
|
+
@src = src
|
11
|
+
end
|
12
|
+
|
13
|
+
def type
|
14
|
+
:alias
|
15
|
+
end
|
16
|
+
|
17
|
+
def each
|
18
|
+
[@left, @right]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class AmbiguousOperatorExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :msg
|
6
|
+
|
7
|
+
def initialize(token, msg, src)
|
8
|
+
@token = token
|
9
|
+
@msg = msg
|
10
|
+
@src = src
|
11
|
+
end
|
12
|
+
|
13
|
+
def type
|
14
|
+
:ambiguous_operator
|
15
|
+
end
|
16
|
+
|
17
|
+
def value
|
18
|
+
@token.value
|
19
|
+
end
|
20
|
+
|
21
|
+
def each
|
22
|
+
[msg]
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class ArefAssignExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :body, :receiver, :value
|
6
|
+
|
7
|
+
def initialize(receiver, body, src)
|
8
|
+
@receiver = receiver
|
9
|
+
@body = body
|
10
|
+
@src = src
|
11
|
+
end
|
12
|
+
|
13
|
+
def type
|
14
|
+
:aref_assign
|
15
|
+
end
|
16
|
+
|
17
|
+
def each
|
18
|
+
[receiver, body]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class ArefFieldExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :receiver, :args
|
6
|
+
|
7
|
+
def initialize(token, receiver, args, src)
|
8
|
+
@token = token
|
9
|
+
@receiver = receiver
|
10
|
+
@args = args
|
11
|
+
@src = src
|
12
|
+
end
|
13
|
+
|
14
|
+
def value
|
15
|
+
@token.value
|
16
|
+
end
|
17
|
+
|
18
|
+
def type
|
19
|
+
:aref_field
|
20
|
+
end
|
21
|
+
|
22
|
+
def each
|
23
|
+
[receiver, args]
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class ArgumentsExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :value, :token
|
6
|
+
|
7
|
+
def initialize(src=nil, token=nil)
|
8
|
+
@arguments = []
|
9
|
+
@src = src
|
10
|
+
@token = token
|
11
|
+
end
|
12
|
+
|
13
|
+
def add(exp)
|
14
|
+
@arguments << exp
|
15
|
+
adjust_src(exp.src_extract)
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
def type
|
20
|
+
:arguments
|
21
|
+
end
|
22
|
+
|
23
|
+
def each
|
24
|
+
@arguments
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class AttributeAssignExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :body
|
6
|
+
|
7
|
+
def initialize(field, body, src)
|
8
|
+
@field = field
|
9
|
+
@body = body
|
10
|
+
@src = src
|
11
|
+
end
|
12
|
+
|
13
|
+
def type
|
14
|
+
:attribute_assign
|
15
|
+
end
|
16
|
+
|
17
|
+
def token
|
18
|
+
@field.token
|
19
|
+
end
|
20
|
+
|
21
|
+
def value
|
22
|
+
token.value
|
23
|
+
end
|
24
|
+
|
25
|
+
def each
|
26
|
+
[receiver, @body]
|
27
|
+
end
|
28
|
+
|
29
|
+
def receiver
|
30
|
+
@field.receiver
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class BackrefVariableExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
def initialize(value, src)
|
8
|
+
@value = value
|
9
|
+
@src = src
|
10
|
+
end
|
11
|
+
|
12
|
+
def type
|
13
|
+
:backref_variable
|
14
|
+
end
|
15
|
+
|
16
|
+
def each
|
17
|
+
[]
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class BeginExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :bodystmt, :value
|
6
|
+
|
7
|
+
def initialize(bodystmt, src)
|
8
|
+
@bodystmt = bodystmt
|
9
|
+
@src = src
|
10
|
+
end
|
11
|
+
|
12
|
+
def type
|
13
|
+
:begin
|
14
|
+
end
|
15
|
+
|
16
|
+
def body
|
17
|
+
@bodystmt.body
|
18
|
+
end
|
19
|
+
|
20
|
+
def ensure
|
21
|
+
@bodystmt.ensure
|
22
|
+
end
|
23
|
+
|
24
|
+
def rescue
|
25
|
+
@bodystmt.rescue
|
26
|
+
end
|
27
|
+
|
28
|
+
def else
|
29
|
+
@bodystmt.else
|
30
|
+
end
|
31
|
+
|
32
|
+
def each
|
33
|
+
body.each
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class BinaryExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :left, :right
|
6
|
+
|
7
|
+
def initialize(token, left, right, src)
|
8
|
+
@token = token
|
9
|
+
@left = left
|
10
|
+
@right = right
|
11
|
+
@src = src
|
12
|
+
end
|
13
|
+
|
14
|
+
def each
|
15
|
+
[left, right]
|
16
|
+
end
|
17
|
+
|
18
|
+
def type
|
19
|
+
:binary
|
20
|
+
end
|
21
|
+
|
22
|
+
def value
|
23
|
+
@token.value
|
24
|
+
end
|
25
|
+
|
26
|
+
alias receiver left
|
27
|
+
alias body right
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|