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,24 @@
1
+ module CodeMiner
2
+
3
+ class BlockExpression < Expression
4
+
5
+ attr_reader :body, :params, :value
6
+
7
+ def initialize(body, params, src)
8
+ @body = body
9
+ @params = params
10
+ @src = src
11
+ end
12
+
13
+ def type
14
+ :block
15
+ end
16
+
17
+ def each
18
+ [@params, *Array(@body.each)]
19
+ end
20
+
21
+ end
22
+
23
+
24
+ end
@@ -0,0 +1,24 @@
1
+ module CodeMiner
2
+
3
+ class BlockParamExpression < Expression
4
+
5
+ def initialize(token, src)
6
+ @token = token
7
+ @src = src
8
+ end
9
+
10
+ def type
11
+ :block_param
12
+ end
13
+
14
+ def value
15
+ @token.value
16
+ end
17
+
18
+ def each
19
+ []
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,35 @@
1
+ module CodeMiner
2
+
3
+ class BodyExpression < Expression
4
+
5
+ def self.from(*expressions)
6
+ adjusted_src = expressions.first.src_extract.adjust(expressions.last.src_extract)
7
+ new(adjusted_src, expressions)
8
+ end
9
+
10
+ attr_reader :value, :body
11
+
12
+ def initialize(src, body=[])
13
+ @src_fallback = src
14
+ @body = body
15
+ end
16
+
17
+ def add(statement)
18
+ unless statement.kind_of?(VoidExpression)
19
+ adjust_src(statement.src_extract)
20
+ @body << statement
21
+ end
22
+ self
23
+ end
24
+
25
+ def each
26
+ @body.each.to_a
27
+ end
28
+
29
+ def type
30
+ :body
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,25 @@
1
+ module CodeMiner
2
+
3
+ class BodystmtExpression < Expression
4
+
5
+ attr_reader :body, :rescue, :ensure, :value, :else
6
+
7
+ def initialize(body, rescue_exp, else_exp, ensure_exp, src:)
8
+ @body = body
9
+ @rescue = rescue_exp
10
+ @ensure = ensure_exp
11
+ @else = else_exp
12
+ @src = src
13
+ end
14
+
15
+ def type
16
+ :bodystmt
17
+ end
18
+
19
+ def each
20
+ [*body.each, *[@rescue, @else, @ensure].compact]
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,22 @@
1
+ module CodeMiner
2
+
3
+ class BreakExpression < 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
+ :break
14
+ end
15
+
16
+ def each
17
+ [@args]
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,35 @@
1
+ module CodeMiner
2
+
3
+ class CallExpression < Expression
4
+
5
+ attr_reader :receiver, :args
6
+
7
+ def initialize(token, src, receiver: nil, arguments: nil)
8
+ @token = token
9
+ @src = src
10
+ @receiver = receiver
11
+ @args = arguments
12
+ end
13
+
14
+ def type
15
+ :call
16
+ end
17
+
18
+ def value
19
+ value = @token.value.lstrip
20
+ if value[0] == '.'
21
+ value[1..-1]
22
+ else
23
+ value
24
+ end
25
+ end
26
+
27
+ def each
28
+ [@receiver, *[@args, @block].compact]
29
+ end
30
+
31
+ alias body args
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,27 @@
1
+ module CodeMiner
2
+
3
+ class CaseExpression < Expression
4
+
5
+ attr_reader :test, :whens, :value
6
+
7
+ def initialize(test, whens, src)
8
+ @test = test
9
+ @whens = whens
10
+ @src = src
11
+ end
12
+
13
+ def type
14
+ :case
15
+ end
16
+
17
+ def else_exp
18
+ @whens.map(&:else).last
19
+ end
20
+
21
+ def each
22
+ [@test, *@whens, *[else_exp].compact]
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,28 @@
1
+ module CodeMiner
2
+
3
+ class ClassExpression < Expression
4
+
5
+ attr_reader :body, :parent
6
+
7
+ def initialize(token, parent, body, src)
8
+ @token = token
9
+ @parent = parent
10
+ @body = body
11
+ @src = src
12
+ end
13
+
14
+ def value
15
+ @token.value
16
+ end
17
+
18
+ def type
19
+ :class
20
+ end
21
+
22
+ def each
23
+ [parent, body]
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,27 @@
1
+ module CodeMiner
2
+
3
+ class ClassVariableAssignExpression < 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
+ :class_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
@@ -0,0 +1,22 @@
1
+ module CodeMiner
2
+
3
+ class ClassVariableExpression < 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
+ :class_variable
14
+ end
15
+
16
+ def each
17
+ []
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,23 @@
1
+ module CodeMiner
2
+
3
+ class Colon2AssignExpression < 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
+ :colon2_assign
15
+ end
16
+
17
+ def each
18
+ [receiver, body]
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,27 @@
1
+ module CodeMiner
2
+
3
+ class Colon2Expression < 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
+ :colon2
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,23 @@
1
+ module CodeMiner
2
+
3
+ class Colon3AssignExpression < 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
+ :colon3_assign
15
+ end
16
+
17
+ def each
18
+ [receiver, body]
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,26 @@
1
+ module CodeMiner
2
+
3
+ class Colon3Expression < Expression
4
+
5
+ attr_reader :body
6
+
7
+ def initialize(token, src)
8
+ @token = token
9
+ @src = src
10
+ end
11
+
12
+ def type
13
+ :colon3
14
+ end
15
+
16
+ def value
17
+ token.value
18
+ end
19
+
20
+ def each
21
+ []
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,30 @@
1
+ module CodeMiner
2
+
3
+ class CommandExpression < Expression
4
+
5
+ attr_reader :args, :receiver
6
+
7
+ def initialize(token, args, src, receiver=nil)
8
+ @token = token
9
+ @args = args
10
+ @src = src
11
+ @receiver = receiver
12
+ end
13
+
14
+ def value
15
+ @token.value
16
+ end
17
+
18
+ def type
19
+ :command
20
+ end
21
+
22
+ def each
23
+ [@receiver, @args].compact
24
+ end
25
+
26
+ alias body args
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,25 @@
1
+ module CodeMiner
2
+
3
+ class ConditionExpression < Expression
4
+
5
+ attr_reader :test, :consequence, :else_statement, :value
6
+
7
+ def initialize(test, consequence, else_statement, token, src)
8
+ @test = test
9
+ @consequence = consequence
10
+ @else_statement = else_statement
11
+ @token = token
12
+ @src = src
13
+ end
14
+
15
+ def type
16
+ :condition
17
+ end
18
+
19
+ def each
20
+ [@test, @consequence, @else_statement]
21
+ end
22
+
23
+ end
24
+
25
+ end