Class: RubyNext::Language::Rewriters::ArgsForward
- Inherits:
-
Base
- Object
- Parser::TreeRewriter
- Abstract
- Base
- RubyNext::Language::Rewriters::ArgsForward
show all
- Defined in:
- lib/ruby-next/language/rewriters/2.7/args_forward.rb
Constant Summary
collapse
- NAME =
"args-forward"
- SYNTAX_PROBE =
"obj = Object.new; def obj.foo(...) super(...); end"
- MIN_SUPPORTED_VERSION =
Gem::Version.new("2.7.0")
- REST =
:__rest__
- BLOCK =
:__block__
Instance Attribute Summary
Attributes inherited from Base
#locals
Instance Method Summary
collapse
Methods inherited from Base
ast?, #initialize, #s
Methods inherited from Abstract
ast?, #initialize, text?, unsupported_syntax?, unsupported_version?
Instance Method Details
#on_args(node) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/ruby-next/language/rewriters/2.7/args_forward.rb', line 14
def on_args(node)
farg = node.children.find { |child| child.is_a?(::Parser::AST::Node) && child.type == :forward_arg }
return unless farg
context.track! self
node = super(node)
replace(farg.loc.expression, "*#{REST}, &#{BLOCK}")
node.updated(
:args,
[
*node.children.slice(0, node.children.index(farg)),
s(:restarg, REST),
s(:blockarg, BLOCK)
]
)
end
|
#on_def(node) ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/ruby-next/language/rewriters/2.7/args_forward.rb', line 48
def on_def(node)
return super unless forward_arg?(node.children[1])
new_node = super
name = node.children[0]
insert_after(node.loc.expression, "; respond_to?(:ruby2_keywords, true) && (ruby2_keywords :#{name})")
s(:begin,
new_node,
ruby2_keywords_node(nil, name))
end
|
#on_defs(node) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/ruby-next/language/rewriters/2.7/args_forward.rb', line 62
def on_defs(node)
return super unless forward_arg?(node.children[2])
new_node = super
receiver = node.children[0]
name = node.children[1]
receiver = s(:send, nil, :singleton_class) if receiver.type == :self
receiver_name =
case receiver.type
when :send
receiver.children[1]
when :const
receiver.children[1]
end
insert_after(node.loc.expression, "; #{receiver_name}.respond_to?(:ruby2_keywords, true) && (#{receiver_name}.send(:ruby2_keywords, :#{name}))")
s(:begin,
new_node,
ruby2_keywords_node(receiver, name))
end
|
#on_send(node) ⇒ Object
34
35
36
37
38
39
|
# File 'lib/ruby-next/language/rewriters/2.7/args_forward.rb', line 34
def on_send(node)
fargs = (node)
return super(node) unless fargs
process_fargs(node, fargs)
end
|
#on_super(node) ⇒ Object
41
42
43
44
45
46
|
# File 'lib/ruby-next/language/rewriters/2.7/args_forward.rb', line 41
def on_super(node)
fargs = (node)
return super(node) unless fargs
process_fargs(node, fargs)
end
|