@@ -60,104 +60,6 @@ def visit
60
60
@document
61
61
end
62
62
end
63
- # rubocop:disable Development/NoEvalCop This eval takes static inputs at load-time
64
-
65
- # We don't use `alias` here because it breaks `super`
66
- def self . make_visit_methods ( ast_node_class )
67
- node_method = ast_node_class . visit_method
68
- children_of_type = ast_node_class . children_of_type
69
- child_visit_method = :"#{ node_method } _children"
70
-
71
- class_eval ( <<-RUBY , __FILE__ , __LINE__ + 1 )
72
- # The default implementation for visiting an AST node.
73
- # It doesn't _do_ anything, but it continues to visiting the node's children.
74
- # To customize this hook, override one of its make_visit_methods (or the base method?)
75
- # in your subclasses.
76
- #
77
- # @param node [GraphQL::Language::Nodes::AbstractNode] the node being visited
78
- # @param parent [GraphQL::Language::Nodes::AbstractNode, nil] the previously-visited node, or `nil` if this is the root node.
79
- # @return [Array, nil] If there were modifications, it returns an array of new nodes, otherwise, it returns `nil`.
80
- def #{ node_method } (node, parent)
81
- if node.equal?(DELETE_NODE)
82
- # This might be passed to `super(DELETE_NODE, ...)`
83
- # by a user hook, don't want to keep visiting in that case.
84
- [node, parent]
85
- else
86
- new_node = node
87
- #{
88
- if method_defined? ( child_visit_method )
89
- "new_node = #{ child_visit_method } (new_node)"
90
- elsif children_of_type
91
- children_of_type . map do |child_accessor , child_class |
92
- "node.#{ child_accessor } .each do |child_node|
93
- new_child_and_node = #{ child_class . visit_method } _with_modifications(child_node, new_node)
94
- # Reassign `node` in case the child hook makes a modification
95
- if new_child_and_node.is_a?(Array)
96
- new_node = new_child_and_node[1]
97
- end
98
- end"
99
- end . join ( "\n " )
100
- else
101
- ""
102
- end
103
- }
104
-
105
- if new_node.equal?(node)
106
- [node, parent]
107
- else
108
- [new_node, parent]
109
- end
110
- end
111
- end
112
-
113
- def #{ node_method } _with_modifications(node, parent)
114
- new_node_and_new_parent = #{ node_method } (node, parent)
115
- apply_modifications(node, parent, new_node_and_new_parent)
116
- end
117
- RUBY
118
- end
119
-
120
- [
121
- Language ::Nodes ::Argument ,
122
- Language ::Nodes ::Directive ,
123
- Language ::Nodes ::DirectiveDefinition ,
124
- Language ::Nodes ::DirectiveLocation ,
125
- Language ::Nodes ::Document ,
126
- Language ::Nodes ::Enum ,
127
- Language ::Nodes ::EnumTypeDefinition ,
128
- Language ::Nodes ::EnumTypeExtension ,
129
- Language ::Nodes ::EnumValueDefinition ,
130
- Language ::Nodes ::Field ,
131
- Language ::Nodes ::FieldDefinition ,
132
- Language ::Nodes ::FragmentDefinition ,
133
- Language ::Nodes ::FragmentSpread ,
134
- Language ::Nodes ::InlineFragment ,
135
- Language ::Nodes ::InputObject ,
136
- Language ::Nodes ::InputObjectTypeDefinition ,
137
- Language ::Nodes ::InputObjectTypeExtension ,
138
- Language ::Nodes ::InputValueDefinition ,
139
- Language ::Nodes ::InterfaceTypeDefinition ,
140
- Language ::Nodes ::InterfaceTypeExtension ,
141
- Language ::Nodes ::ListType ,
142
- Language ::Nodes ::NonNullType ,
143
- Language ::Nodes ::NullValue ,
144
- Language ::Nodes ::ObjectTypeDefinition ,
145
- Language ::Nodes ::ObjectTypeExtension ,
146
- Language ::Nodes ::OperationDefinition ,
147
- Language ::Nodes ::ScalarTypeDefinition ,
148
- Language ::Nodes ::ScalarTypeExtension ,
149
- Language ::Nodes ::SchemaDefinition ,
150
- Language ::Nodes ::SchemaExtension ,
151
- Language ::Nodes ::TypeName ,
152
- Language ::Nodes ::UnionTypeDefinition ,
153
- Language ::Nodes ::UnionTypeExtension ,
154
- Language ::Nodes ::VariableDefinition ,
155
- Language ::Nodes ::VariableIdentifier ,
156
- ] . each do |ast_node_class |
157
- make_visit_methods ( ast_node_class )
158
- end
159
-
160
- # rubocop:enable Development/NoEvalCop
161
63
162
64
def on_document_children ( document_node )
163
65
new_node = document_node
@@ -259,6 +161,105 @@ def on_argument_children(new_node)
259
161
new_node
260
162
end
261
163
164
+ # rubocop:disable Development/NoEvalCop This eval takes static inputs at load-time
165
+
166
+ # We don't use `alias` here because it breaks `super`
167
+ def self . make_visit_methods ( ast_node_class )
168
+ node_method = ast_node_class . visit_method
169
+ children_of_type = ast_node_class . children_of_type
170
+ child_visit_method = :"#{ node_method } _children"
171
+
172
+ class_eval ( <<-RUBY , __FILE__ , __LINE__ + 1 )
173
+ # The default implementation for visiting an AST node.
174
+ # It doesn't _do_ anything, but it continues to visiting the node's children.
175
+ # To customize this hook, override one of its make_visit_methods (or the base method?)
176
+ # in your subclasses.
177
+ #
178
+ # @param node [GraphQL::Language::Nodes::AbstractNode] the node being visited
179
+ # @param parent [GraphQL::Language::Nodes::AbstractNode, nil] the previously-visited node, or `nil` if this is the root node.
180
+ # @return [Array, nil] If there were modifications, it returns an array of new nodes, otherwise, it returns `nil`.
181
+ def #{ node_method } (node, parent)
182
+ if node.equal?(DELETE_NODE)
183
+ # This might be passed to `super(DELETE_NODE, ...)`
184
+ # by a user hook, don't want to keep visiting in that case.
185
+ [node, parent]
186
+ else
187
+ new_node = node
188
+ #{
189
+ if method_defined? ( child_visit_method )
190
+ "new_node = #{ child_visit_method } (new_node)"
191
+ elsif children_of_type
192
+ children_of_type . map do |child_accessor , child_class |
193
+ "node.#{ child_accessor } .each do |child_node|
194
+ new_child_and_node = #{ child_class . visit_method } _with_modifications(child_node, new_node)
195
+ # Reassign `node` in case the child hook makes a modification
196
+ if new_child_and_node.is_a?(Array)
197
+ new_node = new_child_and_node[1]
198
+ end
199
+ end"
200
+ end . join ( "\n " )
201
+ else
202
+ ""
203
+ end
204
+ }
205
+
206
+ if new_node.equal?(node)
207
+ [node, parent]
208
+ else
209
+ [new_node, parent]
210
+ end
211
+ end
212
+ end
213
+
214
+ def #{ node_method } _with_modifications(node, parent)
215
+ new_node_and_new_parent = #{ node_method } (node, parent)
216
+ apply_modifications(node, parent, new_node_and_new_parent)
217
+ end
218
+ RUBY
219
+ end
220
+
221
+ [
222
+ Language ::Nodes ::Argument ,
223
+ Language ::Nodes ::Directive ,
224
+ Language ::Nodes ::DirectiveDefinition ,
225
+ Language ::Nodes ::DirectiveLocation ,
226
+ Language ::Nodes ::Document ,
227
+ Language ::Nodes ::Enum ,
228
+ Language ::Nodes ::EnumTypeDefinition ,
229
+ Language ::Nodes ::EnumTypeExtension ,
230
+ Language ::Nodes ::EnumValueDefinition ,
231
+ Language ::Nodes ::Field ,
232
+ Language ::Nodes ::FieldDefinition ,
233
+ Language ::Nodes ::FragmentDefinition ,
234
+ Language ::Nodes ::FragmentSpread ,
235
+ Language ::Nodes ::InlineFragment ,
236
+ Language ::Nodes ::InputObject ,
237
+ Language ::Nodes ::InputObjectTypeDefinition ,
238
+ Language ::Nodes ::InputObjectTypeExtension ,
239
+ Language ::Nodes ::InputValueDefinition ,
240
+ Language ::Nodes ::InterfaceTypeDefinition ,
241
+ Language ::Nodes ::InterfaceTypeExtension ,
242
+ Language ::Nodes ::ListType ,
243
+ Language ::Nodes ::NonNullType ,
244
+ Language ::Nodes ::NullValue ,
245
+ Language ::Nodes ::ObjectTypeDefinition ,
246
+ Language ::Nodes ::ObjectTypeExtension ,
247
+ Language ::Nodes ::OperationDefinition ,
248
+ Language ::Nodes ::ScalarTypeDefinition ,
249
+ Language ::Nodes ::ScalarTypeExtension ,
250
+ Language ::Nodes ::SchemaDefinition ,
251
+ Language ::Nodes ::SchemaExtension ,
252
+ Language ::Nodes ::TypeName ,
253
+ Language ::Nodes ::UnionTypeDefinition ,
254
+ Language ::Nodes ::UnionTypeExtension ,
255
+ Language ::Nodes ::VariableDefinition ,
256
+ Language ::Nodes ::VariableIdentifier ,
257
+ ] . each do |ast_node_class |
258
+ make_visit_methods ( ast_node_class )
259
+ end
260
+
261
+ # rubocop:enable Development/NoEvalCop
262
+
262
263
private
263
264
264
265
def apply_modifications ( node , parent , new_node_and_new_parent )
0 commit comments