sourcify 0.5.0 → 0.6.0.rc1
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.
- data/.gitignore +1 -0
- data/HISTORY.txt +5 -0
- data/README.rdoc +86 -3
- data/Rakefile +47 -15
- data/lib/sourcify.rb +13 -0
- data/lib/sourcify/common/parser/converter.rb +29 -0
- data/lib/sourcify/common/parser/raw_scanner/comment.rb +23 -0
- data/lib/sourcify/common/parser/raw_scanner/counter.rb +43 -0
- data/lib/sourcify/common/parser/raw_scanner/dstring.rb +60 -0
- data/lib/sourcify/common/parser/raw_scanner/extensions.rb +121 -0
- data/lib/sourcify/common/parser/raw_scanner/heredoc.rb +26 -0
- data/lib/sourcify/common/parser/source_code.rb +33 -0
- data/lib/sourcify/common/ragel/common.rl +5 -0
- data/lib/sourcify/common/ragel/expressions.rl +38 -0
- data/lib/sourcify/{proc/scanner.rl → common/ragel/machines.rl} +10 -178
- data/lib/sourcify/errors.rb +4 -0
- data/lib/sourcify/method.rb +134 -0
- data/lib/sourcify/method/methods.rb +3 -0
- data/lib/sourcify/method/methods/to_raw_source.rb +30 -0
- data/lib/sourcify/method/methods/to_sexp.rb +30 -0
- data/lib/sourcify/method/methods/to_source.rb +30 -0
- data/lib/sourcify/method/parser.rb +104 -0
- data/lib/sourcify/method/parser/converter.rb +8 -0
- data/lib/sourcify/method/parser/raw_scanner.rb +2494 -0
- data/lib/sourcify/method/parser/raw_scanner.rl +144 -0
- data/lib/sourcify/method/parser/raw_scanner_extensions.rb +64 -0
- data/lib/sourcify/method/parser/scanner.rb +48 -0
- data/lib/sourcify/method/parser/source_code.rb +8 -0
- data/lib/sourcify/proc.rb +0 -2
- data/lib/sourcify/proc/parser.rb +2 -5
- data/lib/sourcify/proc/parser/converter.rb +2 -23
- data/lib/sourcify/proc/{scanner.rb → parser/raw_scanner.rb} +808 -806
- data/lib/sourcify/proc/parser/raw_scanner.rl +149 -0
- data/lib/sourcify/proc/parser/raw_scanner_extensions.rb +72 -0
- data/lib/sourcify/proc/parser/{code_scanner.rb → scanner.rb} +9 -5
- data/lib/sourcify/proc/parser/source_code.rb +2 -27
- data/lib/sourcify/version.rb +1 -1
- data/spec/method/others_from_def_end_block_spec.rb +49 -0
- data/spec/method/others_from_define_method_spec.rb +62 -0
- data/spec/method/raw_scanner/block_comment_spec.rb +8 -0
- data/spec/method/raw_scanner/double_colons_spec.rb +8 -0
- data/spec/method/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
- data/spec/method/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
- data/spec/method/raw_scanner/heredoc_w_indent_spec.rb +8 -0
- data/spec/method/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
- data/spec/method/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
- data/spec/method/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
- data/spec/method/raw_scanner/per_line_comment_spec.rb +8 -0
- data/spec/method/raw_scanner/single_quote_str_spec.rb +8 -0
- data/spec/method/raw_scanner/slash_operator_spec.rb +8 -0
- data/spec/method/raw_scanner/spec_helper.rb +80 -0
- data/spec/method/spec_helper.rb +1 -0
- data/spec/method/to_raw_source_spec.rb +31 -0
- data/spec/method/to_raw_source_w_specified_strip_enclosure_spec.rb +148 -0
- data/spec/method/to_sexp_from_def_end_block_w_variables_spec.rb +46 -0
- data/spec/method/to_sexp_from_def_end_block_within_irb_spec.rb +38 -0
- data/spec/method/to_sexp_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +56 -0
- data/spec/method/to_sexp_from_define_method_w_variables_spec.rb +52 -0
- data/spec/method/to_sexp_from_define_method_within_irb_spec.rb +42 -0
- data/spec/method/to_sexp_w_specified_strip_enclosure_spec.rb +74 -0
- data/spec/method/to_source_from_def_end_block_w_19_extras_spec.rb +23 -0
- data/spec/method/to_source_from_def_end_block_w_nested_begin_spec.rb +35 -0
- data/spec/method/to_source_from_def_end_block_w_nested_case_spec.rb +35 -0
- data/spec/method/to_source_from_def_end_block_w_nested_class_spec.rb +51 -0
- data/spec/method/to_source_from_def_end_block_w_nested_do_end_block_spec.rb +33 -0
- data/spec/method/to_source_from_def_end_block_w_nested_for_spec.rb +126 -0
- data/spec/method/to_source_from_def_end_block_w_nested_if_spec.rb +82 -0
- data/spec/method/to_source_from_def_end_block_w_nested_literal_keyword_spec.rb +141 -0
- data/spec/method/to_source_from_def_end_block_w_nested_method_spec.rb +33 -0
- data/spec/method/to_source_from_def_end_block_w_nested_module_spec.rb +59 -0
- data/spec/method/to_source_from_def_end_block_w_nested_unless_spec.rb +82 -0
- data/spec/method/to_source_from_def_end_block_w_nested_until_spec.rb +179 -0
- data/spec/method/to_source_from_def_end_block_w_nested_while_spec.rb +179 -0
- data/spec/method/to_source_from_def_end_block_w_singleton_method_spec.rb +19 -0
- data/spec/method/to_source_from_def_end_block_within_irb_spec.rb +30 -0
- data/spec/method/to_source_from_def_end_w_multi_blocks_and_many_matches_spec.rb +30 -0
- data/spec/method/to_source_from_def_end_w_multi_blocks_and_single_match_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_braced_block_spec.rb +113 -0
- data/spec/method/to_source_from_define_method_w_do_end_block_spec.rb +145 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_many_matches_spec.rb +56 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_single_match_spec.rb +73 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_many_matches_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_no_match_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_single_match_spec.rb +28 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +103 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_many_matches_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_no_match_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_single_match_spec.rb +28 -0
- data/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb +36 -0
- data/spec/method/to_source_from_define_method_within_irb_spec.rb +32 -0
- data/spec/method/to_source_magic_file_var_spec.rb +176 -0
- data/spec/method/to_source_magic_line_var_spec.rb +298 -0
- data/spec/method/to_source_w_specified_strip_enclosure_spec.rb +39 -0
- data/spec/no_method/unsupported_platform_spec.rb +26 -0
- data/spec/proc/raw_scanner/block_comment_spec.rb +8 -0
- data/spec/proc/raw_scanner/double_colons_spec.rb +8 -0
- data/spec/proc/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
- data/spec/proc/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
- data/spec/proc/raw_scanner/heredoc_w_indent_spec.rb +8 -0
- data/spec/proc/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
- data/spec/proc/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
- data/spec/proc/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
- data/spec/proc/raw_scanner/per_line_comment_spec.rb +8 -0
- data/spec/proc/raw_scanner/single_quote_str_spec.rb +8 -0
- data/spec/proc/raw_scanner/slash_operator_spec.rb +8 -0
- data/spec/proc/raw_scanner/spec_helper.rb +63 -0
- data/spec/{proc_scanner/block_comment_spec.rb → raw_scanner/block_comment_shared_spec.rb} +1 -5
- data/spec/{proc_scanner/double_colons_spec.rb → raw_scanner/double_colons_shared_spec.rb} +1 -5
- data/spec/{proc_scanner/double_quote_str_w_interpolation_spec.rb → raw_scanner/double_quote_str_w_interpolation_shared_spec.rb} +1 -5
- data/spec/{proc_scanner/double_quote_str_wo_interpolation_spec.rb → raw_scanner/double_quote_str_wo_interpolation_shared_spec.rb} +1 -5
- data/spec/raw_scanner/heredoc_w_indent_shared_spec.rb +69 -0
- data/spec/raw_scanner/heredoc_wo_indent_shared_spec.rb +70 -0
- data/spec/{proc_scanner/kw_do_alias1_spec.rb → raw_scanner/kw_block_start_alias1_shared_spec.rb} +10 -26
- data/spec/{proc_scanner/kw_do_alias2_spec.rb → raw_scanner/kw_block_start_alias2_shared_spec.rb} +10 -25
- data/spec/{proc_scanner/per_line_comment_spec.rb → raw_scanner/per_line_comment_shared_spec.rb} +1 -5
- data/spec/raw_scanner/shared_specs.rb +3 -0
- data/spec/{proc_scanner/single_quote_str_spec.rb → raw_scanner/single_quote_str_shared_spec.rb} +1 -5
- data/spec/{proc_scanner/slash_operator_spec.rb → raw_scanner/slash_operator_shared_spec.rb} +1 -5
- data/spec/run_spec.sh +7 -1
- data/spec/spec_helper.rb +8 -25
- metadata +204 -47
- data/.rvmrc +0 -1
- data/VERSION +0 -1
- data/lib/sourcify/proc/scanner/comment.rb +0 -21
- data/lib/sourcify/proc/scanner/counter.rb +0 -44
- data/lib/sourcify/proc/scanner/dstring.rb +0 -59
- data/lib/sourcify/proc/scanner/extensions.rb +0 -171
- data/lib/sourcify/proc/scanner/heredoc.rb +0 -24
- data/spec/proc_scanner/heredoc_spec.rb +0 -144
- data/spec/proc_scanner/spec_helper.rb +0 -33
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Sourcify
|
|
2
|
+
module Common
|
|
3
|
+
class Parser
|
|
4
|
+
module RawScanner #:nodoc:all
|
|
5
|
+
class Heredoc < Struct.new(:tag, :indented)
|
|
6
|
+
|
|
7
|
+
def <<(content)
|
|
8
|
+
(@contents ||= []) << content
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def to_s
|
|
12
|
+
@contents.join
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def closed?(sealer)
|
|
16
|
+
return false unless sealer == "\n"
|
|
17
|
+
parts = @contents[-1].split("\n")
|
|
18
|
+
return true if parts[-1] == tag
|
|
19
|
+
indented && parts[-1].sub(/^\s*(.*)$/,'\1') == tag
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Sourcify
|
|
2
|
+
module Common
|
|
3
|
+
class Parser #:nodoc:all
|
|
4
|
+
class SourceCode < Struct.new(:file, :line)
|
|
5
|
+
|
|
6
|
+
def line
|
|
7
|
+
super.pred
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def to_s
|
|
11
|
+
case file
|
|
12
|
+
when /\(irb\)/ then from_irb_to_s
|
|
13
|
+
else from_file_to_s
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def from_file_to_s
|
|
18
|
+
File.open(file, 'r') do |fh|
|
|
19
|
+
fh.extend(File::Tail).forward(line)
|
|
20
|
+
fh.readlines.join
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def from_irb_to_s
|
|
25
|
+
# Really owe it to Florian Groß's solution @ http://rubyquiz.com/quiz38.html ...
|
|
26
|
+
# anyway, note that we use *line.succ* instead of *line* here.
|
|
27
|
+
IRB.CurrentContext.io.line(line.succ .. -1).join
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
%%{
|
|
2
|
+
machine common_expressions;
|
|
3
|
+
|
|
4
|
+
kw_class = 'class';
|
|
5
|
+
kw_module = 'module';
|
|
6
|
+
kw_def = 'def';
|
|
7
|
+
kw_begin = 'begin';
|
|
8
|
+
kw_case = 'case';
|
|
9
|
+
kw_if = 'if';
|
|
10
|
+
kw_unless = 'unless';
|
|
11
|
+
kw_do = 'do';
|
|
12
|
+
kw_then = 'then';
|
|
13
|
+
kw_for = 'for';
|
|
14
|
+
kw_while = 'while';
|
|
15
|
+
kw_until = 'until';
|
|
16
|
+
kw_end = 'end';
|
|
17
|
+
|
|
18
|
+
vchar = alnum | '_';
|
|
19
|
+
const = upper . vchar* . ('::' . alpha . vchar*)*;
|
|
20
|
+
var = (lower | '_') . vchar*;
|
|
21
|
+
meth = (alpha | '_') . vchar*;
|
|
22
|
+
symbol = ':' . (var | const);
|
|
23
|
+
assoc = '=>';
|
|
24
|
+
assgn = '=';
|
|
25
|
+
comma = ',';
|
|
26
|
+
label = (var | const) . ':';
|
|
27
|
+
|
|
28
|
+
lparen = '(';
|
|
29
|
+
rparen = ')';
|
|
30
|
+
lbrace = '{';
|
|
31
|
+
rbrace = '}';
|
|
32
|
+
smcolon = ';';
|
|
33
|
+
newline = '\n';
|
|
34
|
+
bslash = '\\' . newline;
|
|
35
|
+
ospaces = space* -- newline;
|
|
36
|
+
mspaces = space+ -- newline;
|
|
37
|
+
|
|
38
|
+
}%%
|
|
@@ -1,70 +1,8 @@
|
|
|
1
|
-
Sourcify.require_rb('proc', 'scanner', 'extensions')
|
|
2
|
-
|
|
3
|
-
module Sourcify
|
|
4
|
-
module Proc
|
|
5
|
-
module Scanner #:nodoc:all
|
|
6
|
-
|
|
7
1
|
%%{
|
|
8
|
-
machine
|
|
9
|
-
|
|
10
|
-
kw_class = 'class';
|
|
11
|
-
kw_module = 'module';
|
|
12
|
-
kw_def = 'def';
|
|
13
|
-
kw_begin = 'begin';
|
|
14
|
-
kw_case = 'case';
|
|
15
|
-
kw_if = 'if';
|
|
16
|
-
kw_unless = 'unless';
|
|
17
|
-
kw_do = 'do';
|
|
18
|
-
kw_then = 'then';
|
|
19
|
-
kw_for = 'for';
|
|
20
|
-
kw_while = 'while';
|
|
21
|
-
kw_until = 'until';
|
|
22
|
-
kw_end = 'end';
|
|
23
|
-
|
|
24
|
-
vchar = alnum | '_';
|
|
25
|
-
const = upper . vchar* . ('::' . alpha . vchar*)*;
|
|
26
|
-
var = (lower | '_') . vchar*;
|
|
27
|
-
meth = (alpha | '_') . vchar*;
|
|
28
|
-
symbol = ':' . (var | const);
|
|
29
|
-
assoc = '=>';
|
|
30
|
-
assgn = '=';
|
|
31
|
-
comma = ',';
|
|
32
|
-
label = (var | const) . ':';
|
|
2
|
+
machine common_machines;
|
|
33
3
|
|
|
34
|
-
|
|
35
|
-
rparen = ')';
|
|
36
|
-
lbrace = '{';
|
|
37
|
-
rbrace = '}';
|
|
38
|
-
smcolon = ';';
|
|
39
|
-
newline = '\n';
|
|
40
|
-
bslash = '\\' . newline;
|
|
41
|
-
ospaces = space* -- newline;
|
|
42
|
-
mspaces = space+ -- newline;
|
|
43
|
-
|
|
44
|
-
## MACHINE >> New statement
|
|
45
|
-
new_statement := |*
|
|
46
|
-
|
|
47
|
-
(kw_for | kw_while | kw_until) . ^vchar => {
|
|
48
|
-
push(:kw_do_alias2, ts, te)
|
|
49
|
-
increment_counter(:do_end, 0..1)
|
|
50
|
-
fgoto main;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
(
|
|
54
|
-
((kw_class | kw_module | kw_def | kw_begin | kw_case | kw_if | kw_unless) . ^vchar) |
|
|
55
|
-
(kw_class . ospaces . '<<' . ospaces . ^newline+)
|
|
56
|
-
) => {
|
|
57
|
-
push(:kw_do_alias1, ts, te)
|
|
58
|
-
increment_counter(:do_end, 1)
|
|
59
|
-
fgoto main;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
ospaces => { push(:space, ts, te) };
|
|
63
|
-
any => { fhold; fgoto main; };
|
|
64
|
-
|
|
65
|
-
*|;
|
|
4
|
+
## MACHINE >> One-liner comment
|
|
66
5
|
|
|
67
|
-
## MACHINE >> One-liner comment
|
|
68
6
|
per_line_comment := |*
|
|
69
7
|
^newline* => {
|
|
70
8
|
push(:comment, ts.pred, te)
|
|
@@ -72,7 +10,8 @@ module Sourcify
|
|
|
72
10
|
};
|
|
73
11
|
*|;
|
|
74
12
|
|
|
75
|
-
|
|
13
|
+
## MACHINE >> Block comment
|
|
14
|
+
|
|
76
15
|
block_comment := |*
|
|
77
16
|
any* . newline . '=end' . ospaces . ^newline* => {
|
|
78
17
|
unless push_comment(ts, te)
|
|
@@ -81,7 +20,8 @@ module Sourcify
|
|
|
81
20
|
};
|
|
82
21
|
*|;
|
|
83
22
|
|
|
84
|
-
|
|
23
|
+
## MACHINE >> Heredoc
|
|
24
|
+
|
|
85
25
|
heredoc := |*
|
|
86
26
|
^newline* . newline . ospaces . ^newline+ => {
|
|
87
27
|
unless push_heredoc(ts, te)
|
|
@@ -90,7 +30,8 @@ module Sourcify
|
|
|
90
30
|
};
|
|
91
31
|
*|;
|
|
92
32
|
|
|
93
|
-
|
|
33
|
+
## MACHINE >> String
|
|
34
|
+
|
|
94
35
|
string := |*
|
|
95
36
|
|
|
96
37
|
sqm = '%q' | '%w';
|
|
@@ -174,7 +115,8 @@ module Sourcify
|
|
|
174
115
|
};
|
|
175
116
|
*|;
|
|
176
117
|
|
|
177
|
-
|
|
118
|
+
## MACHINES >> Double quote strings
|
|
119
|
+
|
|
178
120
|
dstring1 := |*
|
|
179
121
|
[^\"]*[\"] => {
|
|
180
122
|
unless push_dstring(ts, te)
|
|
@@ -372,114 +314,4 @@ module Sourcify
|
|
|
372
314
|
};
|
|
373
315
|
*|;
|
|
374
316
|
|
|
375
|
-
## MACHINE >> Main
|
|
376
|
-
main := |*
|
|
377
|
-
|
|
378
|
-
## == Start/end of do..end block
|
|
379
|
-
|
|
380
|
-
kw_do => {
|
|
381
|
-
push(:kw_do, ts, te)
|
|
382
|
-
increment_counter(:do_end)
|
|
383
|
-
fgoto new_statement;
|
|
384
|
-
};
|
|
385
|
-
|
|
386
|
-
kw_end => {
|
|
387
|
-
push(:kw_end, ts, te)
|
|
388
|
-
decrement_counter(:do_end)
|
|
389
|
-
};
|
|
390
|
-
|
|
391
|
-
## == Start/end of {...} block
|
|
392
|
-
|
|
393
|
-
lbrace => {
|
|
394
|
-
push(:lbrace, ts, te)
|
|
395
|
-
increment_counter(:brace)
|
|
396
|
-
};
|
|
397
|
-
|
|
398
|
-
rbrace => {
|
|
399
|
-
push(:rbrace, ts, te)
|
|
400
|
-
decrement_counter(:brace)
|
|
401
|
-
};
|
|
402
|
-
|
|
403
|
-
assoc => {
|
|
404
|
-
push(:assoc, ts, te)
|
|
405
|
-
fix_counter_false_start(:brace)
|
|
406
|
-
};
|
|
407
|
-
|
|
408
|
-
label => {
|
|
409
|
-
push_label(ts, te)
|
|
410
|
-
fix_counter_false_start(:brace)
|
|
411
|
-
};
|
|
412
|
-
|
|
413
|
-
## == New statement
|
|
414
|
-
|
|
415
|
-
newline => {
|
|
416
|
-
push(:newline, ts, te)
|
|
417
|
-
increment_lineno
|
|
418
|
-
fgoto new_statement;
|
|
419
|
-
};
|
|
420
|
-
|
|
421
|
-
smcolon | lparen | assgn | kw_then | comma => {
|
|
422
|
-
push(:newline_alias, ts, te)
|
|
423
|
-
fgoto new_statement;
|
|
424
|
-
};
|
|
425
|
-
|
|
426
|
-
## == Comment
|
|
427
|
-
|
|
428
|
-
'#' => {
|
|
429
|
-
fgoto per_line_comment;
|
|
430
|
-
};
|
|
431
|
-
|
|
432
|
-
newline . '=begin' . ospaces . (ospaces . ^newline+)* . newline => {
|
|
433
|
-
push_comment(ts, te)
|
|
434
|
-
increment_lineno
|
|
435
|
-
fgoto block_comment;
|
|
436
|
-
};
|
|
437
|
-
|
|
438
|
-
## == Strings
|
|
439
|
-
|
|
440
|
-
('<<' | '<<-') . ["']? . (const | var) . ["']? . newline => {
|
|
441
|
-
push_heredoc(ts, te)
|
|
442
|
-
increment_lineno
|
|
443
|
-
fgoto heredoc;
|
|
444
|
-
};
|
|
445
|
-
|
|
446
|
-
('"' | "'" | '`' | '%') => {
|
|
447
|
-
fhold; fgoto string;
|
|
448
|
-
};
|
|
449
|
-
|
|
450
|
-
'/' => {
|
|
451
|
-
if preceded_with?(:char, :digit, :var, :const, :symbol, :dstring, :sstring, ')', ']', '}')
|
|
452
|
-
push(:op, ts, te)
|
|
453
|
-
else
|
|
454
|
-
fhold; fgoto string;
|
|
455
|
-
end
|
|
456
|
-
};
|
|
457
|
-
|
|
458
|
-
## == Misc
|
|
459
|
-
|
|
460
|
-
var => { push(:var, ts, te) };
|
|
461
|
-
bslash => { push(:bslash, ts, te) };
|
|
462
|
-
const => { push(:const, ts, te) };
|
|
463
|
-
symbol => { push(:symbol, ts, te) };
|
|
464
|
-
mspaces => { push(:space, ts, te) };
|
|
465
|
-
[0-9] => { push(:digit, ts, te) };
|
|
466
|
-
lower => { push(:char, ts, te) };
|
|
467
|
-
any => { push(:any, ts, te) };
|
|
468
|
-
|
|
469
|
-
*|;
|
|
470
|
-
|
|
471
317
|
}%%
|
|
472
|
-
%% write data;
|
|
473
|
-
|
|
474
|
-
extend Scanner::Extensions
|
|
475
|
-
|
|
476
|
-
def self.execute!
|
|
477
|
-
data = @data
|
|
478
|
-
eof = data.length
|
|
479
|
-
%% write init;
|
|
480
|
-
%% write exec;
|
|
481
|
-
end
|
|
482
|
-
|
|
483
|
-
end
|
|
484
|
-
end
|
|
485
|
-
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
module Sourcify
|
|
2
|
+
|
|
3
|
+
class MultipleMatchingMethodsPerLineError < Exception; end
|
|
4
|
+
class NoMatchingMethodError < Exception; end
|
|
5
|
+
class CannotFindSourceLocationError < Exception; end
|
|
6
|
+
class PlatformNotSupportedError < Exception; end
|
|
7
|
+
|
|
8
|
+
IS_PLATFORM_SUPPORTED =
|
|
9
|
+
begin
|
|
10
|
+
[:source_location, :parameters].each{|meth| 1.method(:to_s).send(meth) }
|
|
11
|
+
raise PlatformNotSupportedError if RUBY_PLATFORM =~ /java/i
|
|
12
|
+
true
|
|
13
|
+
rescue NoMethodError, PlatformNotSupportedError
|
|
14
|
+
false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
module Method
|
|
18
|
+
|
|
19
|
+
def self.included(base) #:nodoc:
|
|
20
|
+
base.class_eval do
|
|
21
|
+
Sourcify.require_rb('method', 'methods')
|
|
22
|
+
include Methods::ToSource
|
|
23
|
+
include Methods::ToSexp
|
|
24
|
+
include Methods::ToRawSource
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
module Stubs
|
|
29
|
+
|
|
30
|
+
###
|
|
31
|
+
# Returns the code representation of this method. Unlike Method#to_raw_source,
|
|
32
|
+
# the returned code retains only the functional aspects, fluff like comments
|
|
33
|
+
# are stripped off.
|
|
34
|
+
#
|
|
35
|
+
# class MyMath
|
|
36
|
+
# def self.sum(x, y)
|
|
37
|
+
# x + y # (blah)
|
|
38
|
+
# end
|
|
39
|
+
# end
|
|
40
|
+
#
|
|
41
|
+
# MyMath.method(:sum).to_source
|
|
42
|
+
# # >> "def sum(x, y)
|
|
43
|
+
# # >> (x + y)
|
|
44
|
+
# # >> end"
|
|
45
|
+
#
|
|
46
|
+
# This works for method defined via Module#define_method as well. The following
|
|
47
|
+
# approach of defining method yields exactly the same result as above:
|
|
48
|
+
#
|
|
49
|
+
# class MyMath
|
|
50
|
+
# class << self
|
|
51
|
+
# define_method(:sum) do |x,y|
|
|
52
|
+
# x + y # (blah)
|
|
53
|
+
# end
|
|
54
|
+
# end
|
|
55
|
+
# end
|
|
56
|
+
#
|
|
57
|
+
# MyMath.method(:sum).to_source
|
|
58
|
+
# # >> "def sum(x, y)
|
|
59
|
+
# # >> (x + y)
|
|
60
|
+
# # >> end"
|
|
61
|
+
#
|
|
62
|
+
# The following options are supported:
|
|
63
|
+
#
|
|
64
|
+
# * +:strip_enclosure+ when set to true, strips the method enclosure to get
|
|
65
|
+
# just the meat within.
|
|
66
|
+
#
|
|
67
|
+
# MyMath.method(:sum).to_source(:strip_enclosure => true)
|
|
68
|
+
# # >> "(x + y)"
|
|
69
|
+
#
|
|
70
|
+
# * +:attached_to+ is useful ONLY when a method is defined via
|
|
71
|
+
# Module#define_method, pls see Sourcify::Proc::Stubs#to_source for more info.
|
|
72
|
+
#
|
|
73
|
+
# * +:ignore_nested+ is useful ONLY when a method is defined via
|
|
74
|
+
# Module#define_method, pls see Sourcify::Proc::Stubs#to_source for more info.
|
|
75
|
+
#
|
|
76
|
+
# * an optional +body_matcher+ block is supported as well, again this is ONLY
|
|
77
|
+
# useful for method defined via Module#define_method, pls see
|
|
78
|
+
# Sourcify::Proc::Stubs#to_source for more info.
|
|
79
|
+
#
|
|
80
|
+
def to_source(opts={}, &body_matcher)
|
|
81
|
+
# NOTE: this is a stub for the actual one in Methods::ToSource
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
###
|
|
85
|
+
# Returns the S-expression representation of this method.
|
|
86
|
+
#
|
|
87
|
+
# class MyMath
|
|
88
|
+
# def self.sum(x, y)
|
|
89
|
+
# x + y # (blah)
|
|
90
|
+
# end
|
|
91
|
+
# end
|
|
92
|
+
#
|
|
93
|
+
# MyMath.method(:sum).to_sexp
|
|
94
|
+
# >> s(:defn,
|
|
95
|
+
# >> :sum,
|
|
96
|
+
# >> s(:args, :x, :y),
|
|
97
|
+
# >> s(:scope, s(:block, s(:call, s(:lvar, :x), :+, s(:arglist, s(:lvar, :y))))))
|
|
98
|
+
#
|
|
99
|
+
# This works for methods defined via Module#define_method as well. Pls see
|
|
100
|
+
# #to_source for options/arguments supported.
|
|
101
|
+
#
|
|
102
|
+
def to_sexp(opts={}, &body_matcher)
|
|
103
|
+
# NOTE: this is a stub for the actual one in Methods::ToSexp
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
###
|
|
107
|
+
# Returns the raw code enclosed within this method.
|
|
108
|
+
#
|
|
109
|
+
# class MyMath
|
|
110
|
+
# def self.sum(x, y)
|
|
111
|
+
# x + y # (blah)
|
|
112
|
+
# end
|
|
113
|
+
# end
|
|
114
|
+
#
|
|
115
|
+
# MyMath.method(:sum).to_raw_source
|
|
116
|
+
# >> "def sum(x, y)
|
|
117
|
+
# >> x + y # (blah)
|
|
118
|
+
# >> end"
|
|
119
|
+
#
|
|
120
|
+
# This works for methods defined via Module#define_method as well. Pls see
|
|
121
|
+
# #to_source for options/arguments supported.
|
|
122
|
+
#
|
|
123
|
+
def to_raw_source(opts={}, &body_matcher)
|
|
124
|
+
# NOTE: this is a stub for the actual one in Methods::ToRawSource
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
Method.class_eval do
|
|
133
|
+
include Sourcify::Method
|
|
134
|
+
end
|