codeminer 0.1.0
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/codeminer.gemspec +28 -0
- data/lib/codeminer.rb +112 -0
- data/lib/codeminer/expression_processor.rb +29 -0
- data/lib/codeminer/expressions/alias_expression.rb +23 -0
- data/lib/codeminer/expressions/ambiguous_operator_expression.rb +27 -0
- data/lib/codeminer/expressions/aref_assign_expression.rb +23 -0
- data/lib/codeminer/expressions/aref_field_expression.rb +28 -0
- data/lib/codeminer/expressions/arguments_expression.rb +29 -0
- data/lib/codeminer/expressions/array_expression.rb +22 -0
- data/lib/codeminer/expressions/attribute_assign_expression.rb +35 -0
- data/lib/codeminer/expressions/backref_variable_expression.rb +22 -0
- data/lib/codeminer/expressions/begin_expression.rb +38 -0
- data/lib/codeminer/expressions/binary_expression.rb +31 -0
- data/lib/codeminer/expressions/block_expression.rb +24 -0
- data/lib/codeminer/expressions/block_param_expression.rb +24 -0
- data/lib/codeminer/expressions/body_expression.rb +35 -0
- data/lib/codeminer/expressions/bodystmt_expression.rb +25 -0
- data/lib/codeminer/expressions/break_expression.rb +22 -0
- data/lib/codeminer/expressions/call_expression.rb +35 -0
- data/lib/codeminer/expressions/case_expression.rb +27 -0
- data/lib/codeminer/expressions/class_expression.rb +28 -0
- data/lib/codeminer/expressions/class_variable_assign_expression.rb +27 -0
- data/lib/codeminer/expressions/class_variable_expression.rb +22 -0
- data/lib/codeminer/expressions/colon2_assign_expression.rb +23 -0
- data/lib/codeminer/expressions/colon2_expression.rb +27 -0
- data/lib/codeminer/expressions/colon3_assign_expression.rb +23 -0
- data/lib/codeminer/expressions/colon3_expression.rb +26 -0
- data/lib/codeminer/expressions/command_expression.rb +30 -0
- data/lib/codeminer/expressions/condition_expression.rb +25 -0
- data/lib/codeminer/expressions/constant_assign_expression.rb +27 -0
- data/lib/codeminer/expressions/constant_variable_expression.rb +24 -0
- data/lib/codeminer/expressions/defined_expression.rb +22 -0
- data/lib/codeminer/expressions/defn_expression.rb +24 -0
- data/lib/codeminer/expressions/defs_expression.rb +29 -0
- data/lib/codeminer/expressions/destructured_param_expression.rb +24 -0
- data/lib/codeminer/expressions/dynamic_string_expression.rb +36 -0
- data/lib/codeminer/expressions/dynamic_symbol_expression.rb +22 -0
- data/lib/codeminer/expressions/else_expression.rb +26 -0
- data/lib/codeminer/expressions/empty_expression.rb +19 -0
- data/lib/codeminer/expressions/ensure_expression.rb +22 -0
- data/lib/codeminer/expressions/expression.rb +24 -0
- data/lib/codeminer/expressions/expression_container.rb +41 -0
- data/lib/codeminer/expressions/false_expression.rb +22 -0
- data/lib/codeminer/expressions/field_expression.rb +27 -0
- data/lib/codeminer/expressions/for_expression.rb +24 -0
- data/lib/codeminer/expressions/global_variable_assign_expression.rb +27 -0
- data/lib/codeminer/expressions/global_variable_expression.rb +22 -0
- data/lib/codeminer/expressions/hash_expression.rb +22 -0
- data/lib/codeminer/expressions/hash_pair_expression.rb +23 -0
- data/lib/codeminer/expressions/instance_variable_assign_expression.rb +27 -0
- data/lib/codeminer/expressions/instance_variable_expression.rb +22 -0
- data/lib/codeminer/expressions/int_expression.rb +24 -0
- data/lib/codeminer/expressions/keyword_param_expression.rb +31 -0
- data/lib/codeminer/expressions/lambda_expression.rb +25 -0
- data/lib/codeminer/expressions/local_assign_expression.rb +35 -0
- data/lib/codeminer/expressions/local_variable_expression.rb +24 -0
- data/lib/codeminer/expressions/magic_comment_expression.rb +23 -0
- data/lib/codeminer/expressions/module_expression.rb +27 -0
- data/lib/codeminer/expressions/multiple_assignment_expression.rb +25 -0
- data/lib/codeminer/expressions/next_expression.rb +22 -0
- data/lib/codeminer/expressions/nil_expression.rb +22 -0
- data/lib/codeminer/expressions/op_assign_expression.rb +26 -0
- data/lib/codeminer/expressions/optional_param_expression.rb +31 -0
- data/lib/codeminer/expressions/params_expression.rb +67 -0
- data/lib/codeminer/expressions/positional_param_expression.rb +32 -0
- data/lib/codeminer/expressions/range_expression.rb +28 -0
- data/lib/codeminer/expressions/redo_expression.rb +21 -0
- data/lib/codeminer/expressions/regexp_expression.rb +26 -0
- data/lib/codeminer/expressions/rescue_body_expression.rb +22 -0
- data/lib/codeminer/expressions/rescue_expression.rb +25 -0
- data/lib/codeminer/expressions/retry_expression.rb +21 -0
- data/lib/codeminer/expressions/return_expression.rb +26 -0
- data/lib/codeminer/expressions/root_expression.rb +22 -0
- data/lib/codeminer/expressions/sclass_expression.rb +23 -0
- data/lib/codeminer/expressions/self_expression.rb +22 -0
- data/lib/codeminer/expressions/splat_expression.rb +24 -0
- data/lib/codeminer/expressions/string_content_expression.rb +29 -0
- data/lib/codeminer/expressions/string_embedded_expression.rb +22 -0
- data/lib/codeminer/expressions/string_expression.rb +45 -0
- data/lib/codeminer/expressions/super_expression.rb +26 -0
- data/lib/codeminer/expressions/symbol_expression.rb +32 -0
- data/lib/codeminer/expressions/true_expression.rb +22 -0
- data/lib/codeminer/expressions/unary_expression.rb +23 -0
- data/lib/codeminer/expressions/undef_expression.rb +22 -0
- data/lib/codeminer/expressions/unknown_expression.rb +35 -0
- data/lib/codeminer/expressions/until_expression.rb +23 -0
- data/lib/codeminer/expressions/variable_expression.rb +20 -0
- data/lib/codeminer/expressions/void_expression.rb +21 -0
- data/lib/codeminer/expressions/when_expression.rb +24 -0
- data/lib/codeminer/expressions/while_expression.rb +23 -0
- data/lib/codeminer/expressions/xstring_expression.rb +24 -0
- data/lib/codeminer/expressions/yield_expression.rb +22 -0
- data/lib/codeminer/parser.rb +215 -0
- data/lib/codeminer/processors/argument_processor.rb +25 -0
- data/lib/codeminer/processors/array_processor.rb +86 -0
- data/lib/codeminer/processors/assignment_processor.rb +42 -0
- data/lib/codeminer/processors/binary_processor.rb +12 -0
- data/lib/codeminer/processors/call_processor.rb +32 -0
- data/lib/codeminer/processors/class_processor.rb +19 -0
- data/lib/codeminer/processors/command_processor.rb +15 -0
- data/lib/codeminer/processors/condition_processor.rb +59 -0
- data/lib/codeminer/processors/default_processor.rb +33 -0
- data/lib/codeminer/processors/hash_processor.rb +27 -0
- data/lib/codeminer/processors/loop_processor.rb +30 -0
- data/lib/codeminer/processors/method_processor.rb +58 -0
- data/lib/codeminer/processors/params_processor.rb +97 -0
- data/lib/codeminer/processors/range_processor.rb +15 -0
- data/lib/codeminer/processors/regexp_processor.rb +27 -0
- data/lib/codeminer/processors/return_processor.rb +15 -0
- data/lib/codeminer/processors/string_processor.rb +79 -0
- data/lib/codeminer/processors/symbol_processor.rb +31 -0
- data/lib/codeminer/processors/token_processor.rb +41 -0
- data/lib/codeminer/processors/variable_processor.rb +70 -0
- data/lib/codeminer/source_extract.rb +120 -0
- data/lib/codeminer/substitution.rb +48 -0
- data/lib/codeminer/token.rb +19 -0
- metadata +172 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module ArgumentProcessor
|
4
|
+
|
5
|
+
def on_args_new
|
6
|
+
ArgumentsExpression.new(SourceExtract::Partial.new(@src, lineno(), column()))
|
7
|
+
end
|
8
|
+
|
9
|
+
def on_args_add_block(exp, block)
|
10
|
+
exp.block = block
|
11
|
+
exp
|
12
|
+
end
|
13
|
+
|
14
|
+
def on_args_add(args, exp)
|
15
|
+
args.adjust_src(exp.src_extract)
|
16
|
+
args.add(exp)
|
17
|
+
end
|
18
|
+
|
19
|
+
def on_args_add_star(args, exp)
|
20
|
+
args.add(SplatExpression.new(exp, extract_src(exp.line, exp.column - 1, exp.end_line, exp.end_column)))
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module ArrayProcessor
|
4
|
+
|
5
|
+
def on_array(args)
|
6
|
+
ArrayExpression.new(args, extract_src_from_args(args))
|
7
|
+
end
|
8
|
+
|
9
|
+
def on_qwords_new
|
10
|
+
ArgumentsExpression.new(SourceExtract::Partial.new(@src, lineno(), column()), @qwords.pop)
|
11
|
+
end
|
12
|
+
|
13
|
+
def on_qwords_add(args, str)
|
14
|
+
args.add(str)
|
15
|
+
end
|
16
|
+
|
17
|
+
def on_qsymbols_new
|
18
|
+
ArgumentsExpression.new(SourceExtract::Partial.new(@src, lineno(), column()), @qsymbols.pop)
|
19
|
+
end
|
20
|
+
|
21
|
+
def on_qsymbols_add(args, string)
|
22
|
+
args.add(SymbolExpression.convert(string))
|
23
|
+
end
|
24
|
+
|
25
|
+
def on_symbols_new
|
26
|
+
ArgumentsExpression.new(SourceExtract::Partial.new(@src, lineno(), column()), @symbols.pop)
|
27
|
+
end
|
28
|
+
|
29
|
+
def on_symbols_add(args, string)
|
30
|
+
args.add(SymbolExpression.convert(string))
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_word_add(words, word)
|
34
|
+
word
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_word_new
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def on_words_add(words, word)
|
42
|
+
words.add(StringExpression.convert(word))
|
43
|
+
end
|
44
|
+
|
45
|
+
def on_words_new
|
46
|
+
ArgumentsExpression.new(SourceExtract::Partial.new(@src, lineno(), column()), @words.pop)
|
47
|
+
end
|
48
|
+
|
49
|
+
def on_qwords_beg(*)
|
50
|
+
super.tap do |token|
|
51
|
+
@qwords << token
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def on_qsymbols_beg(*)
|
56
|
+
super.tap do |token|
|
57
|
+
@qsymbols << token
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def on_symbols_beg(*)
|
62
|
+
super.tap do |token|
|
63
|
+
@symbols << token
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def on_words_beg(*)
|
68
|
+
super.tap do |token|
|
69
|
+
@words << token
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def extract_src_from_args(args)
|
76
|
+
if args
|
77
|
+
size = args.token ? args.token.value.length : 1
|
78
|
+
extract_src(args.line, args.column - size)
|
79
|
+
else
|
80
|
+
extract_src(lineno(), column() - 2)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module AssignmentProcessor
|
4
|
+
|
5
|
+
def on_assign(exp, body)
|
6
|
+
klass = case exp.type
|
7
|
+
when :local_variable
|
8
|
+
LocalAssignExpression
|
9
|
+
when :global_variable
|
10
|
+
GlobalVariableAssignExpression
|
11
|
+
when :instance_variable
|
12
|
+
InstanceVariableAssignExpression
|
13
|
+
when :class_variable
|
14
|
+
ClassVariableAssignExpression
|
15
|
+
when :field
|
16
|
+
AttributeAssignExpression
|
17
|
+
when :constant
|
18
|
+
ConstantAssignExpression
|
19
|
+
when :aref_field
|
20
|
+
ArefAssignExpression
|
21
|
+
when :colon2
|
22
|
+
Colon2AssignExpression
|
23
|
+
when :colon3
|
24
|
+
Colon3AssignExpression
|
25
|
+
else
|
26
|
+
assert(false, "#{exp.type} is not a valid assignment")
|
27
|
+
end
|
28
|
+
klass.new(exp, body, extract_src_by_tokens(exp, body))
|
29
|
+
end
|
30
|
+
|
31
|
+
def on_massign(container, values)
|
32
|
+
value_container = ExpressionContainer.wrap(values, :values)
|
33
|
+
MultipleAssignmentExpression.new(container, value_container, extract_src_by_tokens(container, values))
|
34
|
+
end
|
35
|
+
|
36
|
+
def on_opassign(variable, op, body)
|
37
|
+
OpAssignExpression.new(variable, op, body, extract_src_by_tokens(variable, body))
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module CallProcessor
|
4
|
+
|
5
|
+
def on_vcall(token)
|
6
|
+
CallExpression.new(token, extract_src_by_token(token, token.line, token.end_column))
|
7
|
+
end
|
8
|
+
|
9
|
+
def on_call(receiver, delimiter, token)
|
10
|
+
if token == :call
|
11
|
+
token = Token.new(:ident, token.to_s, extract_src_by_value(delimiter))
|
12
|
+
end
|
13
|
+
receiver.delimiter = delimiter
|
14
|
+
CallExpression.new(token, extract_src_by_tokens(receiver, token), receiver: receiver)
|
15
|
+
end
|
16
|
+
|
17
|
+
def on_fcall(token)
|
18
|
+
CallExpression.new(token, extract_src_by_token(token))
|
19
|
+
end
|
20
|
+
|
21
|
+
def on_aref(receiver, args)
|
22
|
+
args.src = extract_src(@lbracket.line, @lbracket.column + 1, lineno(), column() - 1)
|
23
|
+
CallExpression.new(@lbracket, extract_src_by_token(receiver), receiver: receiver, arguments: args)
|
24
|
+
end
|
25
|
+
|
26
|
+
def on_aref_field(receiver, args)
|
27
|
+
ArefFieldExpression.new(@lbracket, receiver, args, extract_src_by_tokens(receiver, args))
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module ClassProcessor
|
4
|
+
|
5
|
+
def on_class(token, parent, body)
|
6
|
+
ClassExpression.new(token, parent, body, extract_src_by_token(pop_keyword('class')))
|
7
|
+
end
|
8
|
+
|
9
|
+
def on_sclass(context, body)
|
10
|
+
SClassExpression.new(context, body, extract_src_by_token(pop_keyword('class')))
|
11
|
+
end
|
12
|
+
|
13
|
+
def on_module(token, body)
|
14
|
+
ModuleExpression.new(token, body, extract_src_by_token(pop_keyword('module')))
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module CommandProcessor
|
4
|
+
|
5
|
+
def on_command(token, args)
|
6
|
+
CommandExpression.new(token, args, extract_src_by_tokens(token, args))
|
7
|
+
end
|
8
|
+
|
9
|
+
def on_command_call(receiver, delimiter, token, args)
|
10
|
+
CommandExpression.new(token, args, extract_src_by_tokens(receiver, args), receiver)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module ConditionProcessor
|
4
|
+
|
5
|
+
def on_if(test, consequence, else_statement)
|
6
|
+
token = pop_keyword('if')
|
7
|
+
ConditionExpression.new(test, consequence, else_statement, token, extract_src_by_token(token))
|
8
|
+
end
|
9
|
+
|
10
|
+
def on_elsif(test, consequence, else_statement)
|
11
|
+
token = pop_keyword('elsif')
|
12
|
+
ConditionExpression.new(test, consequence, else_statement, token, extract_src_by_token(token))
|
13
|
+
end
|
14
|
+
|
15
|
+
def on_unless(test, consequence, else_statement)
|
16
|
+
token = pop_keyword('unless')
|
17
|
+
ConditionExpression.new(test, else_statement, consequence, token, extract_src_by_token(token))
|
18
|
+
end
|
19
|
+
|
20
|
+
def on_else(body)
|
21
|
+
ElseExpression.new(body, extract_src_by_tokens(pop_keyword('else'), body))
|
22
|
+
end
|
23
|
+
|
24
|
+
def on_if_mod(test, consequence)
|
25
|
+
consequence_body = BodyExpression.from(consequence)
|
26
|
+
ConditionExpression.new(test, consequence_body, nil, pop_keyword('if'), extract_src(consequence.line, consequence.column))
|
27
|
+
end
|
28
|
+
|
29
|
+
def on_unless_mod(test, else_expression)
|
30
|
+
else_body = BodyExpression.from(else_expression)
|
31
|
+
ConditionExpression.new(test, nil, else_body, pop_keyword('unless'), extract_src_by_token(else_expression))
|
32
|
+
end
|
33
|
+
|
34
|
+
def on_ifop(test, consequence, else_statement)
|
35
|
+
ConditionExpression.new(test, BodyExpression.from(consequence), BodyExpression.from(else_statement), nil, extract_src_by_tokens(test, else_statement))
|
36
|
+
end
|
37
|
+
|
38
|
+
def on_case(test, whens)
|
39
|
+
CaseExpression.new(test, extract_whens(whens), extract_src_by_token(pop_keyword('case')))
|
40
|
+
end
|
41
|
+
|
42
|
+
def on_when(arg, body, else_exp)
|
43
|
+
WhenExpression.new(arg, body, else_exp, extract_src_by_tokens(pop_keyword('when'), body))
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def extract_whens(when_exp)
|
49
|
+
[when_exp].tap do |whens|
|
50
|
+
until when_exp.else.nil? || when_exp.else.type == :else
|
51
|
+
whens << when_exp.else
|
52
|
+
when_exp = when_exp.else
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
require 'ripper'
|
4
|
+
|
5
|
+
module DefaultProcessor
|
6
|
+
|
7
|
+
Ripper::SCANNER_EVENTS.each do |event|
|
8
|
+
define_method :"on_#{event}" do |value|
|
9
|
+
Token.new(event.to_sym, value, extract_src_by_value(value))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Ripper::PARSER_EVENT_TABLE.each do |event, arity|
|
14
|
+
next if event == :parse_error
|
15
|
+
if /_new\z/ =~ event.to_s and arity == 0
|
16
|
+
define_method :"on_#{event}" do
|
17
|
+
[]
|
18
|
+
end
|
19
|
+
elsif /_add\z/ =~ event.to_s
|
20
|
+
define_method :"on_#{event}" do |list, item|
|
21
|
+
list.tap { |l| l << item }
|
22
|
+
end
|
23
|
+
else
|
24
|
+
define_method :"on_#{event}" do |*args|
|
25
|
+
src = extract_src_by_token(args.first) if args.first
|
26
|
+
UnknownExpression.new(event.to_sym, nil, src, [], lineno(), column())
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module HashProcessor
|
4
|
+
|
5
|
+
def on_hash(pairs)
|
6
|
+
HashExpression.new(pairs.to_a, extract_src_by_token(@lbrace.pop))
|
7
|
+
end
|
8
|
+
|
9
|
+
def on_bare_assoc_hash(pairs)
|
10
|
+
HashExpression.new(pairs.to_a, extract_src_by_tokens(pairs.first, pairs.last))
|
11
|
+
end
|
12
|
+
|
13
|
+
def on_assoclist_from_args(pairs)
|
14
|
+
pairs
|
15
|
+
end
|
16
|
+
|
17
|
+
def on_assoc_new(key, value)
|
18
|
+
HashPairExpression.new(key, value, extract_src_by_token(key, value.end_line, value.end_column))
|
19
|
+
end
|
20
|
+
|
21
|
+
def on_label(value)
|
22
|
+
Token.new(:symbol, value.chomp(':'), extract_src_by_value(value))
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module LoopProcessor
|
4
|
+
|
5
|
+
def on_until_mod(test, body)
|
6
|
+
pop_keyword('until')
|
7
|
+
UntilExpression.new(test, body, extract_src_by_token(body))
|
8
|
+
end
|
9
|
+
|
10
|
+
def on_until(test, body)
|
11
|
+
UntilExpression.new(test, body, extract_src_by_token(pop_keyword('until')))
|
12
|
+
end
|
13
|
+
|
14
|
+
def on_while(test, body)
|
15
|
+
WhileExpression.new(test, body, extract_src_by_token(pop_keyword('while')))
|
16
|
+
end
|
17
|
+
|
18
|
+
def on_while_mod(test, body)
|
19
|
+
pop_keyword('while')
|
20
|
+
WhileExpression.new(test, body, extract_src_by_token(body))
|
21
|
+
end
|
22
|
+
|
23
|
+
def on_for(params, receiver, body)
|
24
|
+
params_container = ExpressionContainer.wrap(params, :positional)
|
25
|
+
ForExpression.new(params_container, receiver, body, extract_src_by_token(pop_keyword('for')))
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module CodeMiner
|
2
|
+
|
3
|
+
module MethodProcessor
|
4
|
+
|
5
|
+
def on_defs(receiver, delimiter, token, params, body)
|
6
|
+
DefsExpression.new(receiver, token, params, body, extract_src_by_token(pop_keyword('def')))
|
7
|
+
end
|
8
|
+
|
9
|
+
def on_def(token, params, body)
|
10
|
+
DefnExpression.new(token.value, params, body, extract_src_by_token(pop_keyword('def')))
|
11
|
+
end
|
12
|
+
|
13
|
+
def on_method_add_block(exp, block)
|
14
|
+
exp.block = block
|
15
|
+
exp.adjust_src(block.src_extract)
|
16
|
+
exp
|
17
|
+
end
|
18
|
+
|
19
|
+
def on_method_add_arg(exp, args)
|
20
|
+
if args
|
21
|
+
exp.args = args
|
22
|
+
exp.adjust_src(extract_src_by_tokens(exp, args))
|
23
|
+
end
|
24
|
+
exp
|
25
|
+
end
|
26
|
+
|
27
|
+
def on_arg_paren(args)
|
28
|
+
args ||= ArgumentsExpression.new
|
29
|
+
args.src = extract_src_by_token(@parens_begin.pop)
|
30
|
+
args
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_brace_block(params, body)
|
34
|
+
BlockExpression.new(body, params, extract_src_by_token(@lbrace.pop))
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_do_block(params, body)
|
38
|
+
BlockExpression.new(body, params, extract_src_by_token(pop_keyword('do')))
|
39
|
+
end
|
40
|
+
|
41
|
+
def on_lambda(args, body)
|
42
|
+
LambdaExpression.new(args, body, extract_src_by_token(@lambda.pop))
|
43
|
+
end
|
44
|
+
|
45
|
+
def on_blockarg(token)
|
46
|
+
token.column -= 1
|
47
|
+
BlockParamExpression.new(token, extract_src_by_tokens(token))
|
48
|
+
end
|
49
|
+
|
50
|
+
def on_tlambda(*)
|
51
|
+
super.tap do |token|
|
52
|
+
@lambda << token
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|