graphql 1.9.0.pre1 → 1.9.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (235) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql.rb +5 -1
  3. data/lib/graphql/analysis/ast/analyzer.rb +1 -1
  4. data/lib/graphql/analysis/ast/visitor.rb +6 -1
  5. data/lib/graphql/backwards_compatibility.rb +1 -1
  6. data/lib/graphql/dig.rb +19 -0
  7. data/lib/graphql/directive.rb +13 -1
  8. data/lib/graphql/directive/include_directive.rb +1 -7
  9. data/lib/graphql/directive/skip_directive.rb +1 -8
  10. data/lib/graphql/execution/interpreter.rb +23 -13
  11. data/lib/graphql/execution/interpreter/resolve.rb +56 -0
  12. data/lib/graphql/execution/interpreter/runtime.rb +174 -74
  13. data/lib/graphql/execution/lazy.rb +7 -1
  14. data/lib/graphql/execution/lookahead.rb +71 -6
  15. data/lib/graphql/execution_error.rb +1 -1
  16. data/lib/graphql/introspection/entry_points.rb +5 -1
  17. data/lib/graphql/introspection/type_type.rb +4 -4
  18. data/lib/graphql/language.rb +0 -1
  19. data/lib/graphql/language/block_string.rb +37 -0
  20. data/lib/graphql/language/document_from_schema_definition.rb +1 -1
  21. data/lib/graphql/language/lexer.rb +55 -36
  22. data/lib/graphql/language/lexer.rl +8 -3
  23. data/lib/graphql/language/nodes.rb +27 -4
  24. data/lib/graphql/language/parser.rb +55 -55
  25. data/lib/graphql/language/parser.y +11 -11
  26. data/lib/graphql/language/printer.rb +1 -1
  27. data/lib/graphql/language/visitor.rb +22 -13
  28. data/lib/graphql/literal_validation_error.rb +6 -0
  29. data/lib/graphql/query.rb +13 -0
  30. data/lib/graphql/query/arguments.rb +2 -1
  31. data/lib/graphql/query/context.rb +3 -10
  32. data/lib/graphql/query/executor.rb +1 -1
  33. data/lib/graphql/query/validation_pipeline.rb +1 -1
  34. data/lib/graphql/relay/connection_resolve.rb +1 -1
  35. data/lib/graphql/relay/relation_connection.rb +1 -1
  36. data/lib/graphql/schema.rb +81 -11
  37. data/lib/graphql/schema/argument.rb +1 -1
  38. data/lib/graphql/schema/build_from_definition.rb +2 -4
  39. data/lib/graphql/schema/directive.rb +103 -0
  40. data/lib/graphql/schema/directive/feature.rb +66 -0
  41. data/lib/graphql/schema/directive/include.rb +25 -0
  42. data/lib/graphql/schema/directive/skip.rb +25 -0
  43. data/lib/graphql/schema/directive/transform.rb +48 -0
  44. data/lib/graphql/schema/enum_value.rb +2 -2
  45. data/lib/graphql/schema/field.rb +63 -17
  46. data/lib/graphql/schema/input_object.rb +1 -0
  47. data/lib/graphql/schema/member/base_dsl_methods.rb +4 -2
  48. data/lib/graphql/schema/member/build_type.rb +33 -1
  49. data/lib/graphql/schema/member/has_fields.rb +8 -73
  50. data/lib/graphql/schema/relay_classic_mutation.rb +6 -1
  51. data/lib/graphql/schema/resolver.rb +1 -1
  52. data/lib/graphql/static_validation.rb +2 -1
  53. data/lib/graphql/static_validation/all_rules.rb +1 -0
  54. data/lib/graphql/static_validation/base_visitor.rb +25 -10
  55. data/lib/graphql/static_validation/definition_dependencies.rb +3 -3
  56. data/lib/graphql/static_validation/{message.rb → error.rb} +11 -11
  57. data/lib/graphql/static_validation/interpreter_visitor.rb +14 -0
  58. data/lib/graphql/static_validation/literal_validator.rb +54 -11
  59. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +34 -5
  60. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +31 -0
  61. data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +2 -2
  62. data/lib/graphql/static_validation/rules/argument_names_are_unique_error.rb +30 -0
  63. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +7 -1
  64. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +35 -0
  65. data/lib/graphql/static_validation/rules/directives_are_defined.rb +5 -1
  66. data/lib/graphql/static_validation/rules/directives_are_defined_error.rb +29 -0
  67. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +11 -2
  68. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations_error.rb +31 -0
  69. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +11 -2
  70. data/lib/graphql/static_validation/rules/fields_are_defined_on_type_error.rb +32 -0
  71. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +14 -2
  72. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections_error.rb +31 -0
  73. data/lib/graphql/static_validation/rules/fields_will_merge.rb +24 -6
  74. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +32 -0
  75. data/lib/graphql/static_validation/rules/fragment_names_are_unique.rb +5 -1
  76. data/lib/graphql/static_validation/rules/fragment_names_are_unique_error.rb +29 -0
  77. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +8 -1
  78. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible_error.rb +35 -0
  79. data/lib/graphql/static_validation/rules/fragment_types_exist.rb +5 -1
  80. data/lib/graphql/static_validation/rules/fragment_types_exist_error.rb +29 -0
  81. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +6 -1
  82. data/lib/graphql/static_validation/rules/fragments_are_finite_error.rb +29 -0
  83. data/lib/graphql/static_validation/rules/fragments_are_named.rb +4 -1
  84. data/lib/graphql/static_validation/rules/fragments_are_named_error.rb +26 -0
  85. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +5 -1
  86. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types_error.rb +30 -0
  87. data/lib/graphql/static_validation/rules/fragments_are_used.rb +13 -3
  88. data/lib/graphql/static_validation/rules/fragments_are_used_error.rb +29 -0
  89. data/lib/graphql/static_validation/rules/mutation_root_exists.rb +4 -1
  90. data/lib/graphql/static_validation/rules/mutation_root_exists_error.rb +26 -0
  91. data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +2 -2
  92. data/lib/graphql/static_validation/rules/no_definitions_are_present_error.rb +25 -0
  93. data/lib/graphql/static_validation/rules/operation_names_are_valid.rb +9 -2
  94. data/lib/graphql/static_validation/rules/operation_names_are_valid_error.rb +28 -0
  95. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +7 -1
  96. data/lib/graphql/static_validation/rules/required_arguments_are_present_error.rb +35 -0
  97. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +47 -0
  98. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present_error.rb +35 -0
  99. data/lib/graphql/static_validation/rules/subscription_root_exists.rb +4 -1
  100. data/lib/graphql/static_validation/rules/subscription_root_exists_error.rb +26 -0
  101. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +4 -3
  102. data/lib/graphql/static_validation/rules/unique_directives_per_location_error.rb +29 -0
  103. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +20 -6
  104. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed_error.rb +39 -0
  105. data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +5 -1
  106. data/lib/graphql/static_validation/rules/variable_names_are_unique_error.rb +29 -0
  107. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +8 -1
  108. data/lib/graphql/static_validation/rules/variable_usages_are_allowed_error.rb +38 -0
  109. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +12 -2
  110. data/lib/graphql/static_validation/rules/variables_are_input_types_error.rb +32 -0
  111. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +18 -2
  112. data/lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb +37 -0
  113. data/lib/graphql/static_validation/validator.rb +24 -14
  114. data/lib/graphql/tracing/new_relic_tracing.rb +2 -2
  115. data/lib/graphql/tracing/skylight_tracing.rb +2 -2
  116. data/lib/graphql/unauthorized_field_error.rb +23 -0
  117. data/lib/graphql/version.rb +1 -1
  118. data/spec/graphql/analysis/ast_spec.rb +40 -0
  119. data/spec/graphql/authorization_spec.rb +93 -20
  120. data/spec/graphql/base_type_spec.rb +3 -1
  121. data/spec/graphql/execution/interpreter_spec.rb +127 -4
  122. data/spec/graphql/execution/lazy_spec.rb +49 -0
  123. data/spec/graphql/execution/lookahead_spec.rb +113 -21
  124. data/spec/graphql/execution/multiplex_spec.rb +2 -1
  125. data/spec/graphql/introspection/type_type_spec.rb +1 -1
  126. data/spec/graphql/language/lexer_spec.rb +72 -3
  127. data/spec/graphql/language/printer_spec.rb +18 -6
  128. data/spec/graphql/query/arguments_spec.rb +21 -0
  129. data/spec/graphql/query/context_spec.rb +10 -0
  130. data/spec/graphql/schema/build_from_definition_spec.rb +144 -29
  131. data/spec/graphql/schema/directive/feature_spec.rb +81 -0
  132. data/spec/graphql/schema/directive/transform_spec.rb +39 -0
  133. data/spec/graphql/schema/enum_spec.rb +5 -3
  134. data/spec/graphql/schema/field_extension_spec.rb +3 -3
  135. data/spec/graphql/schema/field_spec.rb +19 -0
  136. data/spec/graphql/schema/input_object_spec.rb +81 -0
  137. data/spec/graphql/schema/member/build_type_spec.rb +46 -0
  138. data/spec/graphql/schema/member/scoped_spec.rb +3 -3
  139. data/spec/graphql/schema/printer_spec.rb +244 -96
  140. data/spec/graphql/schema/relay_classic_mutation_spec.rb +26 -0
  141. data/spec/graphql/schema/resolver_spec.rb +1 -1
  142. data/spec/graphql/schema/warden_spec.rb +35 -11
  143. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +212 -72
  144. data/spec/graphql/static_validation/rules/argument_names_are_unique_spec.rb +2 -2
  145. data/spec/graphql/static_validation/rules/arguments_are_defined_spec.rb +72 -29
  146. data/spec/graphql/static_validation/rules/directives_are_defined_spec.rb +4 -2
  147. data/spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb +4 -2
  148. data/spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb +10 -5
  149. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +10 -5
  150. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +2 -1
  151. data/spec/graphql/static_validation/rules/fragment_names_are_unique_spec.rb +2 -1
  152. data/spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb +6 -3
  153. data/spec/graphql/static_validation/rules/fragment_types_exist_spec.rb +4 -2
  154. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +4 -2
  155. data/spec/graphql/static_validation/rules/fragments_are_named_spec.rb +2 -1
  156. data/spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb +6 -3
  157. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +22 -2
  158. data/spec/graphql/static_validation/rules/mutation_root_exists_spec.rb +2 -1
  159. data/spec/graphql/static_validation/rules/operation_names_are_valid_spec.rb +6 -3
  160. data/spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb +13 -4
  161. data/spec/graphql/static_validation/rules/required_input_object_attributes_are_present_spec.rb +58 -0
  162. data/spec/graphql/static_validation/rules/subscription_root_exists_spec.rb +2 -1
  163. data/spec/graphql/static_validation/rules/unique_directives_per_location_spec.rb +14 -7
  164. data/spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb +14 -7
  165. data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +8 -4
  166. data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +8 -4
  167. data/spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb +6 -3
  168. data/spec/graphql/static_validation/validator_spec.rb +6 -4
  169. data/spec/graphql/tracing/new_relic_tracing_spec.rb +10 -0
  170. data/spec/graphql/tracing/skylight_tracing_spec.rb +10 -0
  171. data/spec/graphql/types/iso_8601_date_time_spec.rb +1 -2
  172. data/spec/integration/mongoid/star_trek/schema.rb +5 -5
  173. data/spec/integration/rails/graphql/relay/relation_connection_spec.rb +37 -8
  174. data/spec/integration/rails/graphql/schema_spec.rb +2 -2
  175. data/spec/integration/rails/spec_helper.rb +10 -0
  176. data/spec/integration/tmp/app/graphql/types/bird_type.rb +7 -0
  177. data/spec/integration/tmp/dummy/Gemfile +45 -0
  178. data/spec/integration/tmp/dummy/README.rdoc +28 -0
  179. data/spec/integration/tmp/dummy/Rakefile +6 -0
  180. data/spec/integration/tmp/dummy/app/assets/javascripts/application.js +16 -0
  181. data/spec/integration/tmp/dummy/app/assets/stylesheets/application.css +15 -0
  182. data/spec/integration/tmp/dummy/app/controllers/application_controller.rb +5 -0
  183. data/spec/integration/tmp/dummy/app/controllers/graphql_controller.rb +43 -0
  184. data/spec/integration/tmp/dummy/app/graphql/dummy_schema.rb +34 -0
  185. data/spec/integration/tmp/dummy/app/graphql/types/base_enum.rb +4 -0
  186. data/spec/integration/tmp/dummy/app/graphql/types/base_input_object.rb +4 -0
  187. data/spec/integration/tmp/dummy/app/graphql/types/base_interface.rb +5 -0
  188. data/spec/integration/tmp/dummy/app/graphql/types/base_object.rb +4 -0
  189. data/spec/integration/tmp/dummy/app/graphql/types/base_scalar.rb +4 -0
  190. data/spec/integration/tmp/dummy/app/graphql/types/base_union.rb +4 -0
  191. data/spec/integration/tmp/dummy/app/graphql/types/mutation_type.rb +10 -0
  192. data/spec/integration/tmp/dummy/app/graphql/types/query_type.rb +15 -0
  193. data/spec/integration/tmp/dummy/app/helpers/application_helper.rb +2 -0
  194. data/spec/integration/tmp/dummy/app/views/layouts/application.html.erb +14 -0
  195. data/spec/integration/tmp/dummy/bin/bundle +3 -0
  196. data/spec/integration/tmp/dummy/bin/rails +4 -0
  197. data/spec/integration/tmp/dummy/bin/rake +4 -0
  198. data/spec/integration/tmp/dummy/bin/setup +29 -0
  199. data/spec/integration/tmp/dummy/config.ru +4 -0
  200. data/spec/integration/tmp/dummy/config/application.rb +32 -0
  201. data/spec/integration/tmp/dummy/config/boot.rb +3 -0
  202. data/spec/integration/tmp/dummy/config/environment.rb +5 -0
  203. data/spec/integration/tmp/dummy/config/environments/development.rb +38 -0
  204. data/spec/integration/tmp/dummy/config/environments/production.rb +76 -0
  205. data/spec/integration/tmp/dummy/config/environments/test.rb +42 -0
  206. data/spec/integration/tmp/dummy/config/initializers/assets.rb +11 -0
  207. data/spec/integration/tmp/dummy/config/initializers/backtrace_silencers.rb +7 -0
  208. data/spec/integration/tmp/dummy/config/initializers/cookies_serializer.rb +3 -0
  209. data/spec/integration/tmp/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  210. data/spec/integration/tmp/dummy/config/initializers/inflections.rb +16 -0
  211. data/spec/integration/tmp/dummy/config/initializers/mime_types.rb +4 -0
  212. data/spec/integration/tmp/dummy/config/initializers/session_store.rb +3 -0
  213. data/spec/integration/tmp/dummy/config/initializers/to_time_preserves_timezone.rb +10 -0
  214. data/spec/integration/tmp/dummy/config/initializers/wrap_parameters.rb +9 -0
  215. data/spec/integration/tmp/dummy/config/locales/en.yml +23 -0
  216. data/spec/integration/tmp/dummy/config/routes.rb +61 -0
  217. data/spec/integration/tmp/dummy/config/secrets.yml +22 -0
  218. data/spec/integration/tmp/dummy/db/seeds.rb +7 -0
  219. data/spec/integration/tmp/dummy/public/404.html +67 -0
  220. data/spec/integration/tmp/dummy/public/422.html +67 -0
  221. data/spec/integration/tmp/dummy/public/500.html +66 -0
  222. data/spec/integration/tmp/dummy/public/favicon.ico +0 -0
  223. data/spec/integration/tmp/dummy/public/robots.txt +5 -0
  224. data/spec/support/dummy/schema.rb +2 -2
  225. data/spec/support/error_bubbling_helpers.rb +23 -0
  226. data/spec/support/jazz.rb +53 -6
  227. data/spec/support/lazy_helpers.rb +26 -8
  228. data/spec/support/new_relic.rb +3 -0
  229. data/spec/support/skylight.rb +3 -0
  230. data/spec/support/star_wars/schema.rb +13 -9
  231. data/spec/support/static_validation_helpers.rb +3 -1
  232. metadata +145 -22
  233. data/lib/graphql/language/comments.rb +0 -45
  234. data/spec/graphql/schema/member/has_fields_spec.rb +0 -132
  235. data/spec/integration/tmp/app/graphql/types/family_type.rb +0 -9
@@ -37,9 +37,9 @@
37
37
  QUOTE = '"';
38
38
  BLOCK_QUOTE = '"""';
39
39
  ESCAPED_BLOCK_QUOTE = '\\"""';
40
- BLOCK_STRING_CHAR = (ESCAPED_BLOCK_QUOTE | ^'"""');
40
+ BLOCK_STRING_CHAR = (ESCAPED_BLOCK_QUOTE | ^QUOTE | QUOTE{1,2} ^QUOTE);
41
41
  ESCAPED_QUOTE = '\\"';
42
- STRING_CHAR = (ESCAPED_QUOTE | ^'"');
42
+ STRING_CHAR = (ESCAPED_QUOTE | ^QUOTE);
43
43
  VAR_SIGN = '$';
44
44
  DIR_SIGN = '@';
45
45
  ELLIPSIS = '...';
@@ -49,7 +49,7 @@
49
49
  AMP = '&';
50
50
 
51
51
  QUOTED_STRING = QUOTE STRING_CHAR* QUOTE;
52
- BLOCK_STRING = BLOCK_QUOTE BLOCK_STRING_CHAR* BLOCK_QUOTE;
52
+ BLOCK_STRING = BLOCK_QUOTE BLOCK_STRING_CHAR* QUOTE{0,2} BLOCK_QUOTE;
53
53
  # catch-all for anything else. must be at the bottom for precedence.
54
54
  UNKNOWN_CHAR = /./;
55
55
 
@@ -200,9 +200,13 @@ module GraphQL
200
200
  quotes_length = block ? 3 : 1
201
201
  ts += quotes_length
202
202
  value = meta[:data][ts...te - quotes_length].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
203
+ line_incr = 0
203
204
  if block
205
+ line_incr = value.count("\n")
204
206
  value = GraphQL::Language::BlockString.trim_whitespace(value)
205
207
  end
208
+ # TODO: replace with `String#match?` when we support only Ruby 2.4+
209
+ # (It's faster: https://bugs.ruby-lang.org/issues/8110)
206
210
  if value !~ VALID_STRING
207
211
  meta[:tokens] << token = GraphQL::Language::Token.new(
208
212
  name: :BAD_UNICODE_ESCAPE,
@@ -225,6 +229,7 @@ module GraphQL
225
229
 
226
230
  meta[:previous_token] = token
227
231
  meta[:col] += te - ts
232
+ meta[:line] += line_incr
228
233
  end
229
234
  end
230
235
  end
@@ -8,8 +8,18 @@ module GraphQL
8
8
  # - `children` returns all AST nodes attached to this one. Used for tree traversal.
9
9
  # - `scalars` returns all scalar (Ruby) values attached to this one. Used for comparing nodes.
10
10
  # - `to_query_string` turns an AST node into a GraphQL string
11
-
12
11
  class AbstractNode
12
+ module DefinitionNode
13
+ # This AST node's {#line} returns the first line, which may be the description.
14
+ # @return [Integer] The first line of the definition (not the description)
15
+ attr_reader :definition_line
16
+
17
+ def initialize(options = {})
18
+ @definition_line = options.delete(:definition_line)
19
+ super(options)
20
+ end
21
+ end
22
+
13
23
  attr_reader :line, :col, :filename
14
24
 
15
25
  # Initialize a node by extracting its position,
@@ -35,14 +45,16 @@ module GraphQL
35
45
  other.children.eql?(self.children)
36
46
  end
37
47
 
48
+ NO_CHILDREN = [].freeze
49
+
38
50
  # @return [Array<GraphQL::Language::Nodes::AbstractNode>] all nodes in the tree below this one
39
51
  def children
40
- []
52
+ NO_CHILDREN
41
53
  end
42
54
 
43
55
  # @return [Array<Integer, Float, String, Boolean, Array>] Scalar values attached to this node
44
56
  def scalars
45
- []
57
+ NO_CHILDREN
46
58
  end
47
59
 
48
60
  # This might be unnecessary, but its easiest to add it here.
@@ -267,7 +279,7 @@ module GraphQL
267
279
  # @return [String, Float, Integer, Boolean, Array, InputObject] The value passed for this key
268
280
 
269
281
  def children
270
- [value].flatten.select { |v| v.is_a?(AbstractNode) }
282
+ @children ||= Array(value).flatten.select { |v| v.is_a?(AbstractNode) }
271
283
  end
272
284
  end
273
285
 
@@ -280,6 +292,7 @@ module GraphQL
280
292
  end
281
293
 
282
294
  class DirectiveDefinition < AbstractNode
295
+ include DefinitionNode
283
296
  attr_reader :description
284
297
  scalar_methods :name
285
298
  children_methods(
@@ -507,6 +520,7 @@ module GraphQL
507
520
  end
508
521
 
509
522
  class SchemaDefinition < AbstractNode
523
+ include DefinitionNode
510
524
  scalar_methods :query, :mutation, :subscription
511
525
  children_methods({
512
526
  directives: GraphQL::Language::Nodes::Directive,
@@ -527,6 +541,7 @@ module GraphQL
527
541
  end
528
542
 
529
543
  class ScalarTypeDefinition < AbstractNode
544
+ include DefinitionNode
530
545
  attr_reader :description
531
546
  scalar_methods :name
532
547
  children_methods({
@@ -548,6 +563,7 @@ module GraphQL
548
563
  end
549
564
 
550
565
  class InputValueDefinition < AbstractNode
566
+ include DefinitionNode
551
567
  attr_reader :description
552
568
  scalar_methods :name, :type, :default_value
553
569
  children_methods({
@@ -559,6 +575,7 @@ module GraphQL
559
575
  end
560
576
 
561
577
  class FieldDefinition < AbstractNode
578
+ include DefinitionNode
562
579
  attr_reader :description
563
580
  scalar_methods :name, :type
564
581
  children_methods({
@@ -581,6 +598,7 @@ module GraphQL
581
598
  end
582
599
 
583
600
  class ObjectTypeDefinition < AbstractNode
601
+ include DefinitionNode
584
602
  attr_reader :description
585
603
  scalar_methods :name, :interfaces
586
604
  children_methods({
@@ -604,6 +622,7 @@ module GraphQL
604
622
  end
605
623
 
606
624
  class InterfaceTypeDefinition < AbstractNode
625
+ include DefinitionNode
607
626
  attr_reader :description
608
627
  scalar_methods :name
609
628
  children_methods({
@@ -627,6 +646,7 @@ module GraphQL
627
646
  end
628
647
 
629
648
  class UnionTypeDefinition < AbstractNode
649
+ include DefinitionNode
630
650
  attr_reader :description, :types
631
651
  scalar_methods :name
632
652
  children_methods({
@@ -649,6 +669,7 @@ module GraphQL
649
669
  end
650
670
 
651
671
  class EnumValueDefinition < AbstractNode
672
+ include DefinitionNode
652
673
  attr_reader :description
653
674
  scalar_methods :name
654
675
  children_methods({
@@ -660,6 +681,7 @@ module GraphQL
660
681
  end
661
682
 
662
683
  class EnumTypeDefinition < AbstractNode
684
+ include DefinitionNode
663
685
  attr_reader :description
664
686
  scalar_methods :name
665
687
  children_methods({
@@ -683,6 +705,7 @@ module GraphQL
683
705
  end
684
706
 
685
707
  class InputObjectTypeDefinition < AbstractNode
708
+ include DefinitionNode
686
709
  attr_reader :description
687
710
  scalar_methods :name
688
711
  children_methods({
@@ -476,24 +476,24 @@ racc_action_default = [
476
476
  -93, -97, -99, -99, -165, -160 ]
477
477
 
478
478
  racc_goto_table = [
479
- 10, 72, 59, 10, 91, 195, 129, 132, 133, 283,
480
- 164, 203, 68, 125, 175, 202, 102, 135, 92, 37,
481
- 259, 227, 37, 4, 301, 182, 39, 159, 235, 99,
482
- 304, 119, 271, 245, 274, 270, 118, 2, 140, 271,
483
- 171, 274, 274, 167, 153, 88, 311, 139, 97, 143,
484
- 145, 147, 149, 134, 177, 103, 175, 281, 1, 288,
485
- 161, 256, 99, 95, 231, 202, 313, 40, 183, 3,
486
- 117, 258, 141, 266, 121, 165, 241, 127, 152, 292,
487
- 221, 248, 249, 224, 179, 202, 252, 276, 144, 146,
488
- 148, 150, 151, 255, 154, 155, 156, 157, 286, 99,
489
- 124, 137, 202, 99, 67, 99, 251, 99, 236, 99,
490
- 264, 170, 294, 246, 240, 173, nil, 91, 264, 247,
491
- nil, nil, 172, 180, nil, nil, 41, 65, 264, nil,
492
- nil, 202, nil, nil, 189, 137, nil, 202, 137, 99,
493
- nil, nil, nil, nil, nil, nil, nil, 197, nil, 264,
494
- 202, nil, nil, 202, nil, nil, nil, nil, nil, 264,
495
- nil, nil, nil, nil, nil, nil, nil, nil, 201, nil,
496
- nil, nil, nil, nil, nil, 65, nil, 137, nil, nil,
479
+ 10, 72, 59, 10, 91, 195, 129, 164, 133, 68,
480
+ 102, 203, 283, 259, 227, 202, 92, 175, 119, 37,
481
+ 125, 235, 37, 274, 182, 270, 245, 135, 271, 99,
482
+ 274, 274, 301, 140, 118, 271, 141, 132, 304, 153,
483
+ 171, 139, 152, 143, 145, 147, 149, 161, 97, 2,
484
+ 167, 134, 288, 236, 311, 103, 88, 159, 246, 175,
485
+ 95, 256, 99, 231, 177, 202, 266, 240, 4, 313,
486
+ 117, 39, 247, 165, 121, 281, 241, 127, 179, 1,
487
+ 276, 248, 249, 252, 40, 202, 183, 3, 144, 146,
488
+ 148, 150, 151, 258, 154, 155, 156, 157, 286, 99,
489
+ 292, 137, 202, 99, 255, 99, 251, 99, 124, 99,
490
+ 221, 170, 294, 224, 67, 173, nil, 91, nil, nil,
491
+ nil, nil, 172, 180, 264, nil, 41, 65, nil, nil,
492
+ nil, 202, 264, nil, 189, 137, nil, 202, 137, 99,
493
+ nil, nil, 264, nil, nil, nil, nil, 197, nil, nil,
494
+ 202, nil, nil, 202, nil, nil, nil, nil, nil, nil,
495
+ nil, nil, nil, 264, nil, nil, nil, nil, 201, nil,
496
+ nil, nil, nil, 264, nil, 65, nil, 137, nil, nil,
497
497
  nil, nil, nil, nil, nil, nil, nil, 100, nil, nil,
498
498
  104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
499
499
  114, 115, nil, nil, nil, nil, 238, 242, 308, 122,
@@ -520,24 +520,24 @@ racc_goto_table = [
520
520
  nil, nil, nil, nil, nil, nil, 309, nil, 293 ]
521
521
 
522
522
  racc_goto_check = [
523
- 10, 13, 15, 10, 23, 79, 19, 14, 19, 20,
524
- 22, 36, 28, 35, 55, 29, 48, 54, 27, 32,
525
- 45, 71, 32, 4, 21, 76, 4, 14, 71, 49,
526
- 21, 18, 31, 71, 78, 30, 17, 2, 70, 31,
527
- 19, 78, 78, 35, 70, 12, 21, 48, 13, 48,
528
- 48, 48, 48, 27, 54, 13, 55, 81, 1, 45,
529
- 18, 36, 49, 28, 76, 29, 20, 11, 77, 3,
530
- 13, 44, 72, 71, 13, 27, 74, 13, 72, 47,
531
- 14, 74, 74, 14, 48, 29, 22, 71, 13, 13,
532
- 13, 13, 13, 43, 13, 13, 13, 13, 36, 49,
533
- 34, 10, 29, 49, 50, 49, 19, 49, 73, 49,
534
- 80, 13, 79, 73, 33, 13, nil, 23, 80, 33,
535
- nil, nil, 15, 13, nil, nil, 16, 16, 80, nil,
536
- nil, 29, nil, nil, 13, 10, nil, 29, 10, 49,
537
- nil, nil, nil, nil, nil, nil, nil, 13, nil, 80,
538
- 29, nil, nil, 29, nil, nil, nil, nil, nil, 80,
539
- nil, nil, nil, nil, nil, nil, nil, nil, 10, nil,
540
- nil, nil, nil, nil, nil, 16, nil, 10, nil, nil,
523
+ 10, 13, 15, 10, 23, 79, 19, 22, 19, 28,
524
+ 48, 36, 20, 45, 71, 29, 27, 55, 18, 32,
525
+ 35, 71, 32, 78, 76, 30, 71, 54, 31, 49,
526
+ 78, 78, 21, 70, 17, 31, 72, 14, 21, 70,
527
+ 19, 48, 72, 48, 48, 48, 48, 18, 13, 2,
528
+ 35, 27, 45, 73, 21, 13, 12, 14, 73, 55,
529
+ 28, 36, 49, 76, 54, 29, 71, 33, 4, 20,
530
+ 13, 4, 33, 27, 13, 81, 74, 13, 48, 1,
531
+ 71, 74, 74, 22, 11, 29, 77, 3, 13, 13,
532
+ 13, 13, 13, 44, 13, 13, 13, 13, 36, 49,
533
+ 47, 10, 29, 49, 43, 49, 19, 49, 34, 49,
534
+ 14, 13, 79, 14, 50, 13, nil, 23, nil, nil,
535
+ nil, nil, 15, 13, 80, nil, 16, 16, nil, nil,
536
+ nil, 29, 80, nil, 13, 10, nil, 29, 10, 49,
537
+ nil, nil, 80, nil, nil, nil, nil, 13, nil, nil,
538
+ 29, nil, nil, 29, nil, nil, nil, nil, nil, nil,
539
+ nil, nil, nil, 80, nil, nil, nil, nil, 10, nil,
540
+ nil, nil, nil, 80, nil, 16, nil, 10, nil, nil,
541
541
  nil, nil, nil, nil, nil, nil, nil, 16, nil, nil,
542
542
  16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
543
543
  16, 16, nil, nil, nil, nil, 32, 32, 19, 16,
@@ -564,15 +564,15 @@ racc_goto_check = [
564
564
  nil, nil, nil, nil, nil, nil, 16, nil, 16 ]
565
565
 
566
566
  racc_goto_pointer = [
567
- nil, 58, 37, 69, 23, nil, nil, nil, nil, nil,
568
- 0, 57, 5, -18, -90, -9, 116, -53, -58, -90,
569
- -242, -260, -111, -55, nil, nil, nil, -47, -3, -153,
570
- -203, -208, 19, -73, 6, -81, -157, nil, nil, nil,
571
- nil, nil, nil, -125, -148, -199, nil, -182, -57, -40,
572
- 89, nil, nil, nil, -84, -121, nil, nil, nil, nil,
567
+ nil, 79, 49, 87, 68, nil, nil, nil, nil, nil,
568
+ 0, 74, 16, -18, -60, -9, 116, -55, -71, -90,
569
+ -239, -252, -114, -55, nil, nil, nil, -49, -6, -153,
570
+ -213, -212, 19, -120, 14, -74, -157, nil, nil, nil,
571
+ nil, nil, nil, -114, -126, -206, nil, -161, -63, -40,
572
+ 99, nil, nil, nil, -74, -118, nil, nil, nil, nil,
573
573
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
574
- -67, -157, -33, -78, -112, nil, -117, -74, -207, -153,
575
- -117, -193 ]
574
+ -72, -164, -69, -133, -112, nil, -118, -56, -218, -153,
575
+ -103, -175 ]
576
576
 
577
577
  racc_goto_default = [
578
578
  nil, nil, nil, nil, nil, 5, 6, 7, 8, 9,
@@ -1246,7 +1246,7 @@ module_eval(<<'.,.,', 'parser.y', 116)
1246
1246
 
1247
1247
  module_eval(<<'.,.,', 'parser.y', 159)
1248
1248
  def _reduce_60(val, _values, result)
1249
- return make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1249
+ return make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1250
1250
  result
1251
1251
  end
1252
1252
  .,.,
@@ -1572,7 +1572,7 @@ module_eval(<<'.,.,', 'parser.y', 273)
1572
1572
 
1573
1573
  module_eval(<<'.,.,', 'parser.y', 282)
1574
1574
  def _reduce_113(val, _values, result)
1575
- return make_node(:SchemaDefinition, position_source: val[0], directives: val[1], **val[3])
1575
+ return make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0].line, directives: val[1], **val[3])
1576
1576
  result
1577
1577
  end
1578
1578
  .,.,
@@ -1734,7 +1734,7 @@ module_eval(<<'.,.,', 'parser.y', 338)
1734
1734
 
1735
1735
  module_eval(<<'.,.,', 'parser.y', 348)
1736
1736
  def _reduce_149(val, _values, result)
1737
- return make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1737
+ return make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1738
1738
 
1739
1739
  result
1740
1740
  end
@@ -1742,7 +1742,7 @@ module_eval(<<'.,.,', 'parser.y', 348)
1742
1742
 
1743
1743
  module_eval(<<'.,.,', 'parser.y', 353)
1744
1744
  def _reduce_150(val, _values, result)
1745
- return make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1745
+ return make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1746
1746
 
1747
1747
  result
1748
1748
  end
@@ -1808,7 +1808,7 @@ module_eval(<<'.,.,', 'parser.y', 371)
1808
1808
 
1809
1809
  module_eval(<<'.,.,', 'parser.y', 375)
1810
1810
  def _reduce_160(val, _values, result)
1811
- return make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1811
+ return make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1812
1812
 
1813
1813
  result
1814
1814
  end
@@ -1844,7 +1844,7 @@ module_eval(<<'.,.,', 'parser.y', 384)
1844
1844
 
1845
1845
  module_eval(<<'.,.,', 'parser.y', 388)
1846
1846
  def _reduce_165(val, _values, result)
1847
- return make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1847
+ return make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1848
1848
 
1849
1849
  result
1850
1850
  end
@@ -1873,7 +1873,7 @@ module_eval(<<'.,.,', 'parser.y', 394)
1873
1873
 
1874
1874
  module_eval(<<'.,.,', 'parser.y', 398)
1875
1875
  def _reduce_169(val, _values, result)
1876
- return make_node(:InterfaceTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1876
+ return make_node(:InterfaceTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1877
1877
 
1878
1878
  result
1879
1879
  end
@@ -1895,7 +1895,7 @@ module_eval(<<'.,.,', 'parser.y', 403)
1895
1895
 
1896
1896
  module_eval(<<'.,.,', 'parser.y', 407)
1897
1897
  def _reduce_172(val, _values, result)
1898
- return make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1898
+ return make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1899
1899
 
1900
1900
  result
1901
1901
  end
@@ -1903,7 +1903,7 @@ module_eval(<<'.,.,', 'parser.y', 407)
1903
1903
 
1904
1904
  module_eval(<<'.,.,', 'parser.y', 412)
1905
1905
  def _reduce_173(val, _values, result)
1906
- return make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1906
+ return make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1907
1907
 
1908
1908
  result
1909
1909
  end
@@ -1911,7 +1911,7 @@ module_eval(<<'.,.,', 'parser.y', 412)
1911
1911
 
1912
1912
  module_eval(<<'.,.,', 'parser.y', 417)
1913
1913
  def _reduce_174(val, _values, result)
1914
- return make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1914
+ return make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1915
1915
 
1916
1916
  result
1917
1917
  end
@@ -1919,7 +1919,7 @@ module_eval(<<'.,.,', 'parser.y', 417)
1919
1919
 
1920
1920
  module_eval(<<'.,.,', 'parser.y', 422)
1921
1921
  def _reduce_175(val, _values, result)
1922
- return make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[6], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
1922
+ return make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
1923
1923
 
1924
1924
  result
1925
1925
  end
@@ -157,7 +157,7 @@ rule
157
157
  | schema_keyword
158
158
 
159
159
  enum_value_definition:
160
- description_opt enum_name directives_list_opt { return make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), position_source: val[0] || val[1]) }
160
+ description_opt enum_name directives_list_opt { return make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1]) }
161
161
 
162
162
  enum_value_definitions:
163
163
  enum_value_definition { return [val[0]] }
@@ -280,7 +280,7 @@ rule
280
280
  | directive_definition
281
281
 
282
282
  schema_definition:
283
- SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { return make_node(:SchemaDefinition, position_source: val[0], directives: val[1], **val[3]) }
283
+ SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { return make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0].line, directives: val[1], **val[3]) }
284
284
 
285
285
  operation_type_definition_list:
286
286
  operation_type_definition
@@ -346,12 +346,12 @@ rule
346
346
 
347
347
  scalar_type_definition:
348
348
  description_opt SCALAR name directives_list_opt {
349
- return make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
349
+ return make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
350
350
  }
351
351
 
352
352
  object_type_definition:
353
353
  description_opt TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
354
- return make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
354
+ return make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
355
355
  }
356
356
 
357
357
  implements_opt:
@@ -373,7 +373,7 @@ rule
373
373
 
374
374
  input_value_definition:
375
375
  description_opt name COLON type default_value_opt directives_list_opt {
376
- return make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
376
+ return make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
377
377
  }
378
378
 
379
379
  input_value_definition_list:
@@ -386,7 +386,7 @@ rule
386
386
 
387
387
  field_definition:
388
388
  description_opt name arguments_definitions_opt COLON type directives_list_opt {
389
- return make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
389
+ return make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
390
390
  }
391
391
 
392
392
  field_definition_list:
@@ -396,7 +396,7 @@ rule
396
396
 
397
397
  interface_type_definition:
398
398
  description_opt INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY {
399
- return make_node(:InterfaceTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
399
+ return make_node(:InterfaceTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
400
400
  }
401
401
 
402
402
  union_members:
@@ -405,22 +405,22 @@ rule
405
405
 
406
406
  union_type_definition:
407
407
  description_opt UNION name directives_list_opt EQUALS union_members {
408
- return make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
408
+ return make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
409
409
  }
410
410
 
411
411
  enum_type_definition:
412
412
  description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
413
- return make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
413
+ return make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
414
414
  }
415
415
 
416
416
  input_object_type_definition:
417
417
  description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
418
- return make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
418
+ return make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
419
419
  }
420
420
 
421
421
  directive_definition:
422
422
  description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt ON directive_locations {
423
- return make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[6], description: val[0] || get_description(val[1]), position_source: val[0] || val[1])
423
+ return make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
424
424
  }
425
425
 
426
426
  directive_locations: