class GraphQL::StaticValidation::VariableUsagesAreAllowed
def validate(context)
def validate(context) # holds { name => ast_node } pairs declared_variables = {} context.visitor[GraphQL::Language::Nodes::OperationDefinition] << -> (node, parent) { declared_variables = node.variables.each_with_object({}) { |var, memo| memo[var.name] = var } } context.visitor[GraphQL::Language::Nodes::Argument] << -> (node, parent) { return if !node.value.is_a?(GraphQL::Language::Nodes::VariableIdentifier) if parent.is_a?(GraphQL::Language::Nodes::Field) arguments = context.field_definition.arguments elsif parent.is_a?(GraphQL::Language::Nodes::Directive) arguments = context.directive_definition.arguments elsif parent.is_a?(GraphQL::Language::Nodes::InputObject) arguments = context.argument_definition.type.unwrap.input_fields else raise("Unexpected argument parent: #{parent}") end var_defn_ast = declared_variables[node.value.name] # Might be undefined :( # VariablesAreUsedAndDefined can't finalize its search until the end of the document. var_defn_ast && validate_usage(arguments, node, var_defn_ast, context) } end