Skip to content

Commit 093c9bc

Browse files
committed
Long list used for input fields or args will be split to multiple lines.
1 parent 7b2c03b commit 093c9bc

File tree

2 files changed

+40
-11
lines changed

2 files changed

+40
-11
lines changed

src/Utils/SchemaPrinter.php

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,19 @@
77
use Closure;
88
use GraphQL\Error\Error;
99
use GraphQL\Language\AST\ArgumentNode;
10+
use GraphQL\Language\AST\BooleanValueNode;
1011
use GraphQL\Language\AST\DirectiveNode;
1112
use GraphQL\Language\AST\EnumTypeDefinitionNode;
1213
use GraphQL\Language\AST\EnumValueDefinitionNode;
14+
use GraphQL\Language\AST\EnumValueNode;
15+
use GraphQL\Language\AST\FloatValueNode;
16+
use GraphQL\Language\AST\IntValueNode;
1317
use GraphQL\Language\AST\ListValueNode;
1418
use GraphQL\Language\AST\Node;
19+
use GraphQL\Language\AST\NullValueNode;
20+
use GraphQL\Language\AST\ObjectValueNode;
1521
use GraphQL\Language\AST\ScalarTypeDefinitionNode;
22+
use GraphQL\Language\AST\StringValueNode;
1623
use GraphQL\Language\AST\ValueNode;
1724
use GraphQL\Language\BlockString;
1825
use GraphQL\Language\Parser;
@@ -316,7 +323,10 @@ protected static function printInputValue($arg): string
316323
{
317324
$argDecl = $arg->name . ': ' . (string) $arg->getType();
318325
if ($arg->defaultValueExists()) {
319-
$argDecl .= ' = ' . Printer::doPrint(AST::astFromValue($arg->defaultValue, $arg->getType()));
326+
// TODO Pass `options`.
327+
$value = AST::astFromValue($arg->defaultValue, $arg->getType());
328+
$indentation = $arg instanceof InputObjectField ? ' ' : ' ';
329+
$argDecl .= ' = ' . static::printValue($value, [], $indentation);
320330
}
321331

322332
return $argDecl;
@@ -611,24 +621,35 @@ protected static function printTypeDirective(DirectiveNode $directive, array $op
611621
*/
612622
protected static function printArgument(ArgumentNode $argument, array $options, string $indentation): string
613623
{
614-
$value = $argument->value;
624+
return "{$indentation}{$argument->name->value}: " .
625+
self::printValue($argument->value, $options, $indentation);
626+
}
627+
628+
/**
629+
* @param ObjectValueNode|ListValueNode|BooleanValueNode|IntValueNode|FloatValueNode|EnumValueNode|StringValueNode|NullValueNode|null $value
630+
* @param array<string, bool> $options
631+
* @phpstan-param Options $options
632+
*/
633+
protected static function printValue($value, array $options, string $indentation): string
634+
{
635+
$result = '';
615636

616637
if ($value instanceof ListValueNode) {
617638
$length = 0;
618639
$values = [];
619640

620641
foreach ($value->values as $item) {
621-
$string = ' ' . $indentation . Printer::doPrint($item);
622-
$length = $length + mb_strlen($string);
642+
$string = ' '.$indentation.Printer::doPrint($item);
643+
$length = $length + mb_strlen($string);
623644
$values[] = $string;
624645
}
625646

626-
$value = static::printLines($values, '[', ']', static::isLineTooLong($length), $indentation);
647+
$result = static::printLines($values, '[', ']', static::isLineTooLong($length), $indentation);
627648
} else {
628-
$value = Printer::doPrint($value);
649+
$result = Printer::doPrint($value);
629650
}
630651

631-
return "{$indentation}{$argument->name->value}: {$value}";
652+
return $result;
632653
}
633654

634655
/**

tests/Utils/SchemaPrinterTest.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,12 +1352,12 @@ interface InterfaceB implements InterfaceA @test(value: "{$text}") {
13521352
}
13531353
13541354
input InputB @test(value: "{$text}") {
1355-
a: ID
1355+
a: [String] = ["{$text}", "{$text}", "{$text}"]
13561356
}
13571357
13581358
type Query {
13591359
a(a: String, b: String, c: String): Boolean @test
1360-
b("desc" a: String): Boolean @test(value: "{$text}")
1360+
b("desc" a: [String] = ["{$text}", "{$text}", "{$text}"]): Boolean @test(value: "{$text}")
13611361
c(a: String @test(value: "{$text}")): Boolean
13621362
d(
13631363
a: String @test
@@ -1441,7 +1441,11 @@ enum EnumB
14411441
@test(
14421442
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
14431443
) {
1444-
a: ID
1444+
a: [String] = [
1445+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1446+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1447+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1448+
]
14451449
}
14461450
14471451
interface InterfaceA @test {
@@ -1479,7 +1483,11 @@ interface InterfaceB implements InterfaceA
14791483
14801484
b(
14811485
"""desc"""
1482-
a: String
1486+
a: [String] = [
1487+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1488+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1489+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1490+
]
14831491
): Boolean
14841492
@test(
14851493
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

0 commit comments

Comments
 (0)