Skip to content

Commit

Permalink
feat(graphql-printer)!: New setting `Settings::isAlwaysMultilineDirec…
Browse files Browse the repository at this point in the history
…tives()`.

Closes: #82
  • Loading branch information
LastDragon-ru committed Aug 29, 2023
1 parent c710ea3 commit 212b61c
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 2 deletions.
8 changes: 6 additions & 2 deletions packages/graphql-printer/src/Blocks/Document/Directives.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ public function __construct(
iterable $directives,
string|null $deprecationReason = null,
) {

if ($deprecationReason !== null) {
$list = [];
$name = GraphQLDirective::DEPRECATED_NAME;
Expand Down Expand Up @@ -59,8 +58,13 @@ public function __construct(
parent::__construct($context, $directives);
}

protected function getSeparator(): string {
return $this->space();
}

protected function isAlwaysMultiline(): bool {
return true;
return parent::isAlwaysMultiline()
|| $this->getSettings()->isAlwaysMultilineDirectives();
}

protected function block(string|int $key, mixed $item): Directive {
Expand Down
33 changes: 33 additions & 0 deletions packages/graphql-printer/src/Blocks/Document/DirectivesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public function testStatistics(): void {
*/
public static function dataProviderSerialize(): array {
$settings = (new TestSettings())
->setAlwaysMultilineDirectives(true)
->setAlwaysMultilineArguments(false);

return [
Expand Down Expand Up @@ -187,6 +188,38 @@ public static function dataProviderSerialize(): array {
],
null,
],
'one line' => [
<<<'STRING'
@b(b: 123) @a
STRING,
$settings
->setAlwaysMultilineDirectives(false),
0,
0,
[
Parser::directive('@b(b: 123)'),
Parser::directive('@a'),
],
null,
],
'one line too long' => [
<<<'STRING'
@b(
b: 123
)
@a
STRING,
$settings
->setLineLength(5)
->setAlwaysMultilineDirectives(false),
0,
0,
[
Parser::directive('@b(b: 123)'),
Parser::directive('@a'),
],
null,
],
];
}
// </editor-fold>
Expand Down
5 changes: 5 additions & 0 deletions packages/graphql-printer/src/Contracts/Settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@ public function isAlwaysMultilineArguments(): bool;
*/
public function isAlwaysMultilineInterfaces(): bool;

/**
* If `true` directives will always be printed multiline.
*/
public function isAlwaysMultilineDirectives(): bool;

/**
* If `true` directive locations will always be printed multiline.
*/
Expand Down
1 change: 1 addition & 0 deletions packages/graphql-printer/src/Settings/GraphQLSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class GraphQLSettings extends ImmutableSettings {
protected bool $alwaysMultilineUnions = false;
protected bool $alwaysMultilineArguments = false;
protected bool $alwaysMultilineInterfaces = false;
protected bool $alwaysMultilineDirectives = false;
protected bool $alwaysMultilineDirectiveLocations = false;
protected ?TypeFilter $typeFilter = null;
protected ?TypeFilter $typeDefinitionFilter = null;
Expand Down
12 changes: 12 additions & 0 deletions packages/graphql-printer/src/Settings/ImmutableSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ abstract class ImmutableSettings implements Settings {
protected bool $alwaysMultilineUnions = true;
protected bool $alwaysMultilineArguments = true;
protected bool $alwaysMultilineInterfaces = true;
protected bool $alwaysMultilineDirectives = true;
protected bool $alwaysMultilineDirectiveLocations = true;
protected ?TypeFilter $typeFilter = null;
protected ?TypeFilter $typeDefinitionFilter = null;
Expand Down Expand Up @@ -227,6 +228,16 @@ public function setAlwaysMultilineInterfaces(bool $value): static {
});
}

public function isAlwaysMultilineDirectives(): bool {
return $this->alwaysMultilineDirectives;
}

public function setAlwaysMultilineDirectives(bool $value): static {
return $this->set(static function (self $settings) use ($value): void {
$settings->alwaysMultilineDirectives = $value;
});
}

public function isAlwaysMultilineDirectiveLocations(): bool {
return $this->alwaysMultilineDirectiveLocations;
}
Expand Down Expand Up @@ -311,6 +322,7 @@ public static function createFrom(Settings $settings): self {
->setAlwaysMultilineUnions($settings->isAlwaysMultilineUnions())
->setAlwaysMultilineArguments($settings->isAlwaysMultilineArguments())
->setAlwaysMultilineInterfaces($settings->isAlwaysMultilineInterfaces())
->setAlwaysMultilineDirectives($settings->isAlwaysMultilineDirectives())
->setAlwaysMultilineDirectiveLocations($settings->isAlwaysMultilineDirectiveLocations())
->setTypeFilter($settings->getTypeFilter())
->setTypeDefinitionFilter($settings->getTypeDefinitionFilter())
Expand Down

0 comments on commit 212b61c

Please sign in to comment.