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
|
# frozen_string_literal: true
module Unparser
module NodeHelpers
# Helper for building nodes
#
# @param [Symbol] type
# @param [Parser::AST::Node] children
#
# @return [Parser::AST::Node]
#
# @api private
def s(type, *children)
Parser::AST::Node.new(type, children)
end
# Helper for building nodes
#
# @param [Symbol] type
#
# @return [Parser::AST::Node]
# @param [Array] children
#
# @api private
def n(type, children = [])
Parser::AST::Node.new(type, children)
end
def n?(type, node)
node.type.equal?(type)
end
%i[
arg
args
array
array_pattern
begin
block
cbase
const
dstr
empty_else
ensure
hash
hash_pattern
if
in_pattern
int
kwarg
kwargs
kwsplat
lambda
match_rest
pair
rescue
send
shadowarg
splat
str
sym
].each do |type|
name = "n_#{type}?"
define_method(name) do |node|
n?(type, node)
end
private(name)
end
def unwrap_single_begin(node)
if n_begin?(node) && node.children.one?
node.children.first
else
node
end
end
end # NodeHelpers
end # Unparser
|