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,49 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Misc (from def..end block)" do
4
+
5
+ should 'handle accessing #to_sexp after #to_source' do
6
+ def m1; x; end
7
+ (m = method(:m1)).to_source
8
+ m.should.be having_sexp(
9
+ s(:defn, :m1, s(:args), s(:scope, s(:block, s(:call, nil, :x, s(:arglist)))))
10
+ )
11
+ end
12
+
13
+ should 'handle accessing #to_source after #to_sexp' do
14
+ def m2; x; end
15
+ (m = method(:m2)).to_sexp
16
+ m.should.be having_source(%(
17
+ def m2; x; end
18
+ ))
19
+ end
20
+
21
+ should "handle body with '/' char" do
22
+ def m3; x/2; end
23
+ method(:m3).should.be having_source(%(
24
+ def m3; x/2; end
25
+ ))
26
+ end
27
+
28
+ should "handle lexer bug in missing trailing chars after '=>' operator" do
29
+ # This example addresses bug @ http://redmine.ruby-lang.org/issues/show/3765
30
+ {
31
+ __LINE__ => (def m4; x; end; method(:m4))
32
+ }.values.last.should.be having_source(%(
33
+ def m4; x; end
34
+ ))
35
+ end
36
+
37
+ should 'raise Sourcify::CannotFindSourceLocationError when Method#source_location is nil' do
38
+ lambda { 1.method(:to_s).to_source }.should.
39
+ raise(Sourcify::CannotFindSourceLocationError)
40
+ end
41
+
42
+ unless has_parsetree?
43
+ should "raise Sourcify::CannotParseEvalCodeError when method is created from eval" do
44
+ lambda { eval("def m5; x; end; method(:m5)").to_source }.should.
45
+ raise(Sourcify::CannotParseEvalCodeError)
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,63 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
3
+
4
+ describe "Misc (from define_method)" do
5
+
6
+ before { @thing = Object.new }
7
+
8
+ should 'handle accessing #to_sexp after #to_source' do
9
+ blk = lambda { x }
10
+ @thing.class.send(:define_method, :m1, &blk)
11
+ (m = @thing.method(:m1)).to_source
12
+ m.should.be having_sexp(
13
+ s(:defn, :m1, s(:args), s(:scope, s(:block, s(:call, nil, :x, s(:arglist)))))
14
+ )
15
+ end
16
+
17
+ should 'handle accessing #to_source after #to_sexp' do
18
+ blk = lambda { x }
19
+ @thing.class.send(:define_method, :m2, &blk)
20
+ (m = @thing.method(:m2)).to_sexp
21
+ m.should.be having_source(%(
22
+ def m2; x; end
23
+ ))
24
+ end
25
+
26
+ should "handle body with '/' char" do
27
+ blk = lambda { x / 2 }
28
+ @thing.class.send(:define_method, :m3, &blk)
29
+ @thing.method(:m3).should.be having_source(%(
30
+ def m3; x / 2; end
31
+ ))
32
+ end
33
+
34
+ should "handle lexer bug in missing trailing chars after '=>' operator" do
35
+ # This example addresses bug @ http://redmine.ruby-lang.org/issues/show/3765
36
+ hash = {
37
+ :x => lambda { x }
38
+ }
39
+ @thing.class.send(:define_method, :m4, &(hash[:x]))
40
+ @thing.method(:m4).should.be having_source(%(
41
+ def m4; x; end
42
+ ))
43
+ end
44
+
45
+ should "handle lexer bug in missing trailing chars after '=>' operator" do
46
+ # This example addresses bug @ http://redmine.ruby-lang.org/issues/show/3765
47
+ hash = {
48
+ :blk => lambda do x end
49
+ }
50
+ @thing.class.send(:define_method, :m5, &(hash[:blk]))
51
+ @thing.method(:m5).should.be having_source(%(
52
+ def m5; x; end
53
+ ))
54
+ end
55
+
56
+ unless has_parsetree?
57
+ should "raise Sourcify::CannotParseEvalCodeError when method is created from eval" do
58
+ lambda { eval("klass = Class.new { define_method(:m6){ x }; }; klass.new.method(:m6)").to_source }.
59
+ should.raise(Sourcify::CannotParseEvalCodeError)
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > block comment (=begin ... =end)" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like "Block comment (=begin ... =end)"
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > double colons" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like "Double colons"
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > double quote strings (w interpolation)" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like "Double quote strings (w interpolation)"
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > double quote strings (wo interpolation)" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like "Double quote strings (wo interpolation)"
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > heredoc (w indent)" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like "Heredoc (w indent)"
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > heredoc (wo indent)" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like "Heredoc (wo indent)"
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > keyword block start alias #1 (incrementing counter by 1)" do
5
+
6
+ extend Sourcify::Method::Parser::RawScanner::Spec::KwBlockStartSupport
7
+ behaves_like "Keyword block start alias #1 (incrementing counter by 1)"
8
+
9
+ kw_block_start_alias1.each do |kw|
10
+ should "increment counter with ... def #{kw} ..." do
11
+ kw_block_start_counter(<<EOL
12
+ aa def #{kw} bb ...
13
+ cc
14
+ EOL
15
+ ).should.equal([2,2])
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > keyword block start alias #2 (incrementing counter by 0..1)" do
5
+
6
+ extend Sourcify::Method::Parser::RawScanner::Spec::KwBlockStartSupport
7
+ behaves_like "Keyword block start alias #2 (incrementing counter by 0..1)"
8
+
9
+ kw_block_start_alias2.each do |kw|
10
+ should "increment counter with ... def #{kw} ..." do
11
+ kw_block_start_counter(<<EOL
12
+ aa def #{kw} bb ...
13
+ cc
14
+ EOL
15
+ ).should.equal([1,2])
16
+ end
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > per line comment (# ...)" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like "Per line comment (# ...)"
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > single quote strings (\', %q & %w)" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like 'Single quote strings (\', %q & %w)'
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ unless has_parsetree?
4
+ describe "Method's raw scanner > slash operator" do
5
+ extend Sourcify::Method::Parser::RawScanner::Spec::GenericSupport
6
+ behaves_like 'Slash operator'
7
+ end
8
+ end
@@ -0,0 +1,80 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+ require File.expand_path('../../../raw_scanner/shared_specs', __FILE__)
3
+
4
+ module Sourcify::Method::Parser::RawScanner
5
+
6
+ SCANNER = self
7
+
8
+ class << self
9
+ attr_reader :tokens, :counter
10
+ end
11
+
12
+ module Spec
13
+
14
+ module GenericSupport
15
+ def self.extended(base)
16
+ base.instance_eval do
17
+
18
+ before do
19
+ SCANNER.instance_eval do
20
+ class << self
21
+ alias_method :orig_stop_if_probably_defined_by_proc,
22
+ :stop_if_probably_defined_by_proc
23
+ def stop_if_probably_defined_by_proc; end
24
+ end
25
+ end
26
+ end
27
+
28
+ after do
29
+ SCANNER.instance_eval do
30
+ class << self
31
+ alias_method :stop_if_probably_defined_by_proc,
32
+ :orig_stop_if_probably_defined_by_proc
33
+ end
34
+ end
35
+ end
36
+
37
+ def process(data)
38
+ SCANNER.process(data)
39
+ SCANNER.tokens
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+
46
+ module KwBlockStartSupport
47
+ def self.extended(base)
48
+ base.instance_eval do
49
+
50
+ before do
51
+ Extensions::Counter.class_eval do
52
+ alias_method :orig_started?, :started?
53
+ def started?; true; end
54
+ end
55
+ end
56
+
57
+ after do
58
+ Extensions::Counter.class_eval do
59
+ alias_method :started?, :orig_started?
60
+ end
61
+ end
62
+
63
+ def kw_block_start_counter(data)
64
+ SCANNER.process(data)
65
+ SCANNER.counter.counts
66
+ end
67
+
68
+ def kw_block_start_alias1
69
+ %w{class do module begin case module if unless}
70
+ end
71
+
72
+ def kw_block_start_alias2
73
+ %w{while until for}
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '..', 'spec_helper')
@@ -0,0 +1,31 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_raw_source" do
4
+
5
+ should 'retain comments' do
6
+ def m1
7
+ a = 1
8
+ # i should stay !!
9
+ end
10
+ method(:m1).should.be having_raw_source(%(
11
+ def m1
12
+ a = 1
13
+ # i should stay !!
14
+ end
15
+ ))
16
+ end
17
+
18
+ should 'retain last nil statement' do
19
+ def m2
20
+ a = 1
21
+ nil
22
+ end
23
+ method(:m2).should.be having_raw_source(%(
24
+ def m2
25
+ a = 1
26
+ nil
27
+ end
28
+ ))
29
+ end
30
+
31
+ end
@@ -0,0 +1,148 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_raw_source' do
4
+ describe 'w specified {:strip_enclosure => ...}' do
5
+
6
+ describe '>> w true' do
7
+
8
+ options = {:strip_enclosure => true}
9
+
10
+ should 'strip enclosing def..end wo arg' do
11
+ def m
12
+ # i should stay !!
13
+ end
14
+ method(:m).should.be having_raw_source('# i should stay !!', options)
15
+ end
16
+
17
+ should 'strip enclosing def..end w 1 required arg' do
18
+ def m(aa)
19
+ # i should stay !!
20
+ end
21
+ method(:m).should.be having_raw_source('# i should stay !!', options)
22
+ end
23
+
24
+ should 'strip enclosing def..end w 1 optional arg' do
25
+ def m(aa = nil)
26
+ # i should stay !!
27
+ end
28
+ method(:m).should.be having_raw_source('# i should stay !!', options)
29
+ end
30
+
31
+ should 'strip enclosing def..end w 1 splat arg' do
32
+ def m(*aa)
33
+ # i should stay !!
34
+ end
35
+ method(:m).should.be having_raw_source('# i should stay !!', options)
36
+ end
37
+
38
+ should 'strip enclosing def..end w 1 bracketed arg' do
39
+ def m((aa, bb))
40
+ # i should stay !!
41
+ end
42
+ method(:m).should.be having_raw_source('# i should stay !!', options)
43
+ end
44
+
45
+ should 'strip enclosing def..end w 1 required & 1 optional' do
46
+ def m(aa, bb = nil)
47
+ # i should stay !!
48
+ end
49
+ method(:m).should.be having_raw_source('# i should stay !!', options)
50
+ end
51
+
52
+ should 'strip enclosing def..end w 1 required & 1 splat' do
53
+ def m(aa, *bb)
54
+ # i should stay !!
55
+ end
56
+ method(:m).should.be having_raw_source('# i should stay !!', options)
57
+ end
58
+
59
+ should 'strip enclosing def..end w 1 required & 1 bracketed' do
60
+ def m(aa, (bb, cc))
61
+ # i should stay !!
62
+ end
63
+ method(:m).should.be having_raw_source('# i should stay !!', options)
64
+ end
65
+
66
+ should 'strip enclosing def..end even wo parenthesis' do
67
+ def m aa
68
+ # i should stay !!
69
+ end
70
+ method(:m).should.be having_raw_source('# i should stay !!', options)
71
+ end
72
+
73
+ end
74
+
75
+ describe '>> w false' do
76
+
77
+ options = {:strip_enclosure => false}
78
+
79
+ should 'not strip enclosing def..end wo arg' do
80
+ def m
81
+ # i should stay !!
82
+ end
83
+ method(:m).should.be having_raw_source(%(
84
+ def m
85
+ # i should stay !!
86
+ end
87
+ ), options)
88
+ end
89
+
90
+ should 'not strip enclosing def..end w 1 required arg' do
91
+ def m(aa)
92
+ # i should stay !!
93
+ end
94
+ method(:m).should.be having_raw_source(%(
95
+ def m(aa)
96
+ # i should stay !!
97
+ end
98
+ ), options)
99
+ end
100
+
101
+ should 'not strip enclosing def..end w 1 optional arg' do
102
+ def m(aa = nil)
103
+ # i should stay !!
104
+ end
105
+ method(:m).should.be having_raw_source(%(
106
+ def m(aa = nil)
107
+ # i should stay !!
108
+ end
109
+ ), options)
110
+ end
111
+
112
+ should 'not strip enclosing def..end w 1 splat arg' do
113
+ def m(*aa)
114
+ # i should stay !!
115
+ end
116
+ method(:m).should.be having_raw_source(%(
117
+ def m(*aa)
118
+ # i should stay !!
119
+ end
120
+ ), options)
121
+ end
122
+
123
+ should 'not strip enclosing def..end w 1 bracketed arg' do
124
+ def m((aa, bb))
125
+ # i should stay !!
126
+ end
127
+ method(:m).should.be having_raw_source(%(
128
+ def m((aa, bb))
129
+ # i should stay !!
130
+ end
131
+ ), options)
132
+ end
133
+
134
+ should 'not strip enclosing def..end even wo parenthesis' do
135
+ def m aa
136
+ # i should stay !!
137
+ end
138
+ method(:m).should.be having_raw_source(%(
139
+ def m aa
140
+ # i should stay !!
141
+ end
142
+ ), options)
143
+ end
144
+
145
+ end
146
+
147
+ end
148
+ end