rails-graphql 0.2.1 → 1.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. checksums.yaml +4 -4
  2. data/ext/console.rb +18 -0
  3. data/ext/extconf.h +3 -0
  4. data/ext/extconf.rb +1 -54
  5. data/ext/gql_parser.c +646 -0
  6. data/ext/shared.c +482 -0
  7. data/ext/shared.h +177 -0
  8. data/lib/gql_parser.so +0 -0
  9. data/lib/rails/graphql/adapters/mysql_adapter.rb +59 -0
  10. data/lib/rails/graphql/adapters/pg_adapter.rb +25 -22
  11. data/lib/rails/graphql/adapters/sqlite_adapter.rb +17 -14
  12. data/lib/rails/graphql/alternative/field_set.rb +36 -0
  13. data/lib/rails/graphql/alternative/mutation.rb +17 -0
  14. data/lib/rails/graphql/alternative/query.rb +93 -0
  15. data/lib/rails/graphql/alternative/subscription.rb +17 -0
  16. data/lib/rails/graphql/alternative.rb +20 -0
  17. data/lib/rails/graphql/argument.rb +21 -24
  18. data/lib/rails/graphql/callback.rb +24 -9
  19. data/lib/rails/graphql/collectors/hash_collector.rb +14 -6
  20. data/lib/rails/graphql/collectors/idented_collector.rb +10 -7
  21. data/lib/rails/graphql/collectors/json_collector.rb +22 -17
  22. data/lib/rails/graphql/collectors.rb +4 -4
  23. data/lib/rails/graphql/config.rb +130 -15
  24. data/lib/rails/graphql/directive/cached_directive.rb +33 -0
  25. data/lib/rails/graphql/directive/deprecated_directive.rb +10 -10
  26. data/lib/rails/graphql/directive/include_directive.rb +5 -4
  27. data/lib/rails/graphql/directive/skip_directive.rb +5 -4
  28. data/lib/rails/graphql/directive.rb +118 -63
  29. data/lib/rails/graphql/errors.rb +33 -4
  30. data/lib/rails/graphql/event.rb +16 -5
  31. data/lib/rails/graphql/field/authorized_field.rb +19 -3
  32. data/lib/rails/graphql/field/input_field.rb +11 -10
  33. data/lib/rails/graphql/field/mutation_field.rb +42 -7
  34. data/lib/rails/graphql/field/output_field.rb +102 -13
  35. data/lib/rails/graphql/field/proxied_field.rb +31 -22
  36. data/lib/rails/graphql/field/resolved_field.rb +26 -24
  37. data/lib/rails/graphql/field/scoped_config.rb +10 -4
  38. data/lib/rails/graphql/field/subscription_field.rb +140 -0
  39. data/lib/rails/graphql/field/typed_field.rb +43 -22
  40. data/lib/rails/graphql/field.rb +70 -56
  41. data/lib/rails/graphql/global_id.rb +85 -0
  42. data/lib/rails/graphql/helpers/attribute_delegator.rb +5 -5
  43. data/lib/rails/graphql/helpers/inherited_collection/array.rb +50 -0
  44. data/lib/rails/graphql/helpers/inherited_collection/base.rb +43 -0
  45. data/lib/rails/graphql/helpers/inherited_collection/hash.rb +87 -0
  46. data/lib/rails/graphql/helpers/inherited_collection.rb +25 -76
  47. data/lib/rails/graphql/helpers/instantiable.rb +15 -0
  48. data/lib/rails/graphql/helpers/leaf_from_ar.rb +7 -7
  49. data/lib/rails/graphql/helpers/registerable.rb +44 -62
  50. data/lib/rails/graphql/helpers/unregisterable.rb +16 -0
  51. data/lib/rails/graphql/helpers/with_arguments.rb +31 -27
  52. data/lib/rails/graphql/helpers/with_assignment.rb +6 -6
  53. data/lib/rails/graphql/helpers/with_callbacks.rb +25 -8
  54. data/lib/rails/graphql/helpers/with_description.rb +71 -0
  55. data/lib/rails/graphql/helpers/with_directives.rb +54 -30
  56. data/lib/rails/graphql/helpers/with_events.rb +21 -23
  57. data/lib/rails/graphql/helpers/with_fields.rb +76 -22
  58. data/lib/rails/graphql/helpers/with_global_id.rb +22 -0
  59. data/lib/rails/graphql/helpers/with_name.rb +43 -0
  60. data/lib/rails/graphql/helpers/with_namespace.rb +7 -4
  61. data/lib/rails/graphql/helpers/with_owner.rb +8 -7
  62. data/lib/rails/graphql/helpers/with_schema_fields.rb +137 -55
  63. data/lib/rails/graphql/helpers/with_validator.rb +9 -9
  64. data/lib/rails/graphql/helpers.rb +10 -3
  65. data/lib/rails/graphql/introspection.rb +43 -36
  66. data/lib/rails/graphql/railtie.rb +88 -33
  67. data/lib/rails/graphql/railties/base_generator.rb +3 -9
  68. data/lib/rails/graphql/railties/channel.rb +157 -0
  69. data/lib/rails/graphql/railties/controller.rb +62 -17
  70. data/lib/rails/graphql/railties/controller_runtime.rb +5 -5
  71. data/lib/rails/graphql/railties/log_subscriber.rb +81 -14
  72. data/lib/rails/graphql/request/arguments.rb +24 -49
  73. data/lib/rails/graphql/request/backtrace.rb +191 -0
  74. data/lib/rails/graphql/request/component/field.rb +86 -65
  75. data/lib/rails/graphql/request/component/fragment.rb +72 -24
  76. data/lib/rails/graphql/request/component/operation/subscription.rb +164 -4
  77. data/lib/rails/graphql/request/component/operation.rb +63 -31
  78. data/lib/rails/graphql/request/component/spread.rb +68 -25
  79. data/lib/rails/graphql/request/component/typename.rb +27 -12
  80. data/lib/rails/graphql/request/component.rb +75 -36
  81. data/lib/rails/graphql/request/context.rb +18 -8
  82. data/lib/rails/graphql/request/errors.rb +16 -6
  83. data/lib/rails/graphql/request/event.rb +19 -8
  84. data/lib/rails/graphql/request/helpers/directives.rb +68 -27
  85. data/lib/rails/graphql/request/helpers/selection_set.rb +51 -25
  86. data/lib/rails/graphql/request/helpers/value_writers.rb +18 -16
  87. data/lib/rails/graphql/request/prepared_data.rb +98 -0
  88. data/lib/rails/graphql/request/steps/authorizable.rb +24 -14
  89. data/lib/rails/graphql/request/steps/organizable.rb +110 -48
  90. data/lib/rails/graphql/request/steps/{prepareable.rb → preparable.rb} +20 -7
  91. data/lib/rails/graphql/request/steps/{resolveable.rb → resolvable.rb} +15 -6
  92. data/lib/rails/graphql/request/strategy/cached_strategy.rb +64 -0
  93. data/lib/rails/graphql/request/strategy/dynamic_instance.rb +6 -6
  94. data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +6 -13
  95. data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +9 -9
  96. data/lib/rails/graphql/request/strategy.rb +131 -75
  97. data/lib/rails/graphql/request/subscription.rb +80 -0
  98. data/lib/rails/graphql/request.rb +305 -86
  99. data/lib/rails/graphql/schema.rb +240 -48
  100. data/lib/rails/graphql/shortcuts.rb +22 -3
  101. data/lib/rails/graphql/source/active_record/builders.rb +49 -35
  102. data/lib/rails/graphql/source/active_record_source.rb +70 -54
  103. data/lib/rails/graphql/source/base.rb +111 -0
  104. data/lib/rails/graphql/source/builder.rb +128 -0
  105. data/lib/rails/graphql/source/scoped_arguments.rb +31 -19
  106. data/lib/rails/graphql/source.rb +89 -213
  107. data/lib/rails/graphql/subscription/provider/action_cable.rb +112 -0
  108. data/lib/rails/graphql/subscription/provider/base.rb +191 -0
  109. data/lib/rails/graphql/subscription/provider.rb +18 -0
  110. data/lib/rails/graphql/subscription/store/base.rb +145 -0
  111. data/lib/rails/graphql/subscription/store/memory.rb +127 -0
  112. data/lib/rails/graphql/subscription/store.rb +19 -0
  113. data/lib/rails/graphql/subscription.rb +17 -0
  114. data/lib/rails/graphql/to_gql.rb +29 -32
  115. data/lib/rails/graphql/type/enum/directive_location_enum.rb +11 -11
  116. data/lib/rails/graphql/type/enum/type_kind_enum.rb +3 -3
  117. data/lib/rails/graphql/type/enum.rb +34 -48
  118. data/lib/rails/graphql/type/input.rb +74 -23
  119. data/lib/rails/graphql/type/interface.rb +16 -26
  120. data/lib/rails/graphql/type/object/directive_object.rb +4 -4
  121. data/lib/rails/graphql/type/object/enum_value_object.rb +3 -3
  122. data/lib/rails/graphql/type/object/field_object.rb +24 -6
  123. data/lib/rails/graphql/type/object/input_value_object.rb +3 -3
  124. data/lib/rails/graphql/type/object/schema_object.rb +5 -8
  125. data/lib/rails/graphql/type/object/type_object.rb +29 -19
  126. data/lib/rails/graphql/type/object.rb +26 -23
  127. data/lib/rails/graphql/type/scalar/any_scalar.rb +30 -0
  128. data/lib/rails/graphql/type/scalar/bigint_scalar.rb +5 -5
  129. data/lib/rails/graphql/type/scalar/binary_scalar.rb +3 -3
  130. data/lib/rails/graphql/type/scalar/boolean_scalar.rb +8 -8
  131. data/lib/rails/graphql/type/scalar/date_scalar.rb +3 -3
  132. data/lib/rails/graphql/type/scalar/date_time_scalar.rb +3 -3
  133. data/lib/rails/graphql/type/scalar/decimal_scalar.rb +3 -3
  134. data/lib/rails/graphql/type/scalar/float_scalar.rb +5 -5
  135. data/lib/rails/graphql/type/scalar/id_scalar.rb +6 -5
  136. data/lib/rails/graphql/type/scalar/int_scalar.rb +6 -5
  137. data/lib/rails/graphql/type/scalar/json_scalar.rb +39 -0
  138. data/lib/rails/graphql/type/scalar/string_scalar.rb +18 -4
  139. data/lib/rails/graphql/type/scalar/time_scalar.rb +5 -5
  140. data/lib/rails/graphql/type/scalar.rb +25 -22
  141. data/lib/rails/graphql/type/union.rb +14 -16
  142. data/lib/rails/graphql/type.rb +34 -25
  143. data/lib/rails/graphql/type_map.rb +256 -164
  144. data/lib/rails/graphql/uri.rb +166 -0
  145. data/lib/rails/graphql/version.rb +15 -3
  146. data/lib/rails/graphql.rake +3 -0
  147. data/lib/rails/graphql.rb +85 -52
  148. data/lib/rails-graphql.rb +1 -1
  149. data/test/assets/en.yml +29 -0
  150. data/test/assets/introspection-mem.txt +1 -1
  151. data/test/assets/mem.gql +18 -45
  152. data/test/assets/mysql.gql +392 -0
  153. data/test/assets/sqlite.gql +21 -12
  154. data/test/assets/translate.gql +335 -0
  155. data/test/config.rb +18 -8
  156. data/test/graphql/schema_test.rb +12 -19
  157. data/test/graphql/source_test.rb +8 -75
  158. data/test/graphql/type/enum_test.rb +207 -203
  159. data/test/graphql/type/input_test.rb +14 -9
  160. data/test/graphql/type/interface_test.rb +4 -4
  161. data/test/graphql/type/scalar/any_scalar_test.rb +38 -0
  162. data/test/graphql/type/scalar/boolean_scalar_test.rb +6 -3
  163. data/test/graphql/type/scalar/json_scalar_test.rb +23 -0
  164. data/test/graphql/type_map_test.rb +51 -66
  165. data/test/graphql/type_test.rb +0 -19
  166. data/test/graphql_test.rb +1 -1
  167. data/test/integration/{authorization/authorization_test.rb → authorization_test.rb} +40 -14
  168. data/test/integration/config.rb +36 -3
  169. data/test/integration/customization_test.rb +39 -0
  170. data/test/integration/global_id_test.rb +99 -0
  171. data/test/integration/memory/star_wars_introspection_test.rb +24 -16
  172. data/test/integration/memory/star_wars_query_test.rb +54 -3
  173. data/test/integration/memory/star_wars_validation_test.rb +1 -1
  174. data/test/integration/mysql/star_wars_introspection_test.rb +25 -0
  175. data/test/integration/persisted_query_test.rb +87 -0
  176. data/test/integration/resolver_precedence_test.rb +154 -0
  177. data/test/integration/schemas/memory.rb +22 -7
  178. data/test/integration/schemas/mysql.rb +62 -0
  179. data/test/integration/schemas/sqlite.rb +21 -12
  180. data/test/integration/sqlite/star_wars_global_id_test.rb +83 -0
  181. data/test/integration/sqlite/star_wars_introspection_test.rb +10 -0
  182. data/test/integration/sqlite/star_wars_query_test.rb +14 -1
  183. data/test/integration/translate_test.rb +61 -0
  184. data/test/test_ext.rb +16 -13
  185. metadata +108 -157
  186. data/ext/depend +0 -3
  187. data/ext/graphqlparser/Ast.cpp +0 -346
  188. data/ext/graphqlparser/Ast.h +0 -1214
  189. data/ext/graphqlparser/AstNode.h +0 -36
  190. data/ext/graphqlparser/AstVisitor.h +0 -137
  191. data/ext/graphqlparser/GraphQLParser.cpp +0 -76
  192. data/ext/graphqlparser/GraphQLParser.h +0 -55
  193. data/ext/graphqlparser/JsonVisitor.cpp +0 -161
  194. data/ext/graphqlparser/JsonVisitor.cpp.inc +0 -456
  195. data/ext/graphqlparser/JsonVisitor.h +0 -121
  196. data/ext/graphqlparser/JsonVisitor.h.inc +0 -110
  197. data/ext/graphqlparser/VERSION +0 -1
  198. data/ext/graphqlparser/c/GraphQLAst.cpp +0 -324
  199. data/ext/graphqlparser/c/GraphQLAst.h +0 -180
  200. data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +0 -44
  201. data/ext/graphqlparser/c/GraphQLAstNode.cpp +0 -25
  202. data/ext/graphqlparser/c/GraphQLAstNode.h +0 -33
  203. data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +0 -21
  204. data/ext/graphqlparser/c/GraphQLAstToJSON.h +0 -24
  205. data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +0 -55
  206. data/ext/graphqlparser/c/GraphQLAstVisitor.h +0 -53
  207. data/ext/graphqlparser/c/GraphQLParser.cpp +0 -35
  208. data/ext/graphqlparser/c/GraphQLParser.h +0 -54
  209. data/ext/graphqlparser/dump_json_ast.cpp +0 -48
  210. data/ext/graphqlparser/lexer.lpp +0 -324
  211. data/ext/graphqlparser/parser.ypp +0 -693
  212. data/ext/graphqlparser/parsergen/lexer.cpp +0 -2633
  213. data/ext/graphqlparser/parsergen/lexer.h +0 -528
  214. data/ext/graphqlparser/parsergen/location.hh +0 -189
  215. data/ext/graphqlparser/parsergen/parser.tab.cpp +0 -3300
  216. data/ext/graphqlparser/parsergen/parser.tab.hpp +0 -646
  217. data/ext/graphqlparser/parsergen/position.hh +0 -179
  218. data/ext/graphqlparser/parsergen/stack.hh +0 -156
  219. data/ext/graphqlparser/syntaxdefs.h +0 -19
  220. data/ext/libgraphqlparser/AstNode.h +0 -36
  221. data/ext/libgraphqlparser/CMakeLists.txt +0 -148
  222. data/ext/libgraphqlparser/CONTRIBUTING.md +0 -23
  223. data/ext/libgraphqlparser/GraphQLParser.cpp +0 -76
  224. data/ext/libgraphqlparser/GraphQLParser.h +0 -55
  225. data/ext/libgraphqlparser/JsonVisitor.cpp +0 -161
  226. data/ext/libgraphqlparser/JsonVisitor.h +0 -121
  227. data/ext/libgraphqlparser/LICENSE +0 -22
  228. data/ext/libgraphqlparser/README.clang-tidy +0 -7
  229. data/ext/libgraphqlparser/README.md +0 -84
  230. data/ext/libgraphqlparser/ast/ast.ast +0 -203
  231. data/ext/libgraphqlparser/ast/ast.py +0 -61
  232. data/ext/libgraphqlparser/ast/c.py +0 -100
  233. data/ext/libgraphqlparser/ast/c.pyc +0 -0
  234. data/ext/libgraphqlparser/ast/c_impl.py +0 -61
  235. data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
  236. data/ext/libgraphqlparser/ast/c_visitor_impl.py +0 -39
  237. data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
  238. data/ext/libgraphqlparser/ast/casing.py +0 -26
  239. data/ext/libgraphqlparser/ast/casing.pyc +0 -0
  240. data/ext/libgraphqlparser/ast/cxx.py +0 -197
  241. data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
  242. data/ext/libgraphqlparser/ast/cxx_impl.py +0 -61
  243. data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
  244. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +0 -42
  245. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
  246. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +0 -80
  247. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
  248. data/ext/libgraphqlparser/ast/cxx_visitor.py +0 -64
  249. data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
  250. data/ext/libgraphqlparser/ast/js.py +0 -65
  251. data/ext/libgraphqlparser/ast/license.py +0 -10
  252. data/ext/libgraphqlparser/ast/license.pyc +0 -0
  253. data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +0 -25
  254. data/ext/libgraphqlparser/c/GraphQLAstNode.h +0 -33
  255. data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +0 -21
  256. data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +0 -24
  257. data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +0 -55
  258. data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +0 -53
  259. data/ext/libgraphqlparser/c/GraphQLParser.cpp +0 -35
  260. data/ext/libgraphqlparser/c/GraphQLParser.h +0 -54
  261. data/ext/libgraphqlparser/clang-tidy-all.sh +0 -3
  262. data/ext/libgraphqlparser/cmake/version.cmake +0 -16
  263. data/ext/libgraphqlparser/dump_json_ast.cpp +0 -48
  264. data/ext/libgraphqlparser/go/README.md +0 -20
  265. data/ext/libgraphqlparser/go/callbacks.go +0 -18
  266. data/ext/libgraphqlparser/go/gotest.go +0 -64
  267. data/ext/libgraphqlparser/lexer.lpp +0 -324
  268. data/ext/libgraphqlparser/libgraphqlparser.pc.in +0 -11
  269. data/ext/libgraphqlparser/parser.ypp +0 -693
  270. data/ext/libgraphqlparser/parsergen/lexer.cpp +0 -2633
  271. data/ext/libgraphqlparser/parsergen/lexer.h +0 -528
  272. data/ext/libgraphqlparser/parsergen/location.hh +0 -189
  273. data/ext/libgraphqlparser/parsergen/parser.tab.cpp +0 -3300
  274. data/ext/libgraphqlparser/parsergen/parser.tab.hpp +0 -646
  275. data/ext/libgraphqlparser/parsergen/position.hh +0 -179
  276. data/ext/libgraphqlparser/parsergen/stack.hh +0 -156
  277. data/ext/libgraphqlparser/python/CMakeLists.txt +0 -14
  278. data/ext/libgraphqlparser/python/README.md +0 -5
  279. data/ext/libgraphqlparser/python/example.py +0 -31
  280. data/ext/libgraphqlparser/syntaxdefs.h +0 -19
  281. data/ext/libgraphqlparser/test/BuildCAPI.c +0 -5
  282. data/ext/libgraphqlparser/test/CMakeLists.txt +0 -25
  283. data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +0 -28
  284. data/ext/libgraphqlparser/test/ParserTests.cpp +0 -352
  285. data/ext/libgraphqlparser/test/kitchen-sink.graphql +0 -59
  286. data/ext/libgraphqlparser/test/kitchen-sink.json +0 -1
  287. data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +0 -78
  288. data/ext/libgraphqlparser/test/schema-kitchen-sink.json +0 -1
  289. data/ext/libgraphqlparser/test/valgrind.supp +0 -33
  290. data/ext/version.cpp +0 -21
  291. data/lib/graphqlparser.so +0 -0
  292. data/lib/rails/graphql/native/functions.rb +0 -38
  293. data/lib/rails/graphql/native/location.rb +0 -41
  294. data/lib/rails/graphql/native/pointers.rb +0 -23
  295. data/lib/rails/graphql/native/visitor.rb +0 -349
  296. data/lib/rails/graphql/native.rb +0 -56
  297. data/test/integration/schemas/authorization.rb +0 -12
@@ -1,456 +0,0 @@
1
- /**
2
- * Copyright 2019-present GraphQL Foundation
3
- * This source code is licensed under the MIT license found in the
4
- * LICENSE file in the root directory of this source tree.
5
- */
6
- /** @generated */
7
- bool JsonVisitor::visitDocument(const Document &node) {
8
- visitNode();
9
- return true;
10
- }
11
-
12
- void JsonVisitor::endVisitDocument(const Document &node) {
13
- NodeFieldPrinter fields(*this, "Document", node);
14
- fields.printPluralField("definitions", node.getDefinitions());
15
-
16
- endVisitNode(fields.finishPrinting());
17
- }
18
-
19
- bool JsonVisitor::visitOperationDefinition(const OperationDefinition &node) {
20
- visitNode();
21
- return true;
22
- }
23
-
24
- void JsonVisitor::endVisitOperationDefinition(const OperationDefinition &node) {
25
- NodeFieldPrinter fields(*this, "OperationDefinition", node);
26
- fields.printSingularPrimitiveField("operation", node.getOperation());
27
- fields.printNullableSingularObjectField("name", node.getName());
28
- fields.printNullablePluralField("variableDefinitions", node.getVariableDefinitions());
29
- fields.printNullablePluralField("directives", node.getDirectives());
30
- fields.printSingularObjectField("selectionSet");
31
-
32
- endVisitNode(fields.finishPrinting());
33
- }
34
-
35
- bool JsonVisitor::visitVariableDefinition(const VariableDefinition &node) {
36
- visitNode();
37
- return true;
38
- }
39
-
40
- void JsonVisitor::endVisitVariableDefinition(const VariableDefinition &node) {
41
- NodeFieldPrinter fields(*this, "VariableDefinition", node);
42
- fields.printSingularObjectField("variable");
43
- fields.printSingularObjectField("type");
44
- fields.printNullableSingularObjectField("defaultValue", node.getDefaultValue());
45
-
46
- endVisitNode(fields.finishPrinting());
47
- }
48
-
49
- bool JsonVisitor::visitSelectionSet(const SelectionSet &node) {
50
- visitNode();
51
- return true;
52
- }
53
-
54
- void JsonVisitor::endVisitSelectionSet(const SelectionSet &node) {
55
- NodeFieldPrinter fields(*this, "SelectionSet", node);
56
- fields.printPluralField("selections", node.getSelections());
57
-
58
- endVisitNode(fields.finishPrinting());
59
- }
60
-
61
- bool JsonVisitor::visitField(const Field &node) {
62
- visitNode();
63
- return true;
64
- }
65
-
66
- void JsonVisitor::endVisitField(const Field &node) {
67
- NodeFieldPrinter fields(*this, "Field", node);
68
- fields.printNullableSingularObjectField("alias", node.getAlias());
69
- fields.printSingularObjectField("name");
70
- fields.printNullablePluralField("arguments", node.getArguments());
71
- fields.printNullablePluralField("directives", node.getDirectives());
72
- fields.printNullableSingularObjectField("selectionSet", node.getSelectionSet());
73
-
74
- endVisitNode(fields.finishPrinting());
75
- }
76
-
77
- bool JsonVisitor::visitArgument(const Argument &node) {
78
- visitNode();
79
- return true;
80
- }
81
-
82
- void JsonVisitor::endVisitArgument(const Argument &node) {
83
- NodeFieldPrinter fields(*this, "Argument", node);
84
- fields.printSingularObjectField("name");
85
- fields.printSingularObjectField("value");
86
-
87
- endVisitNode(fields.finishPrinting());
88
- }
89
-
90
- bool JsonVisitor::visitFragmentSpread(const FragmentSpread &node) {
91
- visitNode();
92
- return true;
93
- }
94
-
95
- void JsonVisitor::endVisitFragmentSpread(const FragmentSpread &node) {
96
- NodeFieldPrinter fields(*this, "FragmentSpread", node);
97
- fields.printSingularObjectField("name");
98
- fields.printNullablePluralField("directives", node.getDirectives());
99
-
100
- endVisitNode(fields.finishPrinting());
101
- }
102
-
103
- bool JsonVisitor::visitInlineFragment(const InlineFragment &node) {
104
- visitNode();
105
- return true;
106
- }
107
-
108
- void JsonVisitor::endVisitInlineFragment(const InlineFragment &node) {
109
- NodeFieldPrinter fields(*this, "InlineFragment", node);
110
- fields.printNullableSingularObjectField("typeCondition", node.getTypeCondition());
111
- fields.printNullablePluralField("directives", node.getDirectives());
112
- fields.printSingularObjectField("selectionSet");
113
-
114
- endVisitNode(fields.finishPrinting());
115
- }
116
-
117
- bool JsonVisitor::visitFragmentDefinition(const FragmentDefinition &node) {
118
- visitNode();
119
- return true;
120
- }
121
-
122
- void JsonVisitor::endVisitFragmentDefinition(const FragmentDefinition &node) {
123
- NodeFieldPrinter fields(*this, "FragmentDefinition", node);
124
- fields.printSingularObjectField("name");
125
- fields.printSingularObjectField("typeCondition");
126
- fields.printNullablePluralField("directives", node.getDirectives());
127
- fields.printSingularObjectField("selectionSet");
128
-
129
- endVisitNode(fields.finishPrinting());
130
- }
131
-
132
- bool JsonVisitor::visitVariable(const Variable &node) {
133
- visitNode();
134
- return true;
135
- }
136
-
137
- void JsonVisitor::endVisitVariable(const Variable &node) {
138
- NodeFieldPrinter fields(*this, "Variable", node);
139
- fields.printSingularObjectField("name");
140
-
141
- endVisitNode(fields.finishPrinting());
142
- }
143
-
144
- void JsonVisitor::endVisitIntValue(const IntValue &node) {
145
- NodeFieldPrinter fields(*this, "IntValue", node);
146
- fields.printSingularPrimitiveField("value", node.getValue());
147
-
148
- printed_.back().emplace_back(fields.finishPrinting());
149
- }
150
-
151
- void JsonVisitor::endVisitFloatValue(const FloatValue &node) {
152
- NodeFieldPrinter fields(*this, "FloatValue", node);
153
- fields.printSingularPrimitiveField("value", node.getValue());
154
-
155
- printed_.back().emplace_back(fields.finishPrinting());
156
- }
157
-
158
- void JsonVisitor::endVisitStringValue(const StringValue &node) {
159
- NodeFieldPrinter fields(*this, "StringValue", node);
160
- fields.printSingularPrimitiveField("value", node.getValue());
161
-
162
- printed_.back().emplace_back(fields.finishPrinting());
163
- }
164
-
165
- void JsonVisitor::endVisitBooleanValue(const BooleanValue &node) {
166
- NodeFieldPrinter fields(*this, "BooleanValue", node);
167
- fields.printSingularBooleanField("value", node.getValue());
168
-
169
- printed_.back().emplace_back(fields.finishPrinting());
170
- }
171
-
172
- void JsonVisitor::endVisitNullValue(const NullValue &node) {
173
- NodeFieldPrinter fields(*this, "NullValue", node);
174
-
175
- printed_.back().emplace_back(fields.finishPrinting());
176
- }
177
-
178
- void JsonVisitor::endVisitEnumValue(const EnumValue &node) {
179
- NodeFieldPrinter fields(*this, "EnumValue", node);
180
- fields.printSingularPrimitiveField("value", node.getValue());
181
-
182
- printed_.back().emplace_back(fields.finishPrinting());
183
- }
184
-
185
- bool JsonVisitor::visitListValue(const ListValue &node) {
186
- visitNode();
187
- return true;
188
- }
189
-
190
- void JsonVisitor::endVisitListValue(const ListValue &node) {
191
- NodeFieldPrinter fields(*this, "ListValue", node);
192
- fields.printPluralField("values", node.getValues());
193
-
194
- endVisitNode(fields.finishPrinting());
195
- }
196
-
197
- bool JsonVisitor::visitObjectValue(const ObjectValue &node) {
198
- visitNode();
199
- return true;
200
- }
201
-
202
- void JsonVisitor::endVisitObjectValue(const ObjectValue &node) {
203
- NodeFieldPrinter fields(*this, "ObjectValue", node);
204
- fields.printPluralField("fields", node.getFields());
205
-
206
- endVisitNode(fields.finishPrinting());
207
- }
208
-
209
- bool JsonVisitor::visitObjectField(const ObjectField &node) {
210
- visitNode();
211
- return true;
212
- }
213
-
214
- void JsonVisitor::endVisitObjectField(const ObjectField &node) {
215
- NodeFieldPrinter fields(*this, "ObjectField", node);
216
- fields.printSingularObjectField("name");
217
- fields.printSingularObjectField("value");
218
-
219
- endVisitNode(fields.finishPrinting());
220
- }
221
-
222
- bool JsonVisitor::visitDirective(const Directive &node) {
223
- visitNode();
224
- return true;
225
- }
226
-
227
- void JsonVisitor::endVisitDirective(const Directive &node) {
228
- NodeFieldPrinter fields(*this, "Directive", node);
229
- fields.printSingularObjectField("name");
230
- fields.printNullablePluralField("arguments", node.getArguments());
231
-
232
- endVisitNode(fields.finishPrinting());
233
- }
234
-
235
- bool JsonVisitor::visitNamedType(const NamedType &node) {
236
- visitNode();
237
- return true;
238
- }
239
-
240
- void JsonVisitor::endVisitNamedType(const NamedType &node) {
241
- NodeFieldPrinter fields(*this, "NamedType", node);
242
- fields.printSingularObjectField("name");
243
-
244
- endVisitNode(fields.finishPrinting());
245
- }
246
-
247
- bool JsonVisitor::visitListType(const ListType &node) {
248
- visitNode();
249
- return true;
250
- }
251
-
252
- void JsonVisitor::endVisitListType(const ListType &node) {
253
- NodeFieldPrinter fields(*this, "ListType", node);
254
- fields.printSingularObjectField("type");
255
-
256
- endVisitNode(fields.finishPrinting());
257
- }
258
-
259
- bool JsonVisitor::visitNonNullType(const NonNullType &node) {
260
- visitNode();
261
- return true;
262
- }
263
-
264
- void JsonVisitor::endVisitNonNullType(const NonNullType &node) {
265
- NodeFieldPrinter fields(*this, "NonNullType", node);
266
- fields.printSingularObjectField("type");
267
-
268
- endVisitNode(fields.finishPrinting());
269
- }
270
-
271
- void JsonVisitor::endVisitName(const Name &node) {
272
- NodeFieldPrinter fields(*this, "Name", node);
273
- fields.printSingularPrimitiveField("value", node.getValue());
274
-
275
- printed_.back().emplace_back(fields.finishPrinting());
276
- }
277
-
278
- bool JsonVisitor::visitSchemaDefinition(const SchemaDefinition &node) {
279
- visitNode();
280
- return true;
281
- }
282
-
283
- void JsonVisitor::endVisitSchemaDefinition(const SchemaDefinition &node) {
284
- NodeFieldPrinter fields(*this, "SchemaDefinition", node);
285
- fields.printNullablePluralField("directives", node.getDirectives());
286
- fields.printPluralField("operationTypes", node.getOperationTypes());
287
-
288
- endVisitNode(fields.finishPrinting());
289
- }
290
-
291
- bool JsonVisitor::visitOperationTypeDefinition(const OperationTypeDefinition &node) {
292
- visitNode();
293
- return true;
294
- }
295
-
296
- void JsonVisitor::endVisitOperationTypeDefinition(const OperationTypeDefinition &node) {
297
- NodeFieldPrinter fields(*this, "OperationTypeDefinition", node);
298
- fields.printSingularPrimitiveField("operation", node.getOperation());
299
- fields.printSingularObjectField("type");
300
-
301
- endVisitNode(fields.finishPrinting());
302
- }
303
-
304
- bool JsonVisitor::visitScalarTypeDefinition(const ScalarTypeDefinition &node) {
305
- visitNode();
306
- return true;
307
- }
308
-
309
- void JsonVisitor::endVisitScalarTypeDefinition(const ScalarTypeDefinition &node) {
310
- NodeFieldPrinter fields(*this, "ScalarTypeDefinition", node);
311
- fields.printSingularObjectField("name");
312
- fields.printNullablePluralField("directives", node.getDirectives());
313
-
314
- endVisitNode(fields.finishPrinting());
315
- }
316
-
317
- bool JsonVisitor::visitObjectTypeDefinition(const ObjectTypeDefinition &node) {
318
- visitNode();
319
- return true;
320
- }
321
-
322
- void JsonVisitor::endVisitObjectTypeDefinition(const ObjectTypeDefinition &node) {
323
- NodeFieldPrinter fields(*this, "ObjectTypeDefinition", node);
324
- fields.printSingularObjectField("name");
325
- fields.printNullablePluralField("interfaces", node.getInterfaces());
326
- fields.printNullablePluralField("directives", node.getDirectives());
327
- fields.printPluralField("fields", node.getFields());
328
-
329
- endVisitNode(fields.finishPrinting());
330
- }
331
-
332
- bool JsonVisitor::visitFieldDefinition(const FieldDefinition &node) {
333
- visitNode();
334
- return true;
335
- }
336
-
337
- void JsonVisitor::endVisitFieldDefinition(const FieldDefinition &node) {
338
- NodeFieldPrinter fields(*this, "FieldDefinition", node);
339
- fields.printSingularObjectField("name");
340
- fields.printNullablePluralField("arguments", node.getArguments());
341
- fields.printSingularObjectField("type");
342
- fields.printNullablePluralField("directives", node.getDirectives());
343
-
344
- endVisitNode(fields.finishPrinting());
345
- }
346
-
347
- bool JsonVisitor::visitInputValueDefinition(const InputValueDefinition &node) {
348
- visitNode();
349
- return true;
350
- }
351
-
352
- void JsonVisitor::endVisitInputValueDefinition(const InputValueDefinition &node) {
353
- NodeFieldPrinter fields(*this, "InputValueDefinition", node);
354
- fields.printSingularObjectField("name");
355
- fields.printSingularObjectField("type");
356
- fields.printNullableSingularObjectField("defaultValue", node.getDefaultValue());
357
- fields.printNullablePluralField("directives", node.getDirectives());
358
-
359
- endVisitNode(fields.finishPrinting());
360
- }
361
-
362
- bool JsonVisitor::visitInterfaceTypeDefinition(const InterfaceTypeDefinition &node) {
363
- visitNode();
364
- return true;
365
- }
366
-
367
- void JsonVisitor::endVisitInterfaceTypeDefinition(const InterfaceTypeDefinition &node) {
368
- NodeFieldPrinter fields(*this, "InterfaceTypeDefinition", node);
369
- fields.printSingularObjectField("name");
370
- fields.printNullablePluralField("directives", node.getDirectives());
371
- fields.printPluralField("fields", node.getFields());
372
-
373
- endVisitNode(fields.finishPrinting());
374
- }
375
-
376
- bool JsonVisitor::visitUnionTypeDefinition(const UnionTypeDefinition &node) {
377
- visitNode();
378
- return true;
379
- }
380
-
381
- void JsonVisitor::endVisitUnionTypeDefinition(const UnionTypeDefinition &node) {
382
- NodeFieldPrinter fields(*this, "UnionTypeDefinition", node);
383
- fields.printSingularObjectField("name");
384
- fields.printNullablePluralField("directives", node.getDirectives());
385
- fields.printPluralField("types", node.getTypes());
386
-
387
- endVisitNode(fields.finishPrinting());
388
- }
389
-
390
- bool JsonVisitor::visitEnumTypeDefinition(const EnumTypeDefinition &node) {
391
- visitNode();
392
- return true;
393
- }
394
-
395
- void JsonVisitor::endVisitEnumTypeDefinition(const EnumTypeDefinition &node) {
396
- NodeFieldPrinter fields(*this, "EnumTypeDefinition", node);
397
- fields.printSingularObjectField("name");
398
- fields.printNullablePluralField("directives", node.getDirectives());
399
- fields.printPluralField("values", node.getValues());
400
-
401
- endVisitNode(fields.finishPrinting());
402
- }
403
-
404
- bool JsonVisitor::visitEnumValueDefinition(const EnumValueDefinition &node) {
405
- visitNode();
406
- return true;
407
- }
408
-
409
- void JsonVisitor::endVisitEnumValueDefinition(const EnumValueDefinition &node) {
410
- NodeFieldPrinter fields(*this, "EnumValueDefinition", node);
411
- fields.printSingularObjectField("name");
412
- fields.printNullablePluralField("directives", node.getDirectives());
413
-
414
- endVisitNode(fields.finishPrinting());
415
- }
416
-
417
- bool JsonVisitor::visitInputObjectTypeDefinition(const InputObjectTypeDefinition &node) {
418
- visitNode();
419
- return true;
420
- }
421
-
422
- void JsonVisitor::endVisitInputObjectTypeDefinition(const InputObjectTypeDefinition &node) {
423
- NodeFieldPrinter fields(*this, "InputObjectTypeDefinition", node);
424
- fields.printSingularObjectField("name");
425
- fields.printNullablePluralField("directives", node.getDirectives());
426
- fields.printPluralField("fields", node.getFields());
427
-
428
- endVisitNode(fields.finishPrinting());
429
- }
430
-
431
- bool JsonVisitor::visitTypeExtensionDefinition(const TypeExtensionDefinition &node) {
432
- visitNode();
433
- return true;
434
- }
435
-
436
- void JsonVisitor::endVisitTypeExtensionDefinition(const TypeExtensionDefinition &node) {
437
- NodeFieldPrinter fields(*this, "TypeExtensionDefinition", node);
438
- fields.printSingularObjectField("definition");
439
-
440
- endVisitNode(fields.finishPrinting());
441
- }
442
-
443
- bool JsonVisitor::visitDirectiveDefinition(const DirectiveDefinition &node) {
444
- visitNode();
445
- return true;
446
- }
447
-
448
- void JsonVisitor::endVisitDirectiveDefinition(const DirectiveDefinition &node) {
449
- NodeFieldPrinter fields(*this, "DirectiveDefinition", node);
450
- fields.printSingularObjectField("name");
451
- fields.printNullablePluralField("arguments", node.getArguments());
452
- fields.printPluralField("locations", node.getLocations());
453
-
454
- endVisitNode(fields.finishPrinting());
455
- }
456
-
@@ -1,121 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #pragma once
9
-
10
- #include "AstNode.h"
11
- #include "AstVisitor.h"
12
-
13
- #include <sstream>
14
- #include <vector>
15
-
16
- namespace facebook {
17
- namespace graphql {
18
- namespace ast {
19
- namespace visitor {
20
-
21
- /**
22
- * Produces a JSON string describing the visited AST, in a format that
23
- * would be a valid graphql-js AST when parsed.
24
- */
25
- class JsonVisitor : public AstVisitor {
26
- private:
27
- using ChildrenList = std::vector<std::string>;
28
- // Stack of lists of printed children.
29
- // Postvisit method precondition: printed.back() contains strings
30
- // for this node's children.
31
- // Postvisit method postcondition: *(printed.rbegin() - 1) has had this
32
- std::vector<ChildrenList> printed_;
33
-
34
- // Interface to print fields for each kind of node.
35
- // Note that, because of the post-order traversal for printing,
36
- // field values need not be passed explicitly; they are grabbed from
37
- // the passed-in visitor!
38
- class NodeFieldPrinter {
39
- private:
40
- JsonVisitor &visitor_;
41
- ChildrenList::const_iterator nextChild_;
42
- std::ostringstream out_;
43
-
44
- void printFieldSeparator();
45
-
46
- // Prints a non-null array of n children from the given
47
- // iterator. Does not update the iterator.
48
- void printChildList(
49
- std::ostringstream &out,
50
- const std::vector<std::string>::const_iterator &childIterator,
51
- size_t numChildren);
52
-
53
- void printLocation(std::ostringstream &out, const yy::location &location);
54
-
55
- public:
56
- // Begin printing the fields for a node of the given kind at the
57
- // given location.
58
- NodeFieldPrinter(
59
- JsonVisitor &visitor,
60
- const char *nodeKind,
61
- const Node &node);
62
-
63
- std::string finishPrinting();
64
-
65
- void printSingularPrimitiveField(const char *fieldName, const char *value);
66
- void printSingularBooleanField(const char *fieldName, bool value);
67
- void printSingularObjectField(const char *fieldName);
68
- void printNullableSingularObjectField(const char *fieldName, const void *value);
69
-
70
- template <typename T>
71
- void printPluralField(
72
- const char *fieldName,
73
- const std::vector<std::unique_ptr<T>> &value) {
74
- printFieldSeparator();
75
- out_ << '"' << fieldName << "\":";
76
- printChildList(out_, nextChild_, value.size());
77
- nextChild_ += value.size();
78
- }
79
-
80
- template <typename T>
81
- void printNullablePluralField(
82
- const char *fieldName,
83
- const std::vector<std::unique_ptr<T>> *value) {
84
- printFieldSeparator();
85
- out_ << '"' << fieldName << "\":";
86
- if (value == nullptr) {
87
- out_ << "null";
88
- } else {
89
- printChildList(out_, nextChild_, value->size());
90
- nextChild_ += value->size();
91
- }
92
- }
93
- };
94
-
95
- // Must be called at the start of all visit methods for node types
96
- // that have children. Maintains printed_.
97
- void visitNode();
98
-
99
- // Must be called at the end of all visit methods for node types
100
- // that have children, passing the text for this node. Maintains
101
- // printed_.
102
- void endVisitNode(std::string &&str);
103
-
104
- // Prints one of the many FooValue types that is prepresented with a
105
- // single string.
106
- template <typename ValueNode>
107
- void endVisitValueRepresentedAsString(const char *valueKind, const ValueNode &value);
108
-
109
- public:
110
- JsonVisitor();
111
- ~JsonVisitor() {}
112
-
113
- std::string getResult() const;
114
-
115
- #include "JsonVisitor.h.inc"
116
- };
117
-
118
- }
119
- }
120
- }
121
- }
@@ -1,110 +0,0 @@
1
- /**
2
- * Copyright 2019-present GraphQL Foundation
3
- * This source code is licensed under the MIT license found in the
4
- * LICENSE file in the root directory of this source tree.
5
- */
6
- /** @generated */
7
- bool visitDocument(const Document &node) override;
8
- void endVisitDocument(const Document &node) override;
9
-
10
- bool visitOperationDefinition(const OperationDefinition &node) override;
11
- void endVisitOperationDefinition(const OperationDefinition &node) override;
12
-
13
- bool visitVariableDefinition(const VariableDefinition &node) override;
14
- void endVisitVariableDefinition(const VariableDefinition &node) override;
15
-
16
- bool visitSelectionSet(const SelectionSet &node) override;
17
- void endVisitSelectionSet(const SelectionSet &node) override;
18
-
19
- bool visitField(const Field &node) override;
20
- void endVisitField(const Field &node) override;
21
-
22
- bool visitArgument(const Argument &node) override;
23
- void endVisitArgument(const Argument &node) override;
24
-
25
- bool visitFragmentSpread(const FragmentSpread &node) override;
26
- void endVisitFragmentSpread(const FragmentSpread &node) override;
27
-
28
- bool visitInlineFragment(const InlineFragment &node) override;
29
- void endVisitInlineFragment(const InlineFragment &node) override;
30
-
31
- bool visitFragmentDefinition(const FragmentDefinition &node) override;
32
- void endVisitFragmentDefinition(const FragmentDefinition &node) override;
33
-
34
- bool visitVariable(const Variable &node) override;
35
- void endVisitVariable(const Variable &node) override;
36
-
37
- void endVisitIntValue(const IntValue &node) override;
38
-
39
- void endVisitFloatValue(const FloatValue &node) override;
40
-
41
- void endVisitStringValue(const StringValue &node) override;
42
-
43
- void endVisitBooleanValue(const BooleanValue &node) override;
44
-
45
- void endVisitNullValue(const NullValue &node) override;
46
-
47
- void endVisitEnumValue(const EnumValue &node) override;
48
-
49
- bool visitListValue(const ListValue &node) override;
50
- void endVisitListValue(const ListValue &node) override;
51
-
52
- bool visitObjectValue(const ObjectValue &node) override;
53
- void endVisitObjectValue(const ObjectValue &node) override;
54
-
55
- bool visitObjectField(const ObjectField &node) override;
56
- void endVisitObjectField(const ObjectField &node) override;
57
-
58
- bool visitDirective(const Directive &node) override;
59
- void endVisitDirective(const Directive &node) override;
60
-
61
- bool visitNamedType(const NamedType &node) override;
62
- void endVisitNamedType(const NamedType &node) override;
63
-
64
- bool visitListType(const ListType &node) override;
65
- void endVisitListType(const ListType &node) override;
66
-
67
- bool visitNonNullType(const NonNullType &node) override;
68
- void endVisitNonNullType(const NonNullType &node) override;
69
-
70
- void endVisitName(const Name &node) override;
71
-
72
- bool visitSchemaDefinition(const SchemaDefinition &node) override;
73
- void endVisitSchemaDefinition(const SchemaDefinition &node) override;
74
-
75
- bool visitOperationTypeDefinition(const OperationTypeDefinition &node) override;
76
- void endVisitOperationTypeDefinition(const OperationTypeDefinition &node) override;
77
-
78
- bool visitScalarTypeDefinition(const ScalarTypeDefinition &node) override;
79
- void endVisitScalarTypeDefinition(const ScalarTypeDefinition &node) override;
80
-
81
- bool visitObjectTypeDefinition(const ObjectTypeDefinition &node) override;
82
- void endVisitObjectTypeDefinition(const ObjectTypeDefinition &node) override;
83
-
84
- bool visitFieldDefinition(const FieldDefinition &node) override;
85
- void endVisitFieldDefinition(const FieldDefinition &node) override;
86
-
87
- bool visitInputValueDefinition(const InputValueDefinition &node) override;
88
- void endVisitInputValueDefinition(const InputValueDefinition &node) override;
89
-
90
- bool visitInterfaceTypeDefinition(const InterfaceTypeDefinition &node) override;
91
- void endVisitInterfaceTypeDefinition(const InterfaceTypeDefinition &node) override;
92
-
93
- bool visitUnionTypeDefinition(const UnionTypeDefinition &node) override;
94
- void endVisitUnionTypeDefinition(const UnionTypeDefinition &node) override;
95
-
96
- bool visitEnumTypeDefinition(const EnumTypeDefinition &node) override;
97
- void endVisitEnumTypeDefinition(const EnumTypeDefinition &node) override;
98
-
99
- bool visitEnumValueDefinition(const EnumValueDefinition &node) override;
100
- void endVisitEnumValueDefinition(const EnumValueDefinition &node) override;
101
-
102
- bool visitInputObjectTypeDefinition(const InputObjectTypeDefinition &node) override;
103
- void endVisitInputObjectTypeDefinition(const InputObjectTypeDefinition &node) override;
104
-
105
- bool visitTypeExtensionDefinition(const TypeExtensionDefinition &node) override;
106
- void endVisitTypeExtensionDefinition(const TypeExtensionDefinition &node) override;
107
-
108
- bool visitDirectiveDefinition(const DirectiveDefinition &node) override;
109
- void endVisitDirectiveDefinition(const DirectiveDefinition &node) override;
110
-
@@ -1 +0,0 @@
1
- 0.7.0