ikra 0.0.1

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 (220) hide show
  1. checksums.yaml +7 -0
  2. data/lib/ast/builder.rb +100 -0
  3. data/lib/ast/lexical_variables_enumerator.rb +34 -0
  4. data/lib/ast/method_definition.rb +37 -0
  5. data/lib/ast/nodes.rb +208 -0
  6. data/lib/ast/printer.rb +99 -0
  7. data/lib/ast/translator.rb +264 -0
  8. data/lib/ast/visitor.rb +173 -0
  9. data/lib/config/configuration.rb +18 -0
  10. data/lib/config/os_configuration.rb +56 -0
  11. data/lib/entity.rb +11 -0
  12. data/lib/ikra.rb +7 -0
  13. data/lib/parsing.rb +32 -0
  14. data/lib/resources/cuda/block_function_head.cpp +1 -0
  15. data/lib/resources/cuda/env_builder_copy_array.cpp +4 -0
  16. data/lib/resources/cuda/header.cpp +46 -0
  17. data/lib/resources/cuda/kernel.cpp +8 -0
  18. data/lib/resources/cuda/kernel_launcher.cpp +28 -0
  19. data/lib/resources/cuda/soa_header.cpp +4 -0
  20. data/lib/scope.rb +166 -0
  21. data/lib/sourcify/Gemfile +10 -0
  22. data/lib/sourcify/HISTORY.txt +88 -0
  23. data/lib/sourcify/LICENSE +20 -0
  24. data/lib/sourcify/README.rdoc +352 -0
  25. data/lib/sourcify/Rakefile +111 -0
  26. data/lib/sourcify/lib/sourcify.rb +44 -0
  27. data/lib/sourcify/lib/sourcify/common/parser/converter.rb +29 -0
  28. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/comment.rb +23 -0
  29. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/counter.rb +43 -0
  30. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/dstring.rb +58 -0
  31. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/extensions.rb +140 -0
  32. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/heredoc.rb +26 -0
  33. data/lib/sourcify/lib/sourcify/common/parser/source_code.rb +45 -0
  34. data/lib/sourcify/lib/sourcify/common/ragel/common.rl +5 -0
  35. data/lib/sourcify/lib/sourcify/common/ragel/expressions.rl +38 -0
  36. data/lib/sourcify/lib/sourcify/common/ragel/machines.rl +317 -0
  37. data/lib/sourcify/lib/sourcify/errors.rb +4 -0
  38. data/lib/sourcify/lib/sourcify/method.rb +138 -0
  39. data/lib/sourcify/lib/sourcify/method/methods.rb +3 -0
  40. data/lib/sourcify/lib/sourcify/method/methods/to_raw_source.rb +30 -0
  41. data/lib/sourcify/lib/sourcify/method/methods/to_sexp.rb +30 -0
  42. data/lib/sourcify/lib/sourcify/method/methods/to_source.rb +30 -0
  43. data/lib/sourcify/lib/sourcify/method/parser.rb +110 -0
  44. data/lib/sourcify/lib/sourcify/method/parser/converter.rb +8 -0
  45. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rb +2494 -0
  46. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rl +144 -0
  47. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner_extensions.rb +68 -0
  48. data/lib/sourcify/lib/sourcify/method/parser/scanner.rb +52 -0
  49. data/lib/sourcify/lib/sourcify/method/parser/source_code.rb +8 -0
  50. data/lib/sourcify/lib/sourcify/patches.rb +63 -0
  51. data/lib/sourcify/lib/sourcify/proc.rb +183 -0
  52. data/lib/sourcify/lib/sourcify/proc/methods.rb +3 -0
  53. data/lib/sourcify/lib/sourcify/proc/methods/source_location.rb +61 -0
  54. data/lib/sourcify/lib/sourcify/proc/methods/to_raw_source.rb +20 -0
  55. data/lib/sourcify/lib/sourcify/proc/methods/to_sexp.rb +40 -0
  56. data/lib/sourcify/lib/sourcify/proc/methods/to_source.rb +48 -0
  57. data/lib/sourcify/lib/sourcify/proc/parser.rb +51 -0
  58. data/lib/sourcify/lib/sourcify/proc/parser/converter.rb +8 -0
  59. data/lib/sourcify/lib/sourcify/proc/parser/normalizer.rb +43 -0
  60. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rb +2498 -0
  61. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rl +149 -0
  62. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner_extensions.rb +74 -0
  63. data/lib/sourcify/lib/sourcify/proc/parser/scanner.rb +49 -0
  64. data/lib/sourcify/lib/sourcify/proc/parser/source_code.rb +8 -0
  65. data/lib/sourcify/lib/sourcify/version.rb +3 -0
  66. data/lib/sourcify/sourcify.gemspec +31 -0
  67. data/lib/sourcify/spec/dump_object_space_procs.rb +84 -0
  68. data/lib/sourcify/spec/method/encoding_from_def_end_block_spec.rb +33 -0
  69. data/lib/sourcify/spec/method/encoding_from_define_method_spec.rb +37 -0
  70. data/lib/sourcify/spec/method/others_from_def_end_block_spec.rb +49 -0
  71. data/lib/sourcify/spec/method/others_from_define_method_spec.rb +63 -0
  72. data/lib/sourcify/spec/method/raw_scanner/block_comment_spec.rb +8 -0
  73. data/lib/sourcify/spec/method/raw_scanner/double_colons_spec.rb +8 -0
  74. data/lib/sourcify/spec/method/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
  75. data/lib/sourcify/spec/method/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
  76. data/lib/sourcify/spec/method/raw_scanner/heredoc_w_indent_spec.rb +8 -0
  77. data/lib/sourcify/spec/method/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
  78. data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
  79. data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
  80. data/lib/sourcify/spec/method/raw_scanner/per_line_comment_spec.rb +8 -0
  81. data/lib/sourcify/spec/method/raw_scanner/single_quote_str_spec.rb +8 -0
  82. data/lib/sourcify/spec/method/raw_scanner/slash_operator_spec.rb +8 -0
  83. data/lib/sourcify/spec/method/raw_scanner/spec_helper.rb +80 -0
  84. data/lib/sourcify/spec/method/spec_helper.rb +1 -0
  85. data/lib/sourcify/spec/method/to_raw_source_spec.rb +31 -0
  86. data/lib/sourcify/spec/method/to_raw_source_w_specified_strip_enclosure_spec.rb +148 -0
  87. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_w_variables_spec.rb +46 -0
  88. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_irb_spec.rb +38 -0
  89. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_pry_spec.rb +38 -0
  90. data/lib/sourcify/spec/method/to_sexp_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +56 -0
  91. data/lib/sourcify/spec/method/to_sexp_from_define_method_w_variables_spec.rb +52 -0
  92. data/lib/sourcify/spec/method/to_sexp_from_define_method_within_irb_spec.rb +42 -0
  93. data/lib/sourcify/spec/method/to_sexp_from_define_method_within_pry_spec.rb +42 -0
  94. data/lib/sourcify/spec/method/to_sexp_w_specified_strip_enclosure_spec.rb +74 -0
  95. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_19_extras_spec.rb +23 -0
  96. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_begin_spec.rb +35 -0
  97. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_case_spec.rb +35 -0
  98. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_class_spec.rb +51 -0
  99. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_do_end_block_spec.rb +33 -0
  100. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_for_spec.rb +126 -0
  101. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_if_spec.rb +83 -0
  102. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_literal_keyword_spec.rb +141 -0
  103. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_method_spec.rb +33 -0
  104. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_module_spec.rb +59 -0
  105. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_unless_spec.rb +83 -0
  106. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_until_spec.rb +179 -0
  107. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_while_spec.rb +179 -0
  108. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_singleton_method_spec.rb +19 -0
  109. data/lib/sourcify/spec/method/to_source_from_def_end_block_within_irb_spec.rb +30 -0
  110. data/lib/sourcify/spec/method/to_source_from_def_end_block_within_pry_spec.rb +45 -0
  111. data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_many_matches_spec.rb +30 -0
  112. data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_single_match_spec.rb +36 -0
  113. data/lib/sourcify/spec/method/to_source_from_define_method_w_braced_block_spec.rb +113 -0
  114. data/lib/sourcify/spec/method/to_source_from_define_method_w_do_end_block_spec.rb +145 -0
  115. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_many_matches_spec.rb +56 -0
  116. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_single_match_spec.rb +73 -0
  117. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_many_matches_spec.rb +36 -0
  118. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_no_match_spec.rb +36 -0
  119. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_single_match_spec.rb +28 -0
  120. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +103 -0
  121. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_many_matches_spec.rb +36 -0
  122. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_no_match_spec.rb +36 -0
  123. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_single_match_spec.rb +28 -0
  124. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb +36 -0
  125. data/lib/sourcify/spec/method/to_source_from_define_method_within_irb_spec.rb +32 -0
  126. data/lib/sourcify/spec/method/to_source_from_define_method_within_pry_spec.rb +49 -0
  127. data/lib/sourcify/spec/method/to_source_magic_file_var_spec.rb +176 -0
  128. data/lib/sourcify/spec/method/to_source_magic_line_var_spec.rb +298 -0
  129. data/lib/sourcify/spec/method/to_source_w_specified_strip_enclosure_spec.rb +39 -0
  130. data/lib/sourcify/spec/no_method/unsupported_platform_spec.rb +26 -0
  131. data/lib/sourcify/spec/proc/19x_extras.rb +27 -0
  132. data/lib/sourcify/spec/proc/created_on_the_fly_proc_spec.rb +80 -0
  133. data/lib/sourcify/spec/proc/encoding_spec.rb +36 -0
  134. data/lib/sourcify/spec/proc/others_spec.rb +40 -0
  135. data/lib/sourcify/spec/proc/raw_scanner/block_comment_spec.rb +8 -0
  136. data/lib/sourcify/spec/proc/raw_scanner/double_colons_spec.rb +8 -0
  137. data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
  138. data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
  139. data/lib/sourcify/spec/proc/raw_scanner/heredoc_w_indent_spec.rb +8 -0
  140. data/lib/sourcify/spec/proc/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
  141. data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
  142. data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
  143. data/lib/sourcify/spec/proc/raw_scanner/per_line_comment_spec.rb +8 -0
  144. data/lib/sourcify/spec/proc/raw_scanner/single_quote_str_spec.rb +8 -0
  145. data/lib/sourcify/spec/proc/raw_scanner/slash_operator_spec.rb +8 -0
  146. data/lib/sourcify/spec/proc/raw_scanner/spec_helper.rb +63 -0
  147. data/lib/sourcify/spec/proc/readme +5 -0
  148. data/lib/sourcify/spec/proc/spec_helper.rb +1 -0
  149. data/lib/sourcify/spec/proc/to_raw_source_spec.rb +33 -0
  150. data/lib/sourcify/spec/proc/to_raw_source_w_specified_strip_enclosure_spec.rb +69 -0
  151. data/lib/sourcify/spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb +46 -0
  152. data/lib/sourcify/spec/proc/to_sexp_variables_spec.rb +146 -0
  153. data/lib/sourcify/spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb +60 -0
  154. data/lib/sourcify/spec/proc/to_sexp_within_irb_spec.rb +146 -0
  155. data/lib/sourcify/spec/proc/to_sexp_within_pry_spec.rb +149 -0
  156. data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb +33 -0
  157. data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb +82 -0
  158. data/lib/sourcify/spec/proc/to_source_from_braced_block_wo_nesting_complication_spec.rb +46 -0
  159. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_begin_spec.rb +35 -0
  160. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb +35 -0
  161. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb +89 -0
  162. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb +33 -0
  163. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_for_spec.rb +132 -0
  164. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_if_spec.rb +87 -0
  165. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb +103 -0
  166. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb +33 -0
  167. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb +49 -0
  168. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_unless_spec.rb +87 -0
  169. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_until_spec.rb +189 -0
  170. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_while_spec.rb +189 -0
  171. data/lib/sourcify/spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb +46 -0
  172. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb +43 -0
  173. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb +20 -0
  174. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb +45 -0
  175. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb +45 -0
  176. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb +22 -0
  177. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb +84 -0
  178. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb +45 -0
  179. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb +45 -0
  180. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb +22 -0
  181. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb +43 -0
  182. data/lib/sourcify/spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb +31 -0
  183. data/lib/sourcify/spec/proc/to_source_magic_file_var_spec.rb +127 -0
  184. data/lib/sourcify/spec/proc/to_source_magic_line_var_spec.rb +127 -0
  185. data/lib/sourcify/spec/proc/to_source_variables_spec.rb +29 -0
  186. data/lib/sourcify/spec/proc/to_source_w_specified_strip_enclosure_spec.rb +33 -0
  187. data/lib/sourcify/spec/proc/to_source_within_irb_spec.rb +38 -0
  188. data/lib/sourcify/spec/proc/to_source_within_pry_spec.rb +61 -0
  189. data/lib/sourcify/spec/raw_scanner/block_comment_shared_spec.rb +57 -0
  190. data/lib/sourcify/spec/raw_scanner/double_colons_shared_spec.rb +11 -0
  191. data/lib/sourcify/spec/raw_scanner/double_quote_str_w_interpolation_shared_spec.rb +60 -0
  192. data/lib/sourcify/spec/raw_scanner/double_quote_str_wo_interpolation_shared_spec.rb +86 -0
  193. data/lib/sourcify/spec/raw_scanner/heredoc_w_indent_shared_spec.rb +69 -0
  194. data/lib/sourcify/spec/raw_scanner/heredoc_wo_indent_shared_spec.rb +70 -0
  195. data/lib/sourcify/spec/raw_scanner/kw_block_start_alias1_shared_spec.rb +73 -0
  196. data/lib/sourcify/spec/raw_scanner/kw_block_start_alias2_shared_spec.rb +73 -0
  197. data/lib/sourcify/spec/raw_scanner/per_line_comment_shared_spec.rb +32 -0
  198. data/lib/sourcify/spec/raw_scanner/shared_specs.rb +3 -0
  199. data/lib/sourcify/spec/raw_scanner/single_quote_str_shared_spec.rb +79 -0
  200. data/lib/sourcify/spec/raw_scanner/slash_operator_shared_spec.rb +71 -0
  201. data/lib/sourcify/spec/run_build.sh +25 -0
  202. data/lib/sourcify/spec/spec_helper.rb +130 -0
  203. data/lib/symbolic/symbolic.rb +248 -0
  204. data/lib/symbolic/visitor.rb +51 -0
  205. data/lib/translator/block_translator.rb +123 -0
  206. data/lib/translator/command_translator.rb +421 -0
  207. data/lib/translator/last_returns_visitor.rb +57 -0
  208. data/lib/translator/local_variables_enumerator.rb +35 -0
  209. data/lib/translator/method_translator.rb +24 -0
  210. data/lib/translator/translator.rb +49 -0
  211. data/lib/type_aware_array.rb +71 -0
  212. data/lib/types/array_type.rb +51 -0
  213. data/lib/types/class_type.rb +128 -0
  214. data/lib/types/object_tracer.rb +162 -0
  215. data/lib/types/primitive_type.rb +73 -0
  216. data/lib/types/ruby_extension.rb +67 -0
  217. data/lib/types/ruby_type.rb +45 -0
  218. data/lib/types/type_inference.rb +382 -0
  219. data/lib/types/union_type.rb +155 -0
  220. metadata +321 -0
@@ -0,0 +1,19 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_source (from def ... end block)' do
4
+ describe 'w singleton method' do
5
+
6
+ should 'strip object' do
7
+ thing = Object.new
8
+ def m
9
+ @x1 = 1
10
+ end
11
+ method(:m).should.be having_source(%(
12
+ def m
13
+ @x1 = 1
14
+ end
15
+ ))
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_source (from def..end block)' do
4
+ describe 'within IRB' do
5
+
6
+ class << self
7
+
8
+ def irb_eval(string)
9
+ irb_exec(string)[-1]
10
+ end
11
+
12
+ def equal_to(expected)
13
+ lambda {|found| normalize_code(found) == normalize_code(expected) }
14
+ end
15
+
16
+ end
17
+
18
+ should 'handle' do
19
+ irb_eval(%(
20
+ def m1; x; end
21
+ method(:m1).to_source
22
+ )).should.be equal_to(%(
23
+ def m1
24
+ x
25
+ end
26
+ ))
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,45 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_source (from def..end block)' do
4
+ describe 'within PRY' do
5
+
6
+ class << self
7
+
8
+ def pry_eval(string)
9
+ pry_exec(string)[-1]
10
+ end
11
+
12
+ def equal_to(expected)
13
+ lambda {|found| normalize_code(found) == normalize_code(expected) }
14
+ end
15
+
16
+ end
17
+
18
+ should 'handle' do
19
+ pry_eval(%(
20
+ def m1; x; end
21
+ method(:m1).to_source
22
+ )).should.be equal_to(%(
23
+ def m1
24
+ x
25
+ end
26
+ ))
27
+ end
28
+
29
+ should 'handle upward scroll' do
30
+ pry_eval(%Q(
31
+ def m1; x1; end
32
+ def m2; x2; end
33
+ method(:m1)
34
+ method(:m1).to_source
35
+ method(:m2).to_source
36
+ 
37
+ )).should.be equal_to(%(
38
+ def m1
39
+ x1
40
+ end
41
+ ))
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,30 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_source (from def...end block)' do
4
+ describe 'w multi blocks and many matches' do
5
+
6
+ if has_parsetree?
7
+ # TODO: Should we support this ??
8
+ else
9
+
10
+ error = Sourcify::MultipleMatchingMethodsPerLineError
11
+
12
+ should "raise #{error} w no nesting on same line" do
13
+ def m1; @x1; end; def m1; @x2; end
14
+ lambda { method(:m1).to_source }.should.raise(error)
15
+ end
16
+
17
+ should "raise #{error} w single level nesting on same line" do
18
+ def m2; class << self; def m2; @x1; end; end; end
19
+ lambda { method(:m2).to_source }.should.raise(error)
20
+ end
21
+
22
+ should "raise #{error} w multi level nesting on same line" do
23
+ def m3; class << self; def m3; class << self; def m3; @x1; end; end; end; end; end
24
+ lambda { method(:m3).to_source }.should.raise(error)
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,36 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_source (from def...end)' do
4
+ describe 'w single blocks and many matches' do
5
+
6
+ should 'skip non-matching w no nesting on same line' do
7
+ def m1(a); @x1; end; def m1(b); @x2; end
8
+ method(:m1).should.be having_source(%(
9
+ def m1(b)
10
+ @x2
11
+ end
12
+ ))
13
+ end
14
+
15
+ should 'skip non-matching w single level nesting on same line' do
16
+ def m2(a); class << self; def m2(b); @x1; end; end; end
17
+ m2(1) # calling m2 has the side effect of redefining m2
18
+ method(:m2).should.be having_source(%(
19
+ def m2(b)
20
+ @x1
21
+ end
22
+ ))
23
+ end
24
+
25
+ should 'skip non-matching w multi level nesting on same line' do
26
+ def m3(a); class << self; def m3(b); class << self; def m3(c); @x1; end; end; end; end; end
27
+ m3(1); m3(2) # calling m3 twice has the side effect of redefining m3 twice
28
+ method(:m3).should.be having_source(%(
29
+ def m3(c)
30
+ @x1
31
+ end
32
+ ))
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,113 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (from define_method)" do
4
+ describe "w braced block" do
5
+
6
+ before { @thing = Object.new }
7
+
8
+ describe 'w block declared elsewhere' do
9
+
10
+ should 'wo arg' do
11
+ blk = lambda { x = 1 }
12
+ @thing.class.send(:define_method, :m1, &blk)
13
+ @thing.method(:m1).should.be having_source(%(
14
+ def m1
15
+ x = 1
16
+ end
17
+ ))
18
+ end
19
+
20
+ should 'w one required arg' do
21
+ blk = lambda {|a| x = 1 }
22
+ @thing.class.send(:define_method, :m2, &blk)
23
+ @thing.method(:m2).should.be having_source(%(
24
+ def m2(a)
25
+ x = 1
26
+ end
27
+ ))
28
+ end
29
+
30
+ should 'w one optional arg' do
31
+ blk = lambda {|a=1| x = 1 }
32
+ @thing.class.send(:define_method, :m3, &blk)
33
+ @thing.method(:m3).should.be having_source(%(
34
+ def m3(a = 1)
35
+ x = 1
36
+ end
37
+ ))
38
+ end
39
+
40
+ should 'w multiple required args' do
41
+ blk = lambda {|a, b, c| x = 1 }
42
+ @thing.class.send(:define_method, :m5, &blk)
43
+ @thing.method(:m5).should.be having_source(%(
44
+ def m5(a, b, c)
45
+ x = 1
46
+ end
47
+ ))
48
+ end
49
+
50
+ should 'w multiple args w one optional' do
51
+ blk = lambda {|a, b, c=1| x = 1 }
52
+ @thing.class.send(:define_method, :m6, &blk)
53
+ @thing.method(:m6).should.be having_source(%(
54
+ def m6(a, b, c = 1)
55
+ x = 1
56
+ end
57
+ ))
58
+ end
59
+
60
+ end
61
+
62
+
63
+ describe 'w block attached' do
64
+
65
+ should 'wo arg' do
66
+ @thing.class.send(:define_method, :m1) { x = 1 }
67
+ @thing.method(:m1).should.be having_source(%(
68
+ def m1
69
+ x = 1
70
+ end
71
+ ))
72
+ end
73
+
74
+ should 'w one required arg' do
75
+ @thing.class.send(:define_method, :m2) {|a| x = 1 }
76
+ @thing.method(:m2).should.be having_source(%(
77
+ def m2(a)
78
+ x = 1
79
+ end
80
+ ))
81
+ end
82
+
83
+ should 'w one optional arg' do
84
+ @thing.class.send(:define_method, :m3) {|a=1| x = 1 }
85
+ @thing.method(:m3).should.be having_source(%(
86
+ def m3(a = 1)
87
+ x = 1
88
+ end
89
+ ))
90
+ end
91
+
92
+ should 'w multiple required args' do
93
+ @thing.class.send(:define_method, :m5) {|a, b, c| x = 1 }
94
+ @thing.method(:m5).should.be having_source(%(
95
+ def m5(a, b, c)
96
+ x = 1
97
+ end
98
+ ))
99
+ end
100
+
101
+ should 'w multiple args w one optional' do
102
+ @thing.class.send(:define_method, :m6) {|a, b, c=1| x = 1 }
103
+ @thing.method(:m6).should.be having_source(%(
104
+ def m6(a, b, c = 1)
105
+ x = 1
106
+ end
107
+ ))
108
+ end
109
+
110
+ end
111
+
112
+ end
113
+ end
@@ -0,0 +1,145 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (from define_method)" do
4
+ describe "w do..end block" do
5
+
6
+ before { @thing = Object.new }
7
+
8
+ describe 'w block declared elsewhere' do
9
+
10
+ should 'wo arg' do
11
+ blk = lambda do
12
+ x = 1
13
+ end
14
+ @thing.class.send(:define_method, :m1, &blk)
15
+ @thing.method(:m1).should.be having_source(%(
16
+ def m1
17
+ x = 1
18
+ end
19
+ ))
20
+ end
21
+
22
+ should 'w one required arg' do
23
+ blk = lambda do |a|
24
+ x = 1
25
+ end
26
+ @thing.class.send(:define_method, :m2, &blk)
27
+ @thing.method(:m2).should.be having_source(%(
28
+ def m2(a)
29
+ x = 1
30
+ end
31
+ ))
32
+ end
33
+
34
+ should 'w one optional arg' do
35
+ blk = lambda do |a=1|
36
+ x = 1
37
+ end
38
+ @thing.class.send(:define_method, :m3, &blk)
39
+ @thing.method(:m3).should.be having_source(%(
40
+ def m3(a = 1)
41
+ x = 1
42
+ end
43
+ ))
44
+ end
45
+
46
+ should 'w multiple required args' do
47
+ blk = lambda do |a, b, c|
48
+ x = 1
49
+ end
50
+ @thing.class.send(:define_method, :m5, &blk)
51
+ @thing.method(:m5).should.be having_source(%(
52
+ def m5(a, b, c)
53
+ x = 1
54
+ end
55
+ ))
56
+ end
57
+
58
+ should 'w multiple args w one optional' do
59
+ blk = lambda do |a, b, c=1|
60
+ x = 1
61
+ end
62
+ @thing.class.send(:define_method, :m6, &blk)
63
+ @thing.method(:m6).should.be having_source(%(
64
+ def m6(a, b, c = 1)
65
+ x = 1
66
+ end
67
+ ))
68
+ end
69
+
70
+ # should 'w multiple args w one required group' do
71
+ # blk = lambda do |a, b, (c,d)|
72
+ # x = 1
73
+ # end
74
+ # @thing.class.send(:define_method, :m7, &blk)
75
+ # @thing.method(:m7).should.be having_source(%(
76
+ # def m7(a, b, (c,d))
77
+ # x = 1
78
+ # end
79
+ # ))
80
+ # end
81
+
82
+ end
83
+
84
+
85
+ describe 'w block attached' do
86
+
87
+ should 'wo arg' do
88
+ @thing.class.send(:define_method, :m1) do
89
+ x = 1
90
+ end
91
+ @thing.method(:m1).should.be having_source(%(
92
+ def m1
93
+ x = 1
94
+ end
95
+ ))
96
+ end
97
+
98
+ should 'w one required arg' do
99
+ @thing.class.send(:define_method, :m2) do |a|
100
+ x = 1
101
+ end
102
+ @thing.method(:m2).should.be having_source(%(
103
+ def m2(a)
104
+ x = 1
105
+ end
106
+ ))
107
+ end
108
+
109
+ should 'w one optional arg' do
110
+ @thing.class.send(:define_method, :m3) do |a=1|
111
+ x = 1
112
+ end
113
+ @thing.method(:m3).should.be having_source(%(
114
+ def m3(a = 1)
115
+ x = 1
116
+ end
117
+ ))
118
+ end
119
+
120
+ should 'w multiple required args' do
121
+ @thing.class.send(:define_method, :m5) do |a, b, c|
122
+ x = 1
123
+ end
124
+ @thing.method(:m5).should.be having_source(%(
125
+ def m5(a, b, c)
126
+ x = 1
127
+ end
128
+ ))
129
+ end
130
+
131
+ should 'w multiple args w one optional' do
132
+ @thing.class.send(:define_method, :m6) do |a, b, c=1|
133
+ x = 1
134
+ end
135
+ @thing.method(:m6).should.be having_source(%(
136
+ def m6(a, b, c = 1)
137
+ x = 1
138
+ end
139
+ ))
140
+ end
141
+
142
+ end
143
+
144
+ end
145
+ end
@@ -0,0 +1,56 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_source (from #define_method)' do
4
+ describe 'w multi blocks and many matches' do
5
+
6
+ if has_parsetree?
7
+ # TODO: Should we support this ??
8
+ else
9
+
10
+ before { @thing = Object.new }
11
+ error = Sourcify::MultipleMatchingProcsPerLineError
12
+
13
+ describe 'w do...end block' do
14
+ should "raise #{error} w no nesting on same line" do
15
+ b1 = lambda do |a| @x end; b2 = lambda do @x end; b3 = lambda do @x end
16
+ @thing.class.send(:define_method, :m1, &b2)
17
+ lambda { @thing.method(:m1).to_source }.should.raise(error)
18
+ end
19
+
20
+ should "raise #{error} w single level nesting on same line" do
21
+ b1 = lambda do |a| @x end; b2 = lambda do lambda do @x end end
22
+ @thing.class.send(:define_method, :m2, &b2)
23
+ lambda { @thing.method(:m2).to_source }.should.raise(error)
24
+ end
25
+
26
+ should "raise #{error} w multi level nesting on same line" do
27
+ b2 = (lambda do |a| lambda do lambda do @x end end end).call(1)
28
+ @thing.class.send(:define_method, :m3, &b2)
29
+ lambda { @thing.method(:m3).to_source }.should.raise(error)
30
+ end
31
+ end
32
+
33
+ describe 'w braced block' do
34
+ should "raise #{error} w no nesting on same line" do
35
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
36
+ @thing.class.send(:define_method, :m1, &b2)
37
+ lambda { @thing.method(:m1).to_source }.should.raise(error)
38
+ end
39
+
40
+ should "raise #{error} w single level nesting on same line" do
41
+ b1 = lambda {|a| @x }; b2 = lambda { lambda { @x } }
42
+ @thing.class.send(:define_method, :m2, &b2)
43
+ lambda { @thing.method(:m2).to_source }.should.raise(error)
44
+ end
45
+
46
+ should "raise #{error} w multi level nesting on same line" do
47
+ b2 = (lambda {|a| lambda { lambda { @x } } }).call(1)
48
+ @thing.class.send(:define_method, :m3, &b2)
49
+ lambda { @thing.method(:m3).to_source }.should.raise(error)
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+ end