Module: Yoda::AST

Defined in:
lib/yoda/ast.rb,
lib/yoda/ast/node.rb,
lib/yoda/ast/vnode.rb,
lib/yoda/ast/if_node.rb,
lib/yoda/ast/def_node.rb,
lib/yoda/ast/for_node.rb,
lib/yoda/ast/case_node.rb,
lib/yoda/ast/hash_node.rb,
lib/yoda/ast/namespace.rb,
lib/yoda/ast/pair_node.rb,
lib/yoda/ast/send_node.rb,
lib/yoda/ast/when_node.rb,
lib/yoda/ast/array_node.rb,
lib/yoda/ast/block_node.rb,
lib/yoda/ast/class_node.rb,
lib/yoda/ast/name_vnode.rb,
lib/yoda/ast/root_vnode.rb,
lib/yoda/ast/empty_vnode.rb,
lib/yoda/ast/ensure_node.rb,
lib/yoda/ast/module_node.rb,
lib/yoda/ast/rescue_node.rb,
lib/yoda/ast/traversable.rb,
lib/yoda/ast/value_vnode.rb,
lib/yoda/ast/kwsplat_node.rb,
lib/yoda/ast/literal_node.rb,
lib/yoda/ast/comment_block.rb,
lib/yoda/ast/constant_node.rb,
lib/yoda/ast/variable_node.rb,
lib/yoda/ast/parameter_node.rb,
lib/yoda/ast/assignment_node.rb,
lib/yoda/ast/block_call_node.rb,
lib/yoda/ast/parameters_node.rb,
lib/yoda/ast/special_call_node.rb,
lib/yoda/ast/constant_base_node.rb,
lib/yoda/ast/def_singleton_node.rb,
lib/yoda/ast/left_operator_node.rb,
lib/yoda/ast/method_traversable.rb,
lib/yoda/ast/rescue_clause_node.rb,
lib/yoda/ast/comment_block/token.rb,
lib/yoda/ast/center_operator_node.rb,
lib/yoda/ast/singleton_class_node.rb,
lib/yoda/ast/conditional_loop_node.rb,
lib/yoda/ast/namespace_traversable.rb,
lib/yoda/ast/comment_block/tag_part.rb,
lib/yoda/ast/comment_block/base_part.rb,
lib/yoda/ast/comment_block/text_part.rb,
lib/yoda/ast/interpolation_text_node.rb,
lib/yoda/ast/optional_parameter_node.rb,
lib/yoda/ast/constant_assignment_node.rb,
lib/yoda/ast/multiple_left_hand_side_node.rb,
lib/yoda/ast/comment_block/range_calculation.rb,
lib/yoda/ast/comment_block/tag_text_name_part.rb,
lib/yoda/ast/comment_block/tag_text_type_part.rb

Defined Under Namespace

Modules: MethodTraversable, Namespace, NamespaceTraversable, Traversable Classes: ArrayNode, AssignmentNode, BlockCallNode, BlockNode, CaseNode, CenterOperatorNode, ClassNode, CommentBlock, ConditionalLoopNode, ConstantAssignmentNode, ConstantBaseNode, ConstantNode, DefNode, DefSingletonNode, EmptyVnode, EnsureNode, HashNode, IfNode, InterpolationTextNode, KwsplatNode, LeftOperatorNode, LiteralNode, ModuleNode, MultipleLeftHandSideNode, NameVnode, Node, OptionalParameterNode, PairNode, ParameterNode, ParametersNode, RescueClauseNode, RescueNode, RootVnode, SendNode, SingletonClassNode, SpecialCallNode, ValueVnode, VariableNode, Vnode, WhenNode

Class Method Summary collapse

Class Method Details

.wrap(node, parent: nil, comments_by_node: {}) ⇒ Yoda::AST::Node

Parameters:

  • node (::AST::Node)
  • parent (Vnode) (defaults to: nil)
  • comment_by_node (Hash{Parser::AST::Node => Array<Parser::Source::Comment>})

Returns:



54
55
56
57
58
59
60
# File 'lib/yoda/ast.rb', line 54

def wrap(node, parent: nil, comments_by_node: {})
  if parent
    wrapper_class_for(node).new(node, parent: parent, comments_by_node: comments_by_node)
  else
    RootVnode.new(node, comments_by_node: comments_by_node).content
  end
end

.wrapper_class_for(node) ⇒ Object

Parameters:

  • node (::AST::Node)


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
# File 'lib/yoda/ast.rb', line 63

def wrapper_class_for(node)
  return EmptyVnode unless node
  return NameVnode if node.is_a?(Symbol)
  return ValueVnode unless node.respond_to?(:type)
  case node.type
  when :lvasgn, :ivasgn, :cvasgn, :gvasgn, :masgn, :op_asgn, :or_asgn, :and_asgn
    AssignmentNode
  when :casgn
    ConstantAssignmentNode
  when :not
    LeftOperatorNode
  when :and, :or
    CenterOperatorNode
  when :if
    IfNode
  when :case
    CaseNode
  when :const
    ConstantNode
  when :while, :until, :while_post, :until_post
    ConditionalLoopNode
  when :for
    ForNode
  when :super, :zsuper, :yield, :return, :break, :next, :self, :defined?, :redo, :undef
    SpecialCallNode
  when :ensure
    EnsureNode
  when :rescue
    RescueNode
  when :resbody
    RescueClauseNode
  when :csend, :send
    SendNode
  when :block
    BlockCallNode
  when :const
    ConstantNode
  when :lvar, :cvar, :ivar, :gvar
    VariableNode
  when :begin, :kwbegin, :block
    BlockNode
  when :dstr, :dsym, :xstr
    InterpolationTextNode
  when :args
    ParametersNode
  when :arg, :shadowarg, :restarg, :blockarg, :kwarg, :kwrestarg
    ParameterNode
  when :optarg, :kwoptarg
    OptionalParameterNode
  when :mlhs
    MultipleLeftHandSideNode
  when :def
    DefNode
  when :defs
    DefSingletonNode
  when :hash
    HashNode
  when :array
    ArrayNode
  when :pair
    PairNode
  when :module
    ModuleNode
  when :class
    ClassNode
  when :sclass
    SingletonClassNode
  when :kwsplat
    KwsplatNode
  when :int, :float, :complex, :rational, :str, :string, :sym
    LiteralNode
  else
    Node
  end
end