codeminer 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,67 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class ParamsExpression < Expression
|
4
|
+
|
5
|
+
def self.empty
|
6
|
+
new([], [], [], nil, nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :positional, :optional, :keyword, :splat, :value
|
10
|
+
|
11
|
+
def initialize(positional, optional, keyword, splat, block)
|
12
|
+
@positional = positional
|
13
|
+
@optional = optional
|
14
|
+
@keyword = keyword
|
15
|
+
@splat = splat
|
16
|
+
@block = block
|
17
|
+
end
|
18
|
+
|
19
|
+
def type
|
20
|
+
:params
|
21
|
+
end
|
22
|
+
|
23
|
+
def each
|
24
|
+
[positional, optional, keyword, *splat, *block]
|
25
|
+
end
|
26
|
+
|
27
|
+
def each_param
|
28
|
+
each.flat_map(&:each)
|
29
|
+
end
|
30
|
+
|
31
|
+
def line
|
32
|
+
expression_values.map(&:line).first
|
33
|
+
end
|
34
|
+
|
35
|
+
def column
|
36
|
+
expression_values.map(&:column).first
|
37
|
+
end
|
38
|
+
|
39
|
+
def end_line
|
40
|
+
expression_values.map(&:end_line).last
|
41
|
+
end
|
42
|
+
|
43
|
+
def end_column
|
44
|
+
expression_values.map(&:end_column).last
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def expression_values
|
50
|
+
[*positional.each,
|
51
|
+
*optional.each.map(&:token), *optional.each.map(&:value),
|
52
|
+
*keyword.each.map(&:token), *keyword.each.map(&:value),
|
53
|
+
*splat_token,
|
54
|
+
*block_token].select{|e| e}
|
55
|
+
end
|
56
|
+
|
57
|
+
def splat_token
|
58
|
+
splat && splat.token
|
59
|
+
end
|
60
|
+
|
61
|
+
def block_token
|
62
|
+
block && block.token
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class PositionalParamExpression < Expression
|
4
|
+
|
5
|
+
def self.convert(exp, src)
|
6
|
+
if exp.kind_of?(Token)
|
7
|
+
new(exp, src)
|
8
|
+
else
|
9
|
+
exp
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(token, src)
|
14
|
+
@token = token
|
15
|
+
@src = src
|
16
|
+
end
|
17
|
+
|
18
|
+
def type
|
19
|
+
:positional_param
|
20
|
+
end
|
21
|
+
|
22
|
+
def value
|
23
|
+
@token.value
|
24
|
+
end
|
25
|
+
|
26
|
+
def each
|
27
|
+
[]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class RangeExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :left, :right, :value
|
6
|
+
|
7
|
+
def initialize(left, right, inclusive, src)
|
8
|
+
@left = left
|
9
|
+
@right = right
|
10
|
+
@inclusive = inclusive
|
11
|
+
@src = src
|
12
|
+
end
|
13
|
+
|
14
|
+
def inclusive?
|
15
|
+
@inclusive
|
16
|
+
end
|
17
|
+
|
18
|
+
def type
|
19
|
+
:range
|
20
|
+
end
|
21
|
+
|
22
|
+
def each
|
23
|
+
[@left, @right]
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class RegexpExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@content = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def type
|
12
|
+
:regexp
|
13
|
+
end
|
14
|
+
|
15
|
+
def each
|
16
|
+
@content
|
17
|
+
end
|
18
|
+
|
19
|
+
def add(regex)
|
20
|
+
@content << regex
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class RescueBodyExpression < BodyExpression
|
4
|
+
|
5
|
+
attr_reader :body, :value
|
6
|
+
|
7
|
+
def self.wrap(body)
|
8
|
+
new(body.body, body.src_extract)
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(body, src)
|
12
|
+
@body = body
|
13
|
+
@src = src
|
14
|
+
end
|
15
|
+
|
16
|
+
def type
|
17
|
+
:rescue_body
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class RescueExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :body, :value, :constants, :variable
|
6
|
+
|
7
|
+
def initialize(constants, variable, body, d, src)
|
8
|
+
@constants = constants
|
9
|
+
@variable = variable
|
10
|
+
@body = body
|
11
|
+
@d = d
|
12
|
+
@src = src
|
13
|
+
end
|
14
|
+
|
15
|
+
def type
|
16
|
+
:rescue
|
17
|
+
end
|
18
|
+
|
19
|
+
def each
|
20
|
+
[constants, variable, *body.each]
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class ReturnExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
def initialize(args, src)
|
8
|
+
@args = args
|
9
|
+
@src = src
|
10
|
+
end
|
11
|
+
|
12
|
+
def type
|
13
|
+
:return
|
14
|
+
end
|
15
|
+
|
16
|
+
def each
|
17
|
+
Array(@args)
|
18
|
+
end
|
19
|
+
|
20
|
+
def body
|
21
|
+
@args
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class SClassExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :body, :context, :value
|
6
|
+
|
7
|
+
def initialize(context, body, src)
|
8
|
+
@context = context
|
9
|
+
@body = body
|
10
|
+
@src = src
|
11
|
+
end
|
12
|
+
|
13
|
+
def type
|
14
|
+
:sclass
|
15
|
+
end
|
16
|
+
|
17
|
+
def each
|
18
|
+
[context, body]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class SplatExpression < Expression
|
4
|
+
|
5
|
+
def initialize(token, src)
|
6
|
+
@token = token
|
7
|
+
@src = src
|
8
|
+
end
|
9
|
+
|
10
|
+
def type
|
11
|
+
:splat
|
12
|
+
end
|
13
|
+
|
14
|
+
def value
|
15
|
+
@token.value if @token
|
16
|
+
end
|
17
|
+
|
18
|
+
def each
|
19
|
+
[@token]
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class StringContentExpression < Expression
|
4
|
+
|
5
|
+
def add(string, src)
|
6
|
+
if string.kind_of? StringEmbeddedExpression
|
7
|
+
DynamicStringExpression.new(string, src)
|
8
|
+
elsif string.kind_of? Token
|
9
|
+
StringExpression.new(string, src)
|
10
|
+
else
|
11
|
+
string
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def type
|
16
|
+
:string
|
17
|
+
end
|
18
|
+
|
19
|
+
def value
|
20
|
+
''
|
21
|
+
end
|
22
|
+
|
23
|
+
def each
|
24
|
+
[]
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
class StringEmbeddedExpression < Expression
|
4
|
+
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
def initialize(body, src)
|
8
|
+
@body = body
|
9
|
+
@src = src
|
10
|
+
end
|
11
|
+
|
12
|
+
def each
|
13
|
+
@body.each
|
14
|
+
end
|
15
|
+
|
16
|
+
def type
|
17
|
+
:string_embexp
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
require File.expand_path('./../dynamic_string_expression', __FILE__)
|
4
|
+
|
5
|
+
class StringExpression < Expression
|
6
|
+
|
7
|
+
def self.convert(exp)
|
8
|
+
if exp.kind_of?(Token)
|
9
|
+
new(exp, exp.src_extract)
|
10
|
+
else
|
11
|
+
exp
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :token
|
16
|
+
|
17
|
+
def initialize(token, src)
|
18
|
+
@token = token
|
19
|
+
@src = src
|
20
|
+
end
|
21
|
+
|
22
|
+
def type
|
23
|
+
:string
|
24
|
+
end
|
25
|
+
|
26
|
+
def value
|
27
|
+
@token.value
|
28
|
+
end
|
29
|
+
|
30
|
+
def add(string, src)
|
31
|
+
DynamicStringExpression.new(*[self, *string], src)
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_quotes(src)
|
35
|
+
@src = src
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def each
|
40
|
+
[]
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|