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,39 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe 'Method#to_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 proc wo arg' do
|
|
11
|
+
def m1; a+b; end
|
|
12
|
+
method(:m1).should.be having_source(%(a + b), options)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should 'strip enclosing proc w arg' do
|
|
16
|
+
def m2(a); a+b; end
|
|
17
|
+
method(:m2).should.be having_source(%(a+b), options)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe '>> w false' do
|
|
23
|
+
|
|
24
|
+
options = {:strip_enclosure => false}
|
|
25
|
+
|
|
26
|
+
should 'not strip enclosing proc wo arg' do
|
|
27
|
+
def m3; a+b; end
|
|
28
|
+
method(:m3).should.be having_source(%(def m3; a+b; end), options)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
should 'not strip enclosing proc w arg' do
|
|
32
|
+
def m4(a); a+b; end
|
|
33
|
+
method(:m4).should.be having_source(%(def m4(a); a+b; end), options)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
describe "Unsupported Platform" do
|
|
4
|
+
|
|
5
|
+
thing = Class.new do
|
|
6
|
+
def self.echo
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
should 'raise Sourcify::PlatformNotSupportedError when calling Method#to_source' do
|
|
11
|
+
lambda{ thing.method(:echo).to_source }.should.
|
|
12
|
+
raise(Sourcify::PlatformNotSupportedError)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should 'raise Sourcify::PlatformNotSupportedError when calling Method#to_sexp' do
|
|
16
|
+
lambda{ thing.method(:echo).to_sexp }.should.
|
|
17
|
+
raise(Sourcify::PlatformNotSupportedError)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
should 'raise Sourcify::PlatformNotSupportedError when calling Method#to_raw_source' do
|
|
21
|
+
lambda{ thing.method(:echo).to_raw_source }.should.
|
|
22
|
+
raise(Sourcify::PlatformNotSupportedError)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
shared 'Proc#to_source from { ... } block (1.9.*)' do
|
|
2
|
+
|
|
3
|
+
should 'handle simple (w label keys)' do
|
|
4
|
+
(
|
|
5
|
+
lambda {
|
|
6
|
+
{a: 1, b: 2}
|
|
7
|
+
}
|
|
8
|
+
).should.be having_source(%Q\
|
|
9
|
+
proc do
|
|
10
|
+
{:a => 1, :b => 2}
|
|
11
|
+
end
|
|
12
|
+
\)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should 'handle nested (w label keys)' do
|
|
16
|
+
(
|
|
17
|
+
lambda {
|
|
18
|
+
{a: 1, b: {c: 3}}
|
|
19
|
+
}
|
|
20
|
+
).should.be having_source(%Q\
|
|
21
|
+
proc do
|
|
22
|
+
{:a => 1, :b => {:c => 3}}
|
|
23
|
+
end
|
|
24
|
+
\)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe "Created on the fly proc" do
|
|
4
|
+
unless has_parsetree?
|
|
5
|
+
|
|
6
|
+
klass = Class.new do
|
|
7
|
+
def test(&block); block ; end
|
|
8
|
+
def blah; 1+2; end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe 'Blah#to_proc raising Sourcify::CannotHandleCreatedOnTheFlyProcError' do
|
|
12
|
+
|
|
13
|
+
should "raise when created by :to_proc" do
|
|
14
|
+
lambda {
|
|
15
|
+
x, y = klass.new.method(:test).to_proc, lambda { 1+2 }
|
|
16
|
+
x.to_source
|
|
17
|
+
}.should.raise(Sourcify::CannotHandleCreatedOnTheFlyProcError)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
should "not raise even with prepending #to_proc on the same line" do
|
|
21
|
+
x, y = klass.new.method(:test).to_proc, lambda { 1+2 }
|
|
22
|
+
y.to_source.should.not.be.nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
should "not raise even with appending #to_proc on the same line" do
|
|
26
|
+
x, y = lambda { 1+2 }, klass.new.method(:test).to_proc
|
|
27
|
+
x.to_source.should.not.be.nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
should "not raise even with nested #to_proc on the same line" do
|
|
31
|
+
x = lambda { klass.new.method(:test).to_proc }
|
|
32
|
+
x.to_source.should.not.be.nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
should "not raise with nested #to_proc on diff line" do
|
|
36
|
+
(
|
|
37
|
+
lambda do
|
|
38
|
+
klass.new.method(:test).to_proc
|
|
39
|
+
end
|
|
40
|
+
).to_source.should.not.be.nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe '&:blah raising Sourcify::CannotHandleCreatedOnTheFlyProcError' do
|
|
46
|
+
|
|
47
|
+
should "raise when created by &:blah" do
|
|
48
|
+
lambda {
|
|
49
|
+
x, y = klass.new.test(&:blah), lambda { 1+2 }
|
|
50
|
+
x.to_source
|
|
51
|
+
}.should.raise(Sourcify::CannotHandleCreatedOnTheFlyProcError)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
should "not raise even with prepending &:blah on the same line" do
|
|
55
|
+
x, y = klass.new.test(&:blah), lambda { 1+2 }
|
|
56
|
+
y.to_source.should.not.be.nil
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
should "not raise even with appending &:blah on the same line" do
|
|
60
|
+
x, y = lambda { 1+2 }, klass.new.test(&:blah)
|
|
61
|
+
x.to_source.should.not.be.nil
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
should "not raise even with nested &:blah on the same line" do
|
|
65
|
+
x = lambda { klass.new.test(&:blah) }
|
|
66
|
+
x.to_source.should.not.be.nil
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
should "not raise with nested &:blah on diff line" do
|
|
70
|
+
(
|
|
71
|
+
lambda do
|
|
72
|
+
klass.new.test(&:blah)
|
|
73
|
+
end
|
|
74
|
+
).to_source.should.not.be.nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# NOTE: The examples in this file are adapted from the original pull
|
|
4
|
+
# request submitted by tomykaira @ https://github.com/ngty/sourcify/pull/19.
|
|
5
|
+
#
|
|
6
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
7
|
+
|
|
8
|
+
describe "Encoding" do
|
|
9
|
+
next unless Sourcify::IS_19x
|
|
10
|
+
|
|
11
|
+
should "handle proc with UTF-8 string" do
|
|
12
|
+
lambda { "こんにちは" }.should.be having_sexp(
|
|
13
|
+
s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:str, "こんにちは"))
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
should "handle proc with unicode regexp" do
|
|
18
|
+
# NOTE: This specifically addresses https://github.com/ngty/sourcify/issues/15
|
|
19
|
+
lambda { /\p{Lu}/ }.should.be having_sexp(
|
|
20
|
+
s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:lit, /\p{Lu}/))
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
should "handle proc with UTF-8 heredoc" do
|
|
25
|
+
(
|
|
26
|
+
lambda do
|
|
27
|
+
<<-EOL
|
|
28
|
+
こんにちは
|
|
29
|
+
EOL
|
|
30
|
+
end
|
|
31
|
+
).should.be having_sexp(
|
|
32
|
+
s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:str, " こんにちは\n"))
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
|
|
2
|
+
|
|
3
|
+
describe "Misc" do
|
|
4
|
+
|
|
5
|
+
should 'handle accessing #to_sexp after #to_source' do
|
|
6
|
+
(s_proc = lambda { :test }).to_source
|
|
7
|
+
s_proc.should.be having_sexp(s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:lit, :test)))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
should 'handle accessing #to_source after #to_sexp' do
|
|
11
|
+
(s_proc = lambda { :test }).to_sexp
|
|
12
|
+
s_proc.should.be having_source('proc { :test }')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should "handle proc with '/' char" do
|
|
16
|
+
(lambda { @x1/2 }).should.be having_source('proc { @x1/2 }')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
should "handle lexer bug in missing trailing chars after '=>' operator" do
|
|
20
|
+
# This example addresses bug @ http://redmine.ruby-lang.org/issues/show/3765
|
|
21
|
+
{
|
|
22
|
+
__LINE__ => lambda { :test }
|
|
23
|
+
}.values.last.should.be having_source('proc { :test }')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
should "handle lexer bug in missing trailing chars after '=>' operator" do
|
|
27
|
+
# This example addresses bug @ http://redmine.ruby-lang.org/issues/show/3765
|
|
28
|
+
{
|
|
29
|
+
__LINE__ => lambda do :test end
|
|
30
|
+
}.values.last.should.be having_source('proc { :test }')
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
unless has_parsetree?
|
|
34
|
+
should "raise Sourcify::CannotParseEvalCodeError when proc is created from eval" do
|
|
35
|
+
lambda { eval("proc {:test }").to_source }.should.
|
|
36
|
+
raise(Sourcify::CannotParseEvalCodeError)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
unless has_parsetree?
|
|
4
|
+
describe "Proc's raw scanner > block comment (=begin ... =end)" do
|
|
5
|
+
extend Sourcify::Proc::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 "Proc's raw scanner > double quote strings (w interpolation)" do
|
|
5
|
+
extend Sourcify::Proc::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 "Proc's raw scanner > double quote strings (wo interpolation)" do
|
|
5
|
+
extend Sourcify::Proc::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 "Proc's raw scanner > keyword block start alias #1 (incrementing counter by 1)" do
|
|
5
|
+
|
|
6
|
+
extend Sourcify::Proc::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 ... do #{kw} ..." do
|
|
11
|
+
kw_block_start_counter(<<EOL
|
|
12
|
+
aa do #{kw} bb ...
|
|
13
|
+
cc
|
|
14
|
+
EOL
|
|
15
|
+
).should.equal([2,2])
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
unless has_parsetree?
|
|
4
|
+
describe "Proc's raw scanner > keyword block start alias #2 (incrementing counter by 0..1)" do
|
|
5
|
+
|
|
6
|
+
extend Sourcify::Proc::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 ... do #{kw} ..." do
|
|
11
|
+
kw_block_start_counter(<<EOL
|
|
12
|
+
aa do #{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 "Proc's raw scanner > single quote strings (\', %q & %w)" do
|
|
5
|
+
extend Sourcify::Proc::Parser::RawScanner::Spec::GenericSupport
|
|
6
|
+
behaves_like 'Single quote strings (\', %q & %w)'
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require File.expand_path('../../../spec_helper', __FILE__)
|
|
2
|
+
require File.expand_path('../../../raw_scanner/shared_specs', __FILE__)
|
|
3
|
+
|
|
4
|
+
module Sourcify::Proc::Parser::RawScanner
|
|
5
|
+
|
|
6
|
+
SCANNER = self
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
attr_reader :tokens, :do_end_counter
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module Spec
|
|
13
|
+
|
|
14
|
+
module GenericSupport
|
|
15
|
+
def self.extended(base)
|
|
16
|
+
base.instance_eval do
|
|
17
|
+
def process(data)
|
|
18
|
+
SCANNER.process(data)
|
|
19
|
+
SCANNER.tokens
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
module KwBlockStartSupport
|
|
26
|
+
def self.extended(base)
|
|
27
|
+
base.instance_eval do
|
|
28
|
+
|
|
29
|
+
before do
|
|
30
|
+
counter(:DoEndBlockCounter).class_eval do
|
|
31
|
+
alias_method :orig_started?, :started?
|
|
32
|
+
def started?; true; end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
after do
|
|
37
|
+
counter(:DoEndBlockCounter).class_eval do
|
|
38
|
+
alias_method :started?, :orig_started?
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def counter(type)
|
|
43
|
+
Sourcify::Proc::Parser::RawScanner::Extensions.const_get(type)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def kw_block_start_counter(data)
|
|
47
|
+
SCANNER.process(data)
|
|
48
|
+
SCANNER.do_end_counter.counts
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def kw_block_start_alias1
|
|
52
|
+
%w{class def module begin case module if unless}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def kw_block_start_alias2
|
|
56
|
+
%w{while until for}
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|