@@ -27,12 +27,16 @@ def self.initialize_with_filters
2727 end
2828
2929 def extend_ast ( node_attr_name , new_node , stmt_type )
30+ self . class . ensure_not_nil_node! ( new_node )
31+
3032 @root_node = TreeTraverser
3133 . new ( @root_node )
3234 . extend_ast ( node_attr_name , new_node , stmt_type )
3335 end
3436
3537 def prepend_ast ( new_node , stmt_type )
38+ self . class . ensure_not_nil_node! ( new_node )
39+
3640 @root_node = TreeTraverser . new ( @root_node ) . prepend_ast ( new_node , stmt_type )
3741 end
3842
@@ -44,7 +48,12 @@ def to_s
4448 root_node . to_s
4549 end
4650
47- # @apir private
51+ # @api private
52+ def self . ensure_not_nil_node! ( ast_node )
53+ raise 'Tried to append nil node which is forbidden!' if ast_node . nil?
54+ end
55+
56+ # @api private
4857 def self . ensure_ast_root! ( root_node )
4958 raise 'Not a tree root!' if root_node . type != :root
5059 end
@@ -95,6 +104,8 @@ def recreate_node(node_attr_name, new_node, stmt_type)
95104 end
96105
97106 def prepend_ast ( new_node , stmt_type )
107+ return prepend_ast_without_statement ( new_node ) if ast_node . leaf?
108+
98109 create_node (
99110 ast_node . type ,
100111 [
@@ -108,6 +119,18 @@ def prepend_ast(new_node, stmt_type)
108119 )
109120 end
110121
122+ # @api private
123+ def prepend_ast_without_statement ( new_node )
124+ create_node (
125+ ast_node . type ,
126+ [
127+ ast_node . value ,
128+ new_node ,
129+ nil
130+ ]
131+ )
132+ end
133+
111134 # @api private
112135 def create_node ( *args )
113136 Filterly ::Node . new ( *args )
0 commit comments