railt/graphql

View on GitHub
resources/grammar/statement/definitions/directive.pp2

Summary

Maintainability
Test Coverage

/**
 * --------------------------------------------------------------------------
 *  GraphQL SDL Directives
 * --------------------------------------------------------------------------
 *
 * A GraphQL schema describes directives which are used to annotate
 * various parts of a GraphQL document as an indicator that they should
 * be evaluated differently by a validator, executor, or client
 * tool such as a code generator.
 *
 * @see https://facebook.github.io/graphql/June2018/#sec-Type-System.Directives
 *
 */

DirectiveDefinition -> {
    return new Stmt\Definition\DirectiveDefinitionNode(
        $children[1],
        $children[0],
        $children[2]->getArrayCopy(),
        $children[3]->getArrayCopy(),
        $children[4]->getArrayCopy(),
    );
}
  : Description()
    DirectiveDefinitionHead()
    DirectiveDefinitionBody()
  ;

DirectiveDefinitionHead
  : ::T_DIRECTIVE:: ::T_DIRECTIVE_AT:: Name()
    OptionalDirectiveArguments()
    DirectiveModifiers()
  ;

OptionalDirectiveArguments -> { return new \ArrayObject($children); }
  : DirectiveArguments()?
  ;

DirectiveArguments
  : ::T_PARENTHESIS_OPEN::
      ArgumentDefinition()*
    ::T_PARENTHESIS_CLOSE::
  ;

DirectiveModifiers -> {
    return new \ArrayObject(\array_filter([$children]));
}
  : DirectiveIsRepeatable()?
  ;

DirectiveIsRepeatable -> {
    return Stmt\Definition\DirectiveDefinition\Modifier::REPEATABLE;
}
  : <T_REPEATABLE>
  ;

DirectiveDefinitionBody
  : ::T_ON:: DirectiveDefinitionLocations()
  ;

DirectiveDefinitionLocations -> { return new \ArrayObject($children); }
  : ::T_OR::? Identifier() (::T_OR:: Identifier())*
  ;