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,27 @@
1
+ module CodeMiner
2
+
3
+ class ConstantAssignExpression < Expression
4
+
5
+ attr_reader :body
6
+
7
+ def initialize(token, body, src)
8
+ @token = token
9
+ @body = body
10
+ @src = src
11
+ end
12
+
13
+ def type
14
+ :constant_assign
15
+ end
16
+
17
+ def value
18
+ @token.value
19
+ end
20
+
21
+ def each
22
+ [@body]
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,24 @@
1
+ module CodeMiner
2
+
3
+ class ConstantVariableExpression < Expression
4
+
5
+ def initialize(token, src)
6
+ @token = token
7
+ @src = src
8
+ end
9
+
10
+ def value
11
+ @token.value
12
+ end
13
+
14
+ def type
15
+ :constant
16
+ end
17
+
18
+ def each
19
+ []
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,22 @@
1
+ module CodeMiner
2
+
3
+ class DefinedExpression < Expression
4
+
5
+ attr_reader :body, :value
6
+
7
+ def initialize(body, src)
8
+ @body = body
9
+ @src = src
10
+ end
11
+
12
+ def type
13
+ :defined
14
+ end
15
+
16
+ def each
17
+ [@body]
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,24 @@
1
+ module CodeMiner
2
+
3
+ class DefnExpression < Expression
4
+
5
+ attr_reader :value, :params, :body
6
+
7
+ def initialize(name, params, body, src)
8
+ @value = name
9
+ @params = params
10
+ @body = body
11
+ @src = src
12
+ end
13
+
14
+ def type
15
+ :defn
16
+ end
17
+
18
+ def each
19
+ [@params, @body]
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,29 @@
1
+ module CodeMiner
2
+
3
+ class DefsExpression < Expression
4
+
5
+ attr_reader :body, :receiver, :params
6
+
7
+ def initialize(receiver, token, params, body, src)
8
+ @receiver = receiver
9
+ @token = token
10
+ @params = params
11
+ @body = body
12
+ @src = src
13
+ end
14
+
15
+ def value
16
+ @token.value
17
+ end
18
+
19
+ def type
20
+ :defs
21
+ end
22
+
23
+ def each
24
+ [receiver, params, *body.each]
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,24 @@
1
+ module CodeMiner
2
+
3
+ class DestructuredParamExpression < Expression
4
+
5
+ def initialize(token, src)
6
+ @token = token
7
+ @src = src
8
+ end
9
+
10
+ def value
11
+ @token.value
12
+ end
13
+
14
+ def type
15
+ :destructured_param
16
+ end
17
+
18
+ def each
19
+ []
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,36 @@
1
+ module CodeMiner
2
+
3
+ class DynamicStringExpression < Expression
4
+
5
+ def self.wrap(exp)
6
+ if exp.type == :dynamic_string
7
+ exp
8
+ else
9
+ new(exp, exp.src_extract)
10
+ end
11
+ end
12
+
13
+ attr_reader :value
14
+
15
+ def initialize(*body, src)
16
+ @src = src
17
+ @body = body
18
+ end
19
+
20
+ def type
21
+ :dynamic_string
22
+ end
23
+
24
+ def each
25
+ @body
26
+ end
27
+
28
+ def add(string, src=string.src_extract)
29
+ @body << string
30
+ adjust_src(src)
31
+ self
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,22 @@
1
+ module CodeMiner
2
+
3
+ class DynamicSymbolExpression < Expression
4
+
5
+ attr_reader :value
6
+
7
+ def initialize(*body, src)
8
+ @body = body
9
+ @src = src
10
+ end
11
+
12
+ def type
13
+ :dynamic_symbol
14
+ end
15
+
16
+ def each
17
+ @body
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,26 @@
1
+ module CodeMiner
2
+
3
+ class ElseExpression < Expression
4
+
5
+ attr_reader :value, :consequence
6
+
7
+ def initialize(consequence, src)
8
+ @consequence = consequence
9
+ @src = src
10
+ end
11
+
12
+ def type
13
+ :else
14
+ end
15
+
16
+ def body
17
+ consequence
18
+ end
19
+
20
+ def each
21
+ consequence.each
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,19 @@
1
+ module CodeMiner
2
+
3
+ class EmptyExpression
4
+
5
+ def self.type
6
+ :empty
7
+ end
8
+
9
+ def self.value
10
+ nil
11
+ end
12
+
13
+ def self.each
14
+ []
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,22 @@
1
+ module CodeMiner
2
+
3
+ class EnsureExpression < Expression
4
+
5
+ attr_reader :body, :value
6
+
7
+ def initialize(body, src)
8
+ @body = body
9
+ @src = src
10
+ end
11
+
12
+ def type
13
+ :ensure
14
+ end
15
+
16
+ def each
17
+ [*body.each]
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,24 @@
1
+ module CodeMiner
2
+
3
+ class Expression
4
+
5
+ include SourceExtract::Usage
6
+
7
+ attr_writer :src
8
+
9
+ def self.not_implemented(*attrs)
10
+ attrs.each do |attr|
11
+ define_method attr do |*|
12
+ raise NotImplementedError, "Need to define #{attr} on #{self.class}"
13
+ end
14
+ end
15
+ end
16
+
17
+ attr_accessor :block, :args, :delimiter
18
+ attr_reader :token
19
+
20
+ not_implemented :<<, :each, :type, :value
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,41 @@
1
+ module CodeMiner
2
+
3
+ class ExpressionContainer < Expression
4
+
5
+ attr_reader :type, :value
6
+
7
+ def self.wrap(exp, type)
8
+ if exp.kind_of?(ExpressionContainer)
9
+ new(exp.each, type, exp.src_extract)
10
+ else
11
+ wrapped = exp.class == Array ? exp : [exp]
12
+ new(wrapped, type, exp.src_extract)
13
+ end
14
+ end
15
+
16
+ def initialize(body, type, src=nil)
17
+ @body = body
18
+ @type = type
19
+ @src = src
20
+ end
21
+
22
+ def each
23
+ @body
24
+ end
25
+
26
+ def add(exp)
27
+ if exp.kind_of?(ExpressionContainer)
28
+ exp.each.each do |e|
29
+ @body << e
30
+ adjust_src(e.src_extract)
31
+ end
32
+ else
33
+ @body << exp
34
+ adjust_src(exp.src_extract)
35
+ end
36
+ self
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,22 @@
1
+ module CodeMiner
2
+
3
+ class FalseExpression < 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
+ :false
14
+ end
15
+
16
+ def each
17
+ []
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,27 @@
1
+ module CodeMiner
2
+
3
+ class FieldExpression < Expression
4
+
5
+ attr_reader :body, :receiver
6
+
7
+ def initialize(receiver, token, src)
8
+ @receiver = receiver
9
+ @token = token
10
+ @src = src
11
+ end
12
+
13
+ def type
14
+ :field
15
+ end
16
+
17
+ def value
18
+ @token.value
19
+ end
20
+
21
+ def each
22
+ [@receiver]
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,24 @@
1
+ module CodeMiner
2
+
3
+ class ForExpression < Expression
4
+
5
+ attr_reader :params, :receiver, :body, :value
6
+
7
+ def initialize(params, receiver, body, src)
8
+ @params = params
9
+ @receiver = receiver
10
+ @body = body
11
+ @src = src
12
+ end
13
+
14
+ def each
15
+ [@params, @receiver, @body]
16
+ end
17
+
18
+ def type
19
+ :for
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,27 @@
1
+ module CodeMiner
2
+
3
+ class GlobalVariableAssignExpression < Expression
4
+
5
+ attr_reader :body
6
+
7
+ def initialize(token, body, src)
8
+ @token = token
9
+ @body = body
10
+ @src = src
11
+ end
12
+
13
+ def type
14
+ :global_variable_assign
15
+ end
16
+
17
+ def value
18
+ @token.value
19
+ end
20
+
21
+ def each
22
+ [@body]
23
+ end
24
+
25
+ end
26
+
27
+ end