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.
- checksums.yaml +7 -0
- data/lib/ast/builder.rb +100 -0
- data/lib/ast/lexical_variables_enumerator.rb +34 -0
- data/lib/ast/method_definition.rb +37 -0
- data/lib/ast/nodes.rb +208 -0
- data/lib/ast/printer.rb +99 -0
- data/lib/ast/translator.rb +264 -0
- data/lib/ast/visitor.rb +173 -0
- data/lib/config/configuration.rb +18 -0
- data/lib/config/os_configuration.rb +56 -0
- data/lib/entity.rb +11 -0
- data/lib/ikra.rb +7 -0
- data/lib/parsing.rb +32 -0
- data/lib/resources/cuda/block_function_head.cpp +1 -0
- data/lib/resources/cuda/env_builder_copy_array.cpp +4 -0
- data/lib/resources/cuda/header.cpp +46 -0
- data/lib/resources/cuda/kernel.cpp +8 -0
- data/lib/resources/cuda/kernel_launcher.cpp +28 -0
- data/lib/resources/cuda/soa_header.cpp +4 -0
- data/lib/scope.rb +166 -0
- data/lib/sourcify/Gemfile +10 -0
- data/lib/sourcify/HISTORY.txt +88 -0
- data/lib/sourcify/LICENSE +20 -0
- data/lib/sourcify/README.rdoc +352 -0
- data/lib/sourcify/Rakefile +111 -0
- data/lib/sourcify/lib/sourcify.rb +44 -0
- data/lib/sourcify/lib/sourcify/common/parser/converter.rb +29 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/comment.rb +23 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/counter.rb +43 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/dstring.rb +58 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/extensions.rb +140 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/heredoc.rb +26 -0
- data/lib/sourcify/lib/sourcify/common/parser/source_code.rb +45 -0
- data/lib/sourcify/lib/sourcify/common/ragel/common.rl +5 -0
- data/lib/sourcify/lib/sourcify/common/ragel/expressions.rl +38 -0
- data/lib/sourcify/lib/sourcify/common/ragel/machines.rl +317 -0
- data/lib/sourcify/lib/sourcify/errors.rb +4 -0
- data/lib/sourcify/lib/sourcify/method.rb +138 -0
- data/lib/sourcify/lib/sourcify/method/methods.rb +3 -0
- data/lib/sourcify/lib/sourcify/method/methods/to_raw_source.rb +30 -0
- data/lib/sourcify/lib/sourcify/method/methods/to_sexp.rb +30 -0
- data/lib/sourcify/lib/sourcify/method/methods/to_source.rb +30 -0
- data/lib/sourcify/lib/sourcify/method/parser.rb +110 -0
- data/lib/sourcify/lib/sourcify/method/parser/converter.rb +8 -0
- data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rb +2494 -0
- data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rl +144 -0
- data/lib/sourcify/lib/sourcify/method/parser/raw_scanner_extensions.rb +68 -0
- data/lib/sourcify/lib/sourcify/method/parser/scanner.rb +52 -0
- data/lib/sourcify/lib/sourcify/method/parser/source_code.rb +8 -0
- data/lib/sourcify/lib/sourcify/patches.rb +63 -0
- data/lib/sourcify/lib/sourcify/proc.rb +183 -0
- data/lib/sourcify/lib/sourcify/proc/methods.rb +3 -0
- data/lib/sourcify/lib/sourcify/proc/methods/source_location.rb +61 -0
- data/lib/sourcify/lib/sourcify/proc/methods/to_raw_source.rb +20 -0
- data/lib/sourcify/lib/sourcify/proc/methods/to_sexp.rb +40 -0
- data/lib/sourcify/lib/sourcify/proc/methods/to_source.rb +48 -0
- data/lib/sourcify/lib/sourcify/proc/parser.rb +51 -0
- data/lib/sourcify/lib/sourcify/proc/parser/converter.rb +8 -0
- data/lib/sourcify/lib/sourcify/proc/parser/normalizer.rb +43 -0
- data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rb +2498 -0
- data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rl +149 -0
- data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner_extensions.rb +74 -0
- data/lib/sourcify/lib/sourcify/proc/parser/scanner.rb +49 -0
- data/lib/sourcify/lib/sourcify/proc/parser/source_code.rb +8 -0
- data/lib/sourcify/lib/sourcify/version.rb +3 -0
- data/lib/sourcify/sourcify.gemspec +31 -0
- data/lib/sourcify/spec/dump_object_space_procs.rb +84 -0
- data/lib/sourcify/spec/method/encoding_from_def_end_block_spec.rb +33 -0
- data/lib/sourcify/spec/method/encoding_from_define_method_spec.rb +37 -0
- data/lib/sourcify/spec/method/others_from_def_end_block_spec.rb +49 -0
- data/lib/sourcify/spec/method/others_from_define_method_spec.rb +63 -0
- data/lib/sourcify/spec/method/raw_scanner/block_comment_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/double_colons_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/heredoc_w_indent_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
- data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
- data/lib/sourcify/spec/method/raw_scanner/per_line_comment_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/single_quote_str_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/slash_operator_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/spec_helper.rb +80 -0
- data/lib/sourcify/spec/method/spec_helper.rb +1 -0
- data/lib/sourcify/spec/method/to_raw_source_spec.rb +31 -0
- data/lib/sourcify/spec/method/to_raw_source_w_specified_strip_enclosure_spec.rb +148 -0
- data/lib/sourcify/spec/method/to_sexp_from_def_end_block_w_variables_spec.rb +46 -0
- data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_irb_spec.rb +38 -0
- data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_pry_spec.rb +38 -0
- data/lib/sourcify/spec/method/to_sexp_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +56 -0
- data/lib/sourcify/spec/method/to_sexp_from_define_method_w_variables_spec.rb +52 -0
- data/lib/sourcify/spec/method/to_sexp_from_define_method_within_irb_spec.rb +42 -0
- data/lib/sourcify/spec/method/to_sexp_from_define_method_within_pry_spec.rb +42 -0
- data/lib/sourcify/spec/method/to_sexp_w_specified_strip_enclosure_spec.rb +74 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_19_extras_spec.rb +23 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_begin_spec.rb +35 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_case_spec.rb +35 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_class_spec.rb +51 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_do_end_block_spec.rb +33 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_for_spec.rb +126 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_if_spec.rb +83 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_literal_keyword_spec.rb +141 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_method_spec.rb +33 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_module_spec.rb +59 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_unless_spec.rb +83 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_until_spec.rb +179 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_while_spec.rb +179 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_singleton_method_spec.rb +19 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_within_irb_spec.rb +30 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_within_pry_spec.rb +45 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_many_matches_spec.rb +30 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_single_match_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_braced_block_spec.rb +113 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_do_end_block_spec.rb +145 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_many_matches_spec.rb +56 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_single_match_spec.rb +73 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_many_matches_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_no_match_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_single_match_spec.rb +28 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +103 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_many_matches_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_no_match_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_single_match_spec.rb +28 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_within_irb_spec.rb +32 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_within_pry_spec.rb +49 -0
- data/lib/sourcify/spec/method/to_source_magic_file_var_spec.rb +176 -0
- data/lib/sourcify/spec/method/to_source_magic_line_var_spec.rb +298 -0
- data/lib/sourcify/spec/method/to_source_w_specified_strip_enclosure_spec.rb +39 -0
- data/lib/sourcify/spec/no_method/unsupported_platform_spec.rb +26 -0
- data/lib/sourcify/spec/proc/19x_extras.rb +27 -0
- data/lib/sourcify/spec/proc/created_on_the_fly_proc_spec.rb +80 -0
- data/lib/sourcify/spec/proc/encoding_spec.rb +36 -0
- data/lib/sourcify/spec/proc/others_spec.rb +40 -0
- data/lib/sourcify/spec/proc/raw_scanner/block_comment_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/double_colons_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/heredoc_w_indent_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
- data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
- data/lib/sourcify/spec/proc/raw_scanner/per_line_comment_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/single_quote_str_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/slash_operator_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/spec_helper.rb +63 -0
- data/lib/sourcify/spec/proc/readme +5 -0
- data/lib/sourcify/spec/proc/spec_helper.rb +1 -0
- data/lib/sourcify/spec/proc/to_raw_source_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_raw_source_w_specified_strip_enclosure_spec.rb +69 -0
- data/lib/sourcify/spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb +46 -0
- data/lib/sourcify/spec/proc/to_sexp_variables_spec.rb +146 -0
- data/lib/sourcify/spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb +60 -0
- data/lib/sourcify/spec/proc/to_sexp_within_irb_spec.rb +146 -0
- data/lib/sourcify/spec/proc/to_sexp_within_pry_spec.rb +149 -0
- data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb +82 -0
- data/lib/sourcify/spec/proc/to_source_from_braced_block_wo_nesting_complication_spec.rb +46 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_begin_spec.rb +35 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb +35 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb +89 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_for_spec.rb +132 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_if_spec.rb +87 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb +103 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb +49 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_unless_spec.rb +87 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_until_spec.rb +189 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_while_spec.rb +189 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb +46 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb +43 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb +20 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb +45 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb +45 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb +22 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb +84 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb +45 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb +45 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb +22 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb +43 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb +31 -0
- data/lib/sourcify/spec/proc/to_source_magic_file_var_spec.rb +127 -0
- data/lib/sourcify/spec/proc/to_source_magic_line_var_spec.rb +127 -0
- data/lib/sourcify/spec/proc/to_source_variables_spec.rb +29 -0
- data/lib/sourcify/spec/proc/to_source_w_specified_strip_enclosure_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_source_within_irb_spec.rb +38 -0
- data/lib/sourcify/spec/proc/to_source_within_pry_spec.rb +61 -0
- data/lib/sourcify/spec/raw_scanner/block_comment_shared_spec.rb +57 -0
- data/lib/sourcify/spec/raw_scanner/double_colons_shared_spec.rb +11 -0
- data/lib/sourcify/spec/raw_scanner/double_quote_str_w_interpolation_shared_spec.rb +60 -0
- data/lib/sourcify/spec/raw_scanner/double_quote_str_wo_interpolation_shared_spec.rb +86 -0
- data/lib/sourcify/spec/raw_scanner/heredoc_w_indent_shared_spec.rb +69 -0
- data/lib/sourcify/spec/raw_scanner/heredoc_wo_indent_shared_spec.rb +70 -0
- data/lib/sourcify/spec/raw_scanner/kw_block_start_alias1_shared_spec.rb +73 -0
- data/lib/sourcify/spec/raw_scanner/kw_block_start_alias2_shared_spec.rb +73 -0
- data/lib/sourcify/spec/raw_scanner/per_line_comment_shared_spec.rb +32 -0
- data/lib/sourcify/spec/raw_scanner/shared_specs.rb +3 -0
- data/lib/sourcify/spec/raw_scanner/single_quote_str_shared_spec.rb +79 -0
- data/lib/sourcify/spec/raw_scanner/slash_operator_shared_spec.rb +71 -0
- data/lib/sourcify/spec/run_build.sh +25 -0
- data/lib/sourcify/spec/spec_helper.rb +130 -0
- data/lib/symbolic/symbolic.rb +248 -0
- data/lib/symbolic/visitor.rb +51 -0
- data/lib/translator/block_translator.rb +123 -0
- data/lib/translator/command_translator.rb +421 -0
- data/lib/translator/last_returns_visitor.rb +57 -0
- data/lib/translator/local_variables_enumerator.rb +35 -0
- data/lib/translator/method_translator.rb +24 -0
- data/lib/translator/translator.rb +49 -0
- data/lib/type_aware_array.rb +71 -0
- data/lib/types/array_type.rb +51 -0
- data/lib/types/class_type.rb +128 -0
- data/lib/types/object_tracer.rb +162 -0
- data/lib/types/primitive_type.rb +73 -0
- data/lib/types/ruby_extension.rb +67 -0
- data/lib/types/ruby_type.rb +45 -0
- data/lib/types/type_inference.rb +382 -0
- data/lib/types/union_type.rb +155 -0
- 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 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,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 > 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,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
|