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,20 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source from multi blocks w single match' do
4
+
5
+ should 'skip non-matching w no nesting on same line' do
6
+ b1 = lambda do |a| @x1 end; b2 = lambda do @x1 end
7
+ b2.should.be having_source('proc { @x1 }')
8
+ end
9
+
10
+ should 'skip non-matching w single level nesting on same line' do
11
+ b2 = (lambda {|a| lambda { @x2 } }).call(1)
12
+ b2.should.be having_source('proc { @x2 }')
13
+ end
14
+
15
+ should 'skip non-matching w multi level nesting on same line' do
16
+ b2 = (lambda {|a| lambda {|a| b2 = lambda { @x3 } } }).call(1).call(1)
17
+ b2.should.be having_source('proc { @x3 }')
18
+ end
19
+
20
+ end
@@ -0,0 +1,45 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source w specified {:attached_to => ...} & single match' do
4
+
5
+ options = {:attached_to => :lambda}
6
+
7
+ if has_parsetree?
8
+
9
+ should 'handle no nesting on same line' do
10
+ b1 = lambda {|a| @x1+1 }; b2 = lambda { @x1+2 }; b3 = lambda { @x1+3 }
11
+ b2.should.be having_source('proc { @x1+2 }', options)
12
+ end
13
+
14
+ should 'handle single level nesting on same line' do
15
+ b1 = lambda {|a| @x2+1 }; b2 = lambda { lambda { @x2+2 } }
16
+ b2.should.be having_source('proc { lambda { @x2+2 } }', options)
17
+ end
18
+
19
+ should 'handle multi level nesting on same line' do
20
+ b2 = (lambda {|a| lambda { lambda { @x3 } } }).call(1)
21
+ b2.should.be having_source('proc { lambda { @x3 } }', options)
22
+ end
23
+
24
+ else
25
+
26
+ error = Sourcify::MultipleMatchingProcsPerLineError
27
+
28
+ should "raise #{error} w no nesting on same line" do
29
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
30
+ lambda { b2.to_source(options) }.should.raise(error)
31
+ end
32
+
33
+ should "raise #{error} w single level nesting on same line" do
34
+ b1 = lambda {|a| @x }; b2 = lambda { lambda { @x } }
35
+ lambda { b2.to_source(options) }.should.raise(error)
36
+ end
37
+
38
+ should "raise #{error} w multi level nesting on same line" do
39
+ b2 = (lambda {|a| lambda { lambda { @x } } }).call(1)
40
+ lambda { b2.to_source(options) }.should.raise(error)
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,45 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source w specified {:attached_to => ...} & no match' do
4
+
5
+ options = {:attached_to => :forever}
6
+
7
+ if has_parsetree?
8
+
9
+ should 'handle no nesting on same line' do
10
+ b1 = lambda do |a| @x1+1 end; b2 = lambda do @x1+2 end; b3 = lambda do @x1+3 end
11
+ b2.should.be having_source('proc { @x1+2 }', options)
12
+ end
13
+
14
+ should 'handle single level nesting on same line' do
15
+ b1 = lambda do |a| @x2+1 end; b2 = lambda do lambda do @x2+2 end end
16
+ b2.should.be having_source('proc { lambda { @x2+2 } }', options)
17
+ end
18
+
19
+ should 'handle multi level nesting on same line' do
20
+ b2 = (lambda do |a| lambda do lambda do @x3 end end end).call(1)
21
+ b2.should.be having_source('proc { lambda { @x3 } }', options)
22
+ end
23
+
24
+ else
25
+
26
+ error = Sourcify::NoMatchingProcError
27
+
28
+ should "raise #{error} w no nesting on same line" do
29
+ b1 = lambda {|a| @x }; b2 = watever { @x }; b3 = lambda { @x }
30
+ lambda { b2.to_source(options) }.should.raise(error)
31
+ end
32
+
33
+ should "raise #{error} w single level nesting on same line" do
34
+ b1 = lambda {|a| @x }; b2 = watever { lambda { @x } }
35
+ lambda { b2.to_source(options) }.should.raise(error)
36
+ end
37
+
38
+ should "raise #{error} w multi level nesting on same line" do
39
+ b2 = (lambda {|a| watever { lambda { @x } } }).call(1)
40
+ lambda { b2.to_source(options) }.should.raise(error)
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,22 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source w specified {:attached_to => ...} & single match' do
4
+
5
+ options = {:attached_to => :watever}
6
+
7
+ should 'handle no nesting on same line' do
8
+ b1 = lambda {|a| @x1+1 }; b2 = watever { @x1+2 }; b3 = lambda { @x1+3 }
9
+ b2.should.be having_source('proc { @x1+2 }', options)
10
+ end
11
+
12
+ should 'handle single level nesting on same line' do
13
+ b1 = lambda {|a| @x2+1 }; b2 = watever { lambda { @x2+2 } }
14
+ b2.should.be having_source('proc { lambda { @x2+2 } }', options)
15
+ end
16
+
17
+ should 'handle multi level nesting on same line' do
18
+ b2 = (lambda {|a| watever { lambda { @x3 } } }).call(1)
19
+ b2.should.be having_source('proc { lambda { @x3 } }', options)
20
+ end
21
+
22
+ end
@@ -0,0 +1,84 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source w specified {:attached_to => ...}' do
4
+ unless has_parsetree?
5
+
6
+ err1 = Sourcify::MultipleMatchingProcsPerLineError
7
+ err2 = Sourcify::NoMatchingProcError
8
+
9
+ describe '>> w :attached_to as regexp' do
10
+
11
+ should "raise Sourcify::MultipleMatchingProcsPerLineError for multiple matches" do
12
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
13
+ lambda { b2.to_source(:attached_to => /^(?:.*?\W|)lambda(?:\W)/) }.should.raise(err1)
14
+ end
15
+
16
+ should "raise Sourcify::NoMatchingProcError for no match" do
17
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
18
+ lambda { b2.to_source(:attached_to => /^(?:.*?\W|)proc(?:\W)/) }.should.raise(err2)
19
+ end
20
+
21
+ should "handle for single match" do
22
+ b1 = lambda {|a| @x1 }; b2 = proc { @x2 }; b3 = lambda { @x3 }
23
+ b2.should.be having_source('proc { @x2 }', :attached_to => /^(?:.*?\W|)proc(?:\W)/)
24
+ end
25
+
26
+ end
27
+
28
+ describe '>> w :attached_to as string' do
29
+
30
+ should "raise Sourcify::MultipleMatchingProcsPerLineError for multiple matches" do
31
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
32
+ lambda { b2.to_source(:attached_to => 'lambda') }.should.raise(err1)
33
+ end
34
+
35
+ should "raise Sourcify::NoMatchingProcError for no match" do
36
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
37
+ lambda { b2.to_source(:attached_to => 'proc') }.should.raise(err2)
38
+ end
39
+
40
+ should "handle for single match" do
41
+ b1 = lambda {|a| @x1 }; b2 = proc { @x2 }; b3 = lambda { @x3 }
42
+ b2.should.be having_source('proc { @x2 }', :attached_to => 'proc')
43
+ end
44
+
45
+ end
46
+
47
+ describe '>> w :attached_to as symbol' do
48
+
49
+ should "raise Sourcify::MultipleMatchingProcsPerLineError for multiple matches" do
50
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
51
+ lambda { b2.to_source(:attached_to => :lambda) }.should.raise(err1)
52
+ end
53
+
54
+ should "raise Sourcify::NoMatchingProcError for no match" do
55
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
56
+ lambda { b2.to_source(:attached_to => :proc) }.should.raise(err2)
57
+ end
58
+
59
+ should "handle for single match" do
60
+ b1 = lambda {|a| @x1 }; b2 = proc { @x2 }; b3 = lambda { @x3 }
61
+ b2.should.be having_source('proc { @x2 }', :attached_to => :proc)
62
+ end
63
+
64
+ end
65
+
66
+ describe '>> w false start as a result of preceding hash' do
67
+
68
+ option = {:attached_to => :watever}
69
+ aa = :aa
70
+
71
+ should 'handle for do ... end block' do
72
+ x = watever({aa => 1, :bb => 3}) do :blah end
73
+ x.should.be having_source('proc { :blah }', option)
74
+ end
75
+
76
+ should 'handle for { ... } block' do
77
+ x = watever({aa => 1, :bb => 3}) { :blah }
78
+ x.should.be having_source('proc { :blah }', option)
79
+ end
80
+
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1,45 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source w specified {:attached_to => ...} & single match' do
4
+
5
+ matcher = lambda {|code| code =~ /^(.*\W|)def\W/ }
6
+
7
+ if has_parsetree?
8
+
9
+ should 'handle no nesting on same line' do
10
+ b1 = lambda {|a| @x1+1 }; b2 = lambda { @x1+2 }; b3 = lambda { @x1+3 }
11
+ b2.should.be having_source('proc { @x1+2 }', &matcher)
12
+ end
13
+
14
+ should 'handle single level nesting on same line' do
15
+ b1 = lambda {|a| @x2+1 }; b2 = lambda { lambda { @x2+2 } }
16
+ b2.should.be having_source('proc { lambda { @x2+2 } }', &matcher)
17
+ end
18
+
19
+ should 'handle multi level nesting on same line' do
20
+ b2 = (lambda {|a| lambda { lambda { @x3 } } }).call(1)
21
+ b2.should.be having_source('proc { lambda { @x3 } }', &matcher)
22
+ end
23
+
24
+ else
25
+
26
+ error = Sourcify::MultipleMatchingProcsPerLineError
27
+
28
+ should "raise #{error} w no nesting on same line" do
29
+ b1 = lambda {|a| @x }; b2 = lambda { def a1; end }; b3 = lambda { def a2; end }
30
+ lambda { b2.to_source(&matcher) }.should.raise(error)
31
+ end
32
+
33
+ should "raise #{error} w single level nesting on same line" do
34
+ b1 = lambda {|a| @x }; b2 = lambda { lambda { def bb; end } }
35
+ lambda { b2.to_source(&matcher) }.should.raise(error)
36
+ end
37
+
38
+ should "raise #{error} w multi level nesting on same line" do
39
+ b2 = (lambda {|a| lambda { lambda { def cc; end } } }).call(1)
40
+ lambda { b2.to_source(&matcher) }.should.raise(error)
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,45 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source w specified body matcher & no match' do
4
+
5
+ matcher = lambda {|code| code =~ /^(.*\W|)def\W/ }
6
+
7
+ if has_parsetree?
8
+
9
+ should 'handle no nesting on same line' do
10
+ b1 = lambda do |a| @x1+1 end; b2 = lambda do @x1+2 end; b3 = lambda do @x1+3 end
11
+ b2.should.be having_source('proc { @x1+2 }', &matcher)
12
+ end
13
+
14
+ should 'handle single level nesting on same line' do
15
+ b1 = lambda do |a| @x2+1 end; b2 = lambda do lambda do @x2+2 end end
16
+ b2.should.be having_source('proc { lambda { @x2+2 } }', &matcher)
17
+ end
18
+
19
+ should 'handle multi level nesting on same line' do
20
+ b2 = (lambda do |a| lambda do lambda do @x3 end end end).call(1)
21
+ b2.should.be having_source('proc { lambda { @x3 } }', &matcher)
22
+ end
23
+
24
+ else
25
+
26
+ error = Sourcify::NoMatchingProcError
27
+
28
+ should "raise #{error} w no nesting on same line" do
29
+ b1 = lambda {|a| @x }; b2 = lambda { @x }; b3 = lambda { @x }
30
+ lambda { b2.to_source(&matcher) }.should.raise(error)
31
+ end
32
+
33
+ should "raise #{error} w single level nesting on same line" do
34
+ b1 = lambda {|a| @x }; b2 = lambda { lambda { @x } }
35
+ lambda { b2.to_source(&matcher) }.should.raise(error)
36
+ end
37
+
38
+ should "raise #{error} w multi level nesting on same line" do
39
+ b2 = (lambda {|a| lambda { lambda { @x } } }).call(1)
40
+ lambda { b2.to_source(&matcher) }.should.raise(error)
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,22 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source w specified body matcher & single match' do
4
+
5
+ matcher = lambda {|code| code =~ /^(.*\W|)def\W/ }
6
+
7
+ should 'handle no nesting on same line' do
8
+ b1 = lambda {|a| @x1+1 }; b2 = lambda { @x1+2 }; b3 = lambda { def aa; end }
9
+ b3.should.be having_source('proc { def aa; end }', &matcher)
10
+ end
11
+
12
+ should 'handle single level nesting on same line' do
13
+ b1 = lambda {|a| @x2+1 }; b2 = lambda { def bb; end; lambda { @x2+3 } }
14
+ b2.should.be having_source('proc { def bb; end; lambda { @x2+3 } }', &matcher)
15
+ end
16
+
17
+ should 'handle multi level nesting on same line' do
18
+ b2 = (lambda {|a| lambda { def cc; end; lambda { @x3+3 } } }).call(1)
19
+ b2.should.be having_source('proc { def cc; end; lambda { @x3+3 } }', &matcher)
20
+ end
21
+
22
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source w specified {:ignore_nested => ...}' do
4
+
5
+ options = {:ignore_nested => true}
6
+
7
+ if has_parsetree?
8
+
9
+ should 'handle no nesting on same line' do
10
+ b1 = lambda {|a| @x1+1 }; b2 = lambda { @x1+2 }; b3 = lambda { @x1+3 }
11
+ b2.should.be having_source('proc { @x1+2 }', options)
12
+ end
13
+
14
+ should 'handle single level nesting on same line' do
15
+ b1 = lambda {|a| @x2+1 }; b2 = lambda { lambda { @x2+2 } }
16
+ b2.should.be having_source('proc { lambda { @x2+2 } }', options)
17
+ end
18
+
19
+ should 'handle multi level nesting on same line (w outermost having diff arity)' do
20
+ b2 = (lambda {|a| lambda { lambda { @x3 } } }).call(1)
21
+ b2.should.be having_source('proc { lambda { @x3 } }', options)
22
+ end
23
+
24
+ else
25
+
26
+ should "raise Sourcify::MultipleMatchingProcsPerLineError w no nesting on same line" do
27
+ b1 = lambda {|a| @x1+1 }; b2 = lambda { @x1+2 }; b3 = lambda { @x1+3 }
28
+ lambda { b2.to_source(options) }.should.raise(Sourcify::MultipleMatchingProcsPerLineError)
29
+ end
30
+
31
+ should "handle w single level nesting on same line" do
32
+ b1 = lambda {|a| @x2+1 }; b2 = lambda { lambda { @x2+3 } }
33
+ b2.should.be having_source('proc { lambda { @x2+3 } }', options)
34
+ end
35
+
36
+ should "raise Sourcify::NoMatchingProcError w multi level nesting on same line (w outermost having diff arity)" do
37
+ b2 = (lambda {|a| lambda { lambda { @x3 } } }).call(1)
38
+ lambda { b2.to_source(options) }.should.raise(Sourcify::NoMatchingProcError)
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,31 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Proc#to_source from multi blocks w single match' do
4
+
5
+ expected = 'proc { @x%s }'
6
+
7
+ should 'skip non-matching (all do...end blocks)' do
8
+ (
9
+ b1 = lambda do |a| @x1 end; b2 = lambda do @x1 end; b2
10
+ ).should.be having_source(expected%1)
11
+ end
12
+
13
+ should 'skip non-matching (all {...} blocks)' do
14
+ (
15
+ b1 = lambda {|a| @x2 }; b2 = lambda { @x2 }; b2
16
+ ).should.be having_source(expected%2)
17
+ end
18
+
19
+ should 'skip non-matching (mixed {...} with do...end blocks)' do
20
+ (
21
+ b1 = lambda {|a| @x3 }; b2 = lambda do @x3 end; b2
22
+ ).should.be having_source(expected%3)
23
+ end
24
+
25
+ should 'skip non-matching (mixed do...end with {...} blocks)' do
26
+ (
27
+ b1 = lambda do |a| @x4 end; b2 = lambda { @x4 }; b2
28
+ ).should.be having_source(expected%4)
29
+ end
30
+
31
+ end
@@ -0,0 +1,127 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source (magic var __FILE__)" do
4
+
5
+ should 'handle single standalone' do
6
+ lambda { __FILE__ }.should.be having_source(%(proc { "#{__FILE__}" }))
7
+ end
8
+
9
+ should 'handle multiple standalones' do
10
+ lambda {
11
+ [
12
+ __FILE__, __FILE__,
13
+ __FILE__
14
+ ]
15
+ }.should.be having_source(%Q(
16
+ proc do
17
+ [
18
+ "#{__FILE__}", "#{__FILE__}",
19
+ "#{__FILE__}"
20
+ ]
21
+ end
22
+ ))
23
+ end
24
+
25
+ should 'handle single interpolation' do
26
+ lambda { "#{__FILE__}" }.should.be having_source(%(proc { "#{__FILE__}" }))
27
+ end
28
+
29
+ should 'handle multiple interpolation (separate)' do
30
+ lambda {
31
+ [
32
+ "#{__FILE__}", "#{__FILE__}",
33
+ "#{__FILE__}"
34
+ ]
35
+ }.should.be having_source(%Q(
36
+ proc do
37
+ [
38
+ "#{__FILE__}", "#{__FILE__}",
39
+ "#{__FILE__}"
40
+ ]
41
+ end
42
+ ))
43
+ end
44
+
45
+ should 'handle multiple interpolation (together)' do
46
+ lambda {
47
+ <<EOL
48
+ #{__FILE__}, #{__FILE__},
49
+ #{__FILE__}
50
+ EOL
51
+ }.should.be having_source(%Q(
52
+ proc do
53
+ <<EOL
54
+ #{__FILE__}, #{__FILE__},
55
+ #{__FILE__}
56
+ EOL
57
+ end
58
+ ))
59
+ end
60
+
61
+ should 'handle interpolation in (") quoted string' do
62
+ lambda { "#{__FILE__}" }.should.be having_source(%Q(proc { "#{__FILE__}" }))
63
+ end
64
+
65
+ should 'handle interpolation in (%) quoted string' do
66
+ lambda { %(#{__FILE__}) }.should.be having_source(%Q(proc { "#{__FILE__}" }))
67
+ end
68
+
69
+ should 'handle interpolation in (%Q) quoted string' do
70
+ lambda { %Q(#{__FILE__}) }.should.be having_source(%Q(proc { "#{__FILE__}" }))
71
+ end
72
+
73
+ should 'handle interpolation in heredoc string' do
74
+ lambda {
75
+ <<-EOL
76
+ #{__FILE__}
77
+ EOL
78
+ }.should.be having_source(%Q(
79
+ proc do
80
+ <<-EOL
81
+ #{__FILE__}
82
+ EOL
83
+ end
84
+ ))
85
+ end
86
+
87
+ should 'handle interpolation in (%r) regexp' do
88
+ lambda { %r(#{__FILE__}) }.should.be having_source(%Q(proc { %r(#{__FILE__}) }))
89
+ end
90
+
91
+ should 'handle interpolation in (/) regexp' do
92
+ lambda { /#{__FILE__}/ }.should.be having_source(%Q(proc { %r(#{__FILE__}) }))
93
+ end
94
+
95
+ should 'handle interpolation in (%x) command' do
96
+ lambda { %x(echo #{__FILE__}) }.should.be having_source(%Q(proc { %x(echo #{__FILE__}) }))
97
+ end
98
+
99
+ should 'handle interpolation in (`) command' do
100
+ lambda { `echo #{__FILE__}` }.should.be having_source(%Q(proc { `echo #{__FILE__}` }))
101
+ end
102
+
103
+ should 'handle interpolation in (%W) array' do
104
+ lambda { %W(#{__FILE__}) }.should.be having_source(%Q(proc { %W(#{__FILE__}) }))
105
+ end
106
+
107
+ should 'not handle interpolation in (\') quoted string' do
108
+ lambda { '#{__FILE__}' }.should.be having_source(%Q(proc { '\#{__FILE__}' }))
109
+ end
110
+
111
+ should 'not handle interpolation in (%q) quoted string' do
112
+ lambda { %q(#{__FILE__}) }.should.be having_source(%Q(proc { '\#{__FILE__}' }))
113
+ end
114
+
115
+ should 'not handle interpolation in (%w) array' do
116
+ lambda { %w(#{__FILE__}) }.should.be having_source(%Q(proc { %w{\#{__FILE__}} }))
117
+ end
118
+
119
+ should 'not handle escaped-interpolation' do
120
+ lambda { "\#{__FILE__}" }.should.be having_source('proc { "\#{__FILE__}" }')
121
+ end
122
+
123
+ should 'not handle non-interpolated' do
124
+ lambda { "__FILE__" }.should.be having_source(%(proc { "__FILE__" }))
125
+ end
126
+
127
+ end