Skip to content

Commit af9d6c3

Browse files
committed
Long directives arguments will be split to multiple lines.
1 parent d521d1b commit af9d6c3

File tree

2 files changed

+87
-25
lines changed

2 files changed

+87
-25
lines changed

src/Utils/SchemaPrinter.php

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Closure;
88
use GraphQL\Error\Error;
9+
use GraphQL\Language\AST\ArgumentNode;
910
use GraphQL\Language\AST\DirectiveNode;
1011
use GraphQL\Language\AST\EnumTypeDefinitionNode;
1112
use GraphQL\Language\AST\EnumValueDefinitionNode;
@@ -582,26 +583,45 @@ protected static function printTypeDirectives($type, array $options, string $ind
582583
*/
583584
protected static function printTypeDirective(DirectiveNode $directive, array $options, string $indentation): string
584585
{
585-
return Printer::doPrint($directive);
586+
$length = 0;
587+
$arguments = [];
588+
589+
foreach ($directive->arguments as $argument) {
590+
$value = static::printArgument($argument, $options, ' '.$indentation);
591+
$length = $length + mb_strlen($value);
592+
$arguments[] = $value;
593+
}
594+
595+
return "@{$directive->name->value}" .
596+
static::printLines($arguments, '(', ')', static::isLineTooLong($length), $indentation);
597+
}
598+
599+
/**
600+
* @param array<string, bool> $options
601+
* @phpstan-param Options $options
602+
*/
603+
protected static function printArgument(ArgumentNode $argument, array $options, string $indentation): string
604+
{
605+
return "{$indentation}{$argument->name->value}: " . Printer::doPrint($argument->value);
586606
}
587607

588608
/**
589609
* @param array<string> $lines
590610
*/
591-
protected static function printLines(array $lines, string $begin, string $end, bool $multiline, string $indentation = ''): string
611+
protected static function printLines(array $lines, string $begin, string $end, bool $forceMultiline, string $indentation = ''): string
592612
{
593613
$block = '';
594614

595615
if ($lines) {
596-
$multiline = $multiline || static::isLineTooLong(array_sum(array_map('mb_strlen', $lines)));
616+
$forceMultiline = $forceMultiline || static::isLineTooLong(array_sum(array_map('mb_strlen', $lines)));
597617

598-
if ($multiline) {
618+
if ($forceMultiline) {
599619
$wrapped = false;
600620

601621
for ($i = 0, $c = count($lines); $i < $c; $i++) {
602622
// If line too long and contains LF we wrap it by empty lines
603623
$line = trim($lines[$i], "\n");
604-
$wrap = static::isLineTooLong($line) || mb_strpos($line, "\n") !== false;
624+
$wrap = mb_strpos($line, "\n") !== false;
605625

606626
if ($i === 0) {
607627
$line = "\n{$line}";

tests/Utils/SchemaPrinterTest.php

Lines changed: 62 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,7 @@ public function testPrintDirectives(): void {
12821282
$schema = /** @lang GraphQL */ <<<GRAPHQL
12831283
directive @test(
12841284
value: String @test(value: "{$text}")
1285+
text: String
12851286
) on SCHEMA |
12861287
SCALAR |
12871288
OBJECT |
@@ -1363,21 +1364,27 @@ interface InterfaceB implements InterfaceA @test(value: "{$text}") {
13631364
"{$text}"
13641365
c: String @test
13651366
"{$text}"
1366-
d: String = "123" @test(value: "{$text}")
1367+
d: String = "123" @test(value: "{$text}", text: "{$text}")
13671368
): Boolean
13681369
}
13691370
GRAPHQL;
13701371
$expected = /** @lang GraphQL */ <<<'GRAPHQL'
13711372
directive @test(
13721373
value: String
1373-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1374+
@test(
1375+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1376+
)
1377+
1378+
text: String
13741379
) on SCHEMA | SCALAR | OBJECT | FIELD_DEFINITION | ARGUMENT_DEFINITION | INTERFACE | UNION | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION
13751380
13761381
enum EnumA @test {
13771382
a @test @deprecated
13781383
13791384
b
1380-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1385+
@test(
1386+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1387+
)
13811388
13821389
"""
13831390
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1388,20 +1395,26 @@ enum EnumA @test {
13881395
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
13891396
"""
13901397
d
1391-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1398+
@test(
1399+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1400+
)
13921401
@deprecated
13931402
}
13941403
13951404
enum EnumB
1396-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") {
1405+
@test(
1406+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1407+
) {
13971408
a
13981409
}
13991410
14001411
input InputA @test {
14011412
a: Int @test
14021413
14031414
b: Int
1404-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1415+
@test(
1416+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1417+
)
14051418
14061419
"""
14071420
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1412,19 +1425,25 @@ enum EnumB
14121425
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14131426
"""
14141427
d: Int
1415-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1428+
@test(
1429+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1430+
)
14161431
}
14171432
14181433
input InputB
1419-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") {
1434+
@test(
1435+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1436+
) {
14201437
a: ID
14211438
}
14221439
14231440
interface InterfaceA @test {
14241441
a: Int @test @deprecated
14251442
14261443
b: Int
1427-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1444+
@test(
1445+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1446+
)
14281447
14291448
"""
14301449
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1435,12 +1454,16 @@ interface InterfaceA @test {
14351454
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14361455
"""
14371456
d: Int
1438-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1457+
@test(
1458+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1459+
)
14391460
@deprecated
14401461
}
14411462
14421463
interface InterfaceB implements InterfaceA
1443-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") {
1464+
@test(
1465+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1466+
) {
14441467
a: ID
14451468
}
14461469
@@ -1451,18 +1474,24 @@ interface InterfaceB implements InterfaceA
14511474
"""desc"""
14521475
a: String
14531476
): Boolean
1454-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1477+
@test(
1478+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1479+
)
14551480
14561481
c(
14571482
a: String
1458-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1483+
@test(
1484+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1485+
)
14591486
): Boolean
14601487
14611488
d(
14621489
a: String @test
14631490
14641491
b: String
1465-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1492+
@test(
1493+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1494+
)
14661495
14671496
"""
14681497
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1473,20 +1502,27 @@ interface InterfaceB implements InterfaceA
14731502
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14741503
"""
14751504
d: String = "123"
1476-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1505+
@test(
1506+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1507+
text: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1508+
)
14771509
): Boolean
14781510
}
14791511
14801512
scalar ScalarA @test
14811513
14821514
scalar ScalarB
1483-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1515+
@test(
1516+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1517+
)
14841518
14851519
type TypeA @test {
14861520
a: Int @test @deprecated
14871521
14881522
b: Int
1489-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1523+
@test(
1524+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1525+
)
14901526
14911527
"""
14921528
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1497,19 +1533,25 @@ interface InterfaceB implements InterfaceA
14971533
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14981534
"""
14991535
d: Int
1500-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1536+
@test(
1537+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1538+
)
15011539
@deprecated
15021540
}
15031541
15041542
type TypeB implements InterfaceB
1505-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") {
1543+
@test(
1544+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1545+
) {
15061546
a: ID
15071547
}
15081548
15091549
union UnionA @test = TypeA | TypeB
15101550
15111551
union UnionB
1512-
@test(value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
1552+
@test(
1553+
value: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1554+
)
15131555
= TypeA | TypeB
15141556

15151557
GRAPHQL;

0 commit comments

Comments
 (0)