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.
Files changed (118) hide show
  1. checksums.yaml +7 -0
  2. data/codeminer.gemspec +28 -0
  3. data/lib/codeminer.rb +112 -0
  4. data/lib/codeminer/expression_processor.rb +29 -0
  5. data/lib/codeminer/expressions/alias_expression.rb +23 -0
  6. data/lib/codeminer/expressions/ambiguous_operator_expression.rb +27 -0
  7. data/lib/codeminer/expressions/aref_assign_expression.rb +23 -0
  8. data/lib/codeminer/expressions/aref_field_expression.rb +28 -0
  9. data/lib/codeminer/expressions/arguments_expression.rb +29 -0
  10. data/lib/codeminer/expressions/array_expression.rb +22 -0
  11. data/lib/codeminer/expressions/attribute_assign_expression.rb +35 -0
  12. data/lib/codeminer/expressions/backref_variable_expression.rb +22 -0
  13. data/lib/codeminer/expressions/begin_expression.rb +38 -0
  14. data/lib/codeminer/expressions/binary_expression.rb +31 -0
  15. data/lib/codeminer/expressions/block_expression.rb +24 -0
  16. data/lib/codeminer/expressions/block_param_expression.rb +24 -0
  17. data/lib/codeminer/expressions/body_expression.rb +35 -0
  18. data/lib/codeminer/expressions/bodystmt_expression.rb +25 -0
  19. data/lib/codeminer/expressions/break_expression.rb +22 -0
  20. data/lib/codeminer/expressions/call_expression.rb +35 -0
  21. data/lib/codeminer/expressions/case_expression.rb +27 -0
  22. data/lib/codeminer/expressions/class_expression.rb +28 -0
  23. data/lib/codeminer/expressions/class_variable_assign_expression.rb +27 -0
  24. data/lib/codeminer/expressions/class_variable_expression.rb +22 -0
  25. data/lib/codeminer/expressions/colon2_assign_expression.rb +23 -0
  26. data/lib/codeminer/expressions/colon2_expression.rb +27 -0
  27. data/lib/codeminer/expressions/colon3_assign_expression.rb +23 -0
  28. data/lib/codeminer/expressions/colon3_expression.rb +26 -0
  29. data/lib/codeminer/expressions/command_expression.rb +30 -0
  30. data/lib/codeminer/expressions/condition_expression.rb +25 -0
  31. data/lib/codeminer/expressions/constant_assign_expression.rb +27 -0
  32. data/lib/codeminer/expressions/constant_variable_expression.rb +24 -0
  33. data/lib/codeminer/expressions/defined_expression.rb +22 -0
  34. data/lib/codeminer/expressions/defn_expression.rb +24 -0
  35. data/lib/codeminer/expressions/defs_expression.rb +29 -0
  36. data/lib/codeminer/expressions/destructured_param_expression.rb +24 -0
  37. data/lib/codeminer/expressions/dynamic_string_expression.rb +36 -0
  38. data/lib/codeminer/expressions/dynamic_symbol_expression.rb +22 -0
  39. data/lib/codeminer/expressions/else_expression.rb +26 -0
  40. data/lib/codeminer/expressions/empty_expression.rb +19 -0
  41. data/lib/codeminer/expressions/ensure_expression.rb +22 -0
  42. data/lib/codeminer/expressions/expression.rb +24 -0
  43. data/lib/codeminer/expressions/expression_container.rb +41 -0
  44. data/lib/codeminer/expressions/false_expression.rb +22 -0
  45. data/lib/codeminer/expressions/field_expression.rb +27 -0
  46. data/lib/codeminer/expressions/for_expression.rb +24 -0
  47. data/lib/codeminer/expressions/global_variable_assign_expression.rb +27 -0
  48. data/lib/codeminer/expressions/global_variable_expression.rb +22 -0
  49. data/lib/codeminer/expressions/hash_expression.rb +22 -0
  50. data/lib/codeminer/expressions/hash_pair_expression.rb +23 -0
  51. data/lib/codeminer/expressions/instance_variable_assign_expression.rb +27 -0
  52. data/lib/codeminer/expressions/instance_variable_expression.rb +22 -0
  53. data/lib/codeminer/expressions/int_expression.rb +24 -0
  54. data/lib/codeminer/expressions/keyword_param_expression.rb +31 -0
  55. data/lib/codeminer/expressions/lambda_expression.rb +25 -0
  56. data/lib/codeminer/expressions/local_assign_expression.rb +35 -0
  57. data/lib/codeminer/expressions/local_variable_expression.rb +24 -0
  58. data/lib/codeminer/expressions/magic_comment_expression.rb +23 -0
  59. data/lib/codeminer/expressions/module_expression.rb +27 -0
  60. data/lib/codeminer/expressions/multiple_assignment_expression.rb +25 -0
  61. data/lib/codeminer/expressions/next_expression.rb +22 -0
  62. data/lib/codeminer/expressions/nil_expression.rb +22 -0
  63. data/lib/codeminer/expressions/op_assign_expression.rb +26 -0
  64. data/lib/codeminer/expressions/optional_param_expression.rb +31 -0
  65. data/lib/codeminer/expressions/params_expression.rb +67 -0
  66. data/lib/codeminer/expressions/positional_param_expression.rb +32 -0
  67. data/lib/codeminer/expressions/range_expression.rb +28 -0
  68. data/lib/codeminer/expressions/redo_expression.rb +21 -0
  69. data/lib/codeminer/expressions/regexp_expression.rb +26 -0
  70. data/lib/codeminer/expressions/rescue_body_expression.rb +22 -0
  71. data/lib/codeminer/expressions/rescue_expression.rb +25 -0
  72. data/lib/codeminer/expressions/retry_expression.rb +21 -0
  73. data/lib/codeminer/expressions/return_expression.rb +26 -0
  74. data/lib/codeminer/expressions/root_expression.rb +22 -0
  75. data/lib/codeminer/expressions/sclass_expression.rb +23 -0
  76. data/lib/codeminer/expressions/self_expression.rb +22 -0
  77. data/lib/codeminer/expressions/splat_expression.rb +24 -0
  78. data/lib/codeminer/expressions/string_content_expression.rb +29 -0
  79. data/lib/codeminer/expressions/string_embedded_expression.rb +22 -0
  80. data/lib/codeminer/expressions/string_expression.rb +45 -0
  81. data/lib/codeminer/expressions/super_expression.rb +26 -0
  82. data/lib/codeminer/expressions/symbol_expression.rb +32 -0
  83. data/lib/codeminer/expressions/true_expression.rb +22 -0
  84. data/lib/codeminer/expressions/unary_expression.rb +23 -0
  85. data/lib/codeminer/expressions/undef_expression.rb +22 -0
  86. data/lib/codeminer/expressions/unknown_expression.rb +35 -0
  87. data/lib/codeminer/expressions/until_expression.rb +23 -0
  88. data/lib/codeminer/expressions/variable_expression.rb +20 -0
  89. data/lib/codeminer/expressions/void_expression.rb +21 -0
  90. data/lib/codeminer/expressions/when_expression.rb +24 -0
  91. data/lib/codeminer/expressions/while_expression.rb +23 -0
  92. data/lib/codeminer/expressions/xstring_expression.rb +24 -0
  93. data/lib/codeminer/expressions/yield_expression.rb +22 -0
  94. data/lib/codeminer/parser.rb +215 -0
  95. data/lib/codeminer/processors/argument_processor.rb +25 -0
  96. data/lib/codeminer/processors/array_processor.rb +86 -0
  97. data/lib/codeminer/processors/assignment_processor.rb +42 -0
  98. data/lib/codeminer/processors/binary_processor.rb +12 -0
  99. data/lib/codeminer/processors/call_processor.rb +32 -0
  100. data/lib/codeminer/processors/class_processor.rb +19 -0
  101. data/lib/codeminer/processors/command_processor.rb +15 -0
  102. data/lib/codeminer/processors/condition_processor.rb +59 -0
  103. data/lib/codeminer/processors/default_processor.rb +33 -0
  104. data/lib/codeminer/processors/hash_processor.rb +27 -0
  105. data/lib/codeminer/processors/loop_processor.rb +30 -0
  106. data/lib/codeminer/processors/method_processor.rb +58 -0
  107. data/lib/codeminer/processors/params_processor.rb +97 -0
  108. data/lib/codeminer/processors/range_processor.rb +15 -0
  109. data/lib/codeminer/processors/regexp_processor.rb +27 -0
  110. data/lib/codeminer/processors/return_processor.rb +15 -0
  111. data/lib/codeminer/processors/string_processor.rb +79 -0
  112. data/lib/codeminer/processors/symbol_processor.rb +31 -0
  113. data/lib/codeminer/processors/token_processor.rb +41 -0
  114. data/lib/codeminer/processors/variable_processor.rb +70 -0
  115. data/lib/codeminer/source_extract.rb +120 -0
  116. data/lib/codeminer/substitution.rb +48 -0
  117. data/lib/codeminer/token.rb +19 -0
  118. 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,21 @@
1
+ module CodeMiner
2
+
3
+ class RedoExpression < Expression
4
+
5
+ attr_reader :value
6
+
7
+ def initialize(src)
8
+ @src = src
9
+ end
10
+
11
+ def type
12
+ :redo
13
+ end
14
+
15
+ def each
16
+ []
17
+ end
18
+
19
+ end
20
+
21
+ 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,21 @@
1
+ module CodeMiner
2
+
3
+ class RetryExpression < Expression
4
+
5
+ attr_reader :value
6
+
7
+ def initialize(src)
8
+ @src = src
9
+ end
10
+
11
+ def type
12
+ :retry
13
+ end
14
+
15
+ def each
16
+ []
17
+ end
18
+
19
+ end
20
+
21
+ 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,22 @@
1
+ module CodeMiner
2
+
3
+ class RootExpression < Expression
4
+
5
+ attr_reader :src, :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
+ :root
18
+ end
19
+
20
+ end
21
+
22
+ 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,22 @@
1
+ module CodeMiner
2
+
3
+ class SelfExpression < Expression
4
+
5
+ attr_reader :value
6
+
7
+ def initialize(token, src)
8
+ @token = token
9
+ @src = src
10
+ end
11
+
12
+ def type
13
+ :self
14
+ end
15
+
16
+ def each
17
+ []
18
+ end
19
+
20
+ end
21
+
22
+ 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