Fix printing of ASTs of argument definitions with descriptions

This commit is contained in:
Vladimir Razuvaev 2018-11-21 18:39:33 +07:00
parent 25cfebbd37
commit b4be42acdf
3 changed files with 35 additions and 4 deletions

View File

@ -263,8 +263,14 @@ class Printer
}), }),
NodeKind::FIELD_DEFINITION => $this->addDescription(function (FieldDefinitionNode $def) { NodeKind::FIELD_DEFINITION => $this->addDescription(function (FieldDefinitionNode $def) {
$noIndent = Utils::every($def->arguments, static function (string $arg) {
return strpos($arg, "\n") === false;
});
return $def->name return $def->name
. $this->wrap('(', $this->join($def->arguments, ', '), ')') . ($noIndent
? $this->wrap('(', $this->join($def->arguments, ', '), ')')
: $this->wrap("(\n", $this->indent($this->join($def->arguments, "\n")), "\n)"))
. ': ' . $def->type . ': ' . $def->type
. $this->wrap(' ', $this->join($def->directives, ' ')); . $this->wrap(' ', $this->join($def->directives, ' '));
}), }),
@ -424,9 +430,15 @@ class Printer
}, },
NodeKind::DIRECTIVE_DEFINITION => $this->addDescription(function (DirectiveDefinitionNode $def) { NodeKind::DIRECTIVE_DEFINITION => $this->addDescription(function (DirectiveDefinitionNode $def) {
$noIndent = Utils::every($def->arguments, static function (string $arg) {
return strpos($arg, "\n") === false;
});
return 'directive @' return 'directive @'
. $def->name . $def->name
. $this->wrap('(', $this->join($def->arguments, ', '), ')') . ($noIndent
? $this->wrap('(', $this->join($def->arguments, ', '), ')')
: $this->wrap("(\n", $this->indent($this->join($def->arguments, "\n")), "\n"))
. ' on ' . $this->join($def->locations, ' | '); . ' on ' . $this->join($def->locations, ' | ');
}), }),
], ],

View File

@ -52,6 +52,9 @@ class SchemaPrinterTest extends TestCase
self::assertEquals($astCopy, $ast); self::assertEquals($astCopy, $ast);
} }
/**
* @see it('prints kitchen sink')
*/
public function testPrintsKitchenSink() : void public function testPrintsKitchenSink() : void
{ {
$kitchenSink = file_get_contents(__DIR__ . '/schema-kitchen-sink.graphql'); $kitchenSink = file_get_contents(__DIR__ . '/schema-kitchen-sink.graphql');
@ -70,7 +73,15 @@ of the `Foo` type.
""" """
type Foo implements Bar & Baz { type Foo implements Bar & Baz {
one: Type one: Type
two(argument: InputType!): Type """
This is a description of the `two` field.
"""
two(
"""
This is a description of the `argument` argument.
"""
argument: InputType!
): Type
three(argument: InputType, other: String): Int three(argument: InputType, other: String): Int
four(argument: String = "string"): String four(argument: String = "string"): String
five(argument: [String] = ["string", "string"]): String five(argument: [String] = ["string", "string"]): String

View File

@ -14,7 +14,15 @@ of the `Foo` type.
""" """
type Foo implements Bar & Baz { type Foo implements Bar & Baz {
one: Type one: Type
two(argument: InputType!): Type """
This is a description of the `two` field.
"""
two(
"""
This is a description of the `argument` argument.
"""
argument: InputType!
): Type
three(argument: InputType, other: String): Int three(argument: InputType, other: String): Int
four(argument: String = "string"): String four(argument: String = "string"): String
five(argument: [String] = ["string", "string"]): String five(argument: [String] = ["string", "string"]): String