1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293
|
# frozen_string_literal: true
module Parser
module AST
##
# @api public
#
class Processor
include ::AST::Processor::Mixin
def process_regular_node(node)
node.updated(nil, process_all(node))
end
alias on_dstr process_regular_node
alias on_dsym process_regular_node
alias on_regexp process_regular_node
alias on_xstr process_regular_node
alias on_splat process_regular_node
alias on_kwsplat process_regular_node
alias on_array process_regular_node
alias on_pair process_regular_node
alias on_hash process_regular_node
alias on_kwargs process_regular_node
alias on_irange process_regular_node
alias on_erange process_regular_node
def on_var(node)
node
end
# @private
def process_variable_node(node)
on_var(node)
end
alias on_lvar process_variable_node
alias on_ivar process_variable_node
alias on_gvar process_variable_node
alias on_cvar process_variable_node
alias on_back_ref process_variable_node
alias on_nth_ref process_variable_node
def on_vasgn(node)
name, value_node = *node
if !value_node.nil?
node.updated(nil, [
name, process(value_node)
])
else
node
end
end
# @private
def process_var_asgn_node(node)
on_vasgn(node)
end
alias on_lvasgn process_var_asgn_node
alias on_ivasgn process_var_asgn_node
alias on_gvasgn process_var_asgn_node
alias on_cvasgn process_var_asgn_node
alias on_and_asgn process_regular_node
alias on_or_asgn process_regular_node
def on_op_asgn(node)
var_node, method_name, value_node = *node
node.updated(nil, [
process(var_node), method_name, process(value_node)
])
end
alias on_mlhs process_regular_node
alias on_masgn process_regular_node
def on_const(node)
scope_node, name = *node
node.updated(nil, [
process(scope_node), name
])
end
def on_casgn(node)
scope_node, name, value_node = *node
if !value_node.nil?
node.updated(nil, [
process(scope_node), name, process(value_node)
])
else
node.updated(nil, [
process(scope_node), name
])
end
end
alias on_args process_regular_node
def on_argument(node)
arg_name, value_node = *node
if !value_node.nil?
node.updated(nil, [
arg_name, process(value_node)
])
else
node
end
end
# @private
def process_argument_node(node)
on_argument(node)
end
alias on_arg process_argument_node
alias on_optarg process_argument_node
alias on_restarg process_argument_node
alias on_blockarg process_argument_node
alias on_shadowarg process_argument_node
alias on_kwarg process_argument_node
alias on_kwoptarg process_argument_node
alias on_kwrestarg process_argument_node
alias on_forward_arg process_argument_node
def on_procarg0(node)
if node.children[0].is_a?(Symbol)
# This branch gets executed when the builder
# is not configured to emit and 'arg' inside 'procarg0', i.e. when
# Parser::Builders::Default.emit_arg_inside_procarg0
# is set to false.
#
# If this flag is set to true this branch is unreachable.
# s(:procarg0, :a)
on_argument(node)
else
# s(:procarg0, s(:arg, :a), s(:arg, :b))
process_regular_node(node)
end
end
alias on_arg_expr process_regular_node
alias on_restarg_expr process_regular_node
alias on_blockarg_expr process_regular_node
alias on_block_pass process_regular_node
alias on_forwarded_restarg process_regular_node
alias on_forwarded_kwrestarg process_regular_node
alias on_module process_regular_node
alias on_class process_regular_node
alias on_sclass process_regular_node
def on_def(node)
name, args_node, body_node = *node
node.updated(nil, [
name,
process(args_node), process(body_node)
])
end
def on_defs(node)
definee_node, name, args_node, body_node = *node
node.updated(nil, [
process(definee_node), name,
process(args_node), process(body_node)
])
end
alias on_undef process_regular_node
alias on_alias process_regular_node
def on_send(node)
receiver_node, method_name, *arg_nodes = *node
receiver_node = process(receiver_node) if receiver_node
node.updated(nil, [
receiver_node, method_name, *process_all(arg_nodes)
])
end
alias on_csend on_send
alias on_index process_regular_node
alias on_indexasgn process_regular_node
alias on_block process_regular_node
alias on_lambda process_regular_node
def on_numblock(node)
method_call, max_numparam, body = *node
node.updated(nil, [
process(method_call), max_numparam, process(body)
])
end
alias on_while process_regular_node
alias on_while_post process_regular_node
alias on_until process_regular_node
alias on_until_post process_regular_node
alias on_for process_regular_node
alias on_return process_regular_node
alias on_break process_regular_node
alias on_next process_regular_node
alias on_redo process_regular_node
alias on_retry process_regular_node
alias on_super process_regular_node
alias on_yield process_regular_node
alias on_defined? process_regular_node
alias on_not process_regular_node
alias on_and process_regular_node
alias on_or process_regular_node
alias on_if process_regular_node
alias on_when process_regular_node
alias on_case process_regular_node
alias on_iflipflop process_regular_node
alias on_eflipflop process_regular_node
alias on_match_current_line process_regular_node
alias on_match_with_lvasgn process_regular_node
alias on_resbody process_regular_node
alias on_rescue process_regular_node
alias on_ensure process_regular_node
alias on_begin process_regular_node
alias on_kwbegin process_regular_node
alias on_preexe process_regular_node
alias on_postexe process_regular_node
alias on_case_match process_regular_node
alias on_in_match process_regular_node
alias on_match_pattern process_regular_node
alias on_match_pattern_p process_regular_node
alias on_in_pattern process_regular_node
alias on_if_guard process_regular_node
alias on_unless_guard process_regular_node
alias on_match_var process_variable_node
alias on_match_rest process_regular_node
alias on_pin process_regular_node
alias on_match_alt process_regular_node
alias on_match_as process_regular_node
alias on_array_pattern process_regular_node
alias on_array_pattern_with_tail process_regular_node
alias on_hash_pattern process_regular_node
alias on_const_pattern process_regular_node
alias on_find_pattern process_regular_node
# @private
def process_variable_node(node)
warn 'Parser::AST::Processor#process_variable_node is deprecated as a' \
' public API and will be removed. Please use ' \
'Parser::AST::Processor#on_var instead.'
on_var(node)
end
# @private
def process_var_asgn_node(node)
warn 'Parser::AST::Processor#process_var_asgn_node is deprecated as a' \
' public API and will be removed. Please use ' \
'Parser::AST::Processor#on_vasgn instead.'
on_vasgn(node)
end
# @private
def process_argument_node(node)
warn 'Parser::AST::Processor#process_argument_node is deprecated as a' \
' public API and will be removed. Please use ' \
'Parser::AST::Processor#on_argument instead.'
on_argument(node)
end
def on_empty_else(node)
node
end
end
end
end
|