Skip to content

Commit 37e312c

Browse files
authored
[PHPStan] Defined array shapes for Liip filter configuration (#733)
For more details see #733 Key changes: * [PHPStan] Defined array shapes for Liip filter configuration * [PHPStan] Removed resolved issues from the baseline
1 parent 9275d10 commit 37e312c

File tree

3 files changed

+61
-105
lines changed

3 files changed

+61
-105
lines changed

phpstan-baseline.neon

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,18 +1326,6 @@ parameters:
13261326
count: 3
13271327
path: src/bundle/Core/DependencyInjection/Configuration/Parser/IO.php
13281328

1329-
-
1330-
message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Image\:\:addSemanticConfig\(\) has no return type specified\.$#'
1331-
identifier: missingType.return
1332-
count: 1
1333-
path: src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php
1334-
1335-
-
1336-
message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Image\:\:mapConfig\(\) has no return type specified\.$#'
1337-
identifier: missingType.return
1338-
count: 1
1339-
path: src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php
1340-
13411329
-
13421330
message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Image\:\:mapConfig\(\) has parameter \$scopeSettings with no value type specified in iterable type array\.$#'
13431331
identifier: missingType.iterableValue
@@ -1350,12 +1338,6 @@ parameters:
13501338
count: 1
13511339
path: src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php
13521340

1353-
-
1354-
message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Image\:\:setSuggestionCollector\(\) has no return type specified\.$#'
1355-
identifier: missingType.return
1356-
count: 1
1357-
path: src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php
1358-
13591341
-
13601342
message: '#^Method Ibexa\\Bundle\\Core\\DependencyInjection\\Configuration\\Parser\\Languages\:\:addSemanticConfig\(\) has no return type specified\.$#'
13611343
identifier: missingType.return
@@ -4056,48 +4038,6 @@ parameters:
40564038
count: 1
40574039
path: src/bundle/Core/Imagine/Filter/AbstractFilter.php
40584040

4059-
-
4060-
message: '#^Method Ibexa\\Bundle\\Core\\Imagine\\Filter\\FilterConfiguration\:\:all\(\) return type has no value type specified in iterable type array\.$#'
4061-
identifier: missingType.iterableValue
4062-
count: 1
4063-
path: src/bundle/Core/Imagine/Filter/FilterConfiguration.php
4064-
4065-
-
4066-
message: '#^Method Ibexa\\Bundle\\Core\\Imagine\\Filter\\FilterConfiguration\:\:get\(\) return type has no value type specified in iterable type array\.$#'
4067-
identifier: missingType.iterableValue
4068-
count: 1
4069-
path: src/bundle/Core/Imagine/Filter/FilterConfiguration.php
4070-
4071-
-
4072-
message: '#^Method Ibexa\\Bundle\\Core\\Imagine\\Filter\\FilterConfiguration\:\:getVariationFilters\(\) has parameter \$configuredVariations with no value type specified in iterable type array\.$#'
4073-
identifier: missingType.iterableValue
4074-
count: 1
4075-
path: src/bundle/Core/Imagine/Filter/FilterConfiguration.php
4076-
4077-
-
4078-
message: '#^Method Ibexa\\Bundle\\Core\\Imagine\\Filter\\FilterConfiguration\:\:getVariationFilters\(\) return type has no value type specified in iterable type array\.$#'
4079-
identifier: missingType.iterableValue
4080-
count: 1
4081-
path: src/bundle/Core/Imagine/Filter/FilterConfiguration.php
4082-
4083-
-
4084-
message: '#^Method Ibexa\\Bundle\\Core\\Imagine\\Filter\\FilterConfiguration\:\:getVariationPostProcessors\(\) has parameter \$configuredVariations with no value type specified in iterable type array\.$#'
4085-
identifier: missingType.iterableValue
4086-
count: 1
4087-
path: src/bundle/Core/Imagine/Filter/FilterConfiguration.php
4088-
4089-
-
4090-
message: '#^Method Ibexa\\Bundle\\Core\\Imagine\\Filter\\FilterConfiguration\:\:getVariationPostProcessors\(\) return type has no value type specified in iterable type array\.$#'
4091-
identifier: missingType.iterableValue
4092-
count: 1
4093-
path: src/bundle/Core/Imagine/Filter/FilterConfiguration.php
4094-
4095-
-
4096-
message: '#^Method Ibexa\\Bundle\\Core\\Imagine\\Filter\\FilterConfiguration\:\:setConfigResolver\(\) has no return type specified\.$#'
4097-
identifier: missingType.return
4098-
count: 1
4099-
path: src/bundle/Core/Imagine/Filter/FilterConfiguration.php
4100-
41014041
-
41024042
message: '#^Method Ibexa\\Bundle\\Core\\Imagine\\Filter\\FilterInterface\:\:getOptions\(\) return type has no value type specified in iterable type array\.$#'
41034043
identifier: missingType.iterableValue

src/bundle/Core/DependencyInjection/Configuration/Parser/Image.php

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,27 @@
1515

1616
/**
1717
* Configuration parser handling all basic configuration (aka "Image").
18+
*
19+
* @phpstan-type TVariationOptions array<string|int, mixed>
20+
* @phpstan-type TFilters array<string, TVariationOptions>
21+
* @phpstan-type TPostProcessors array<string, TVariationOptions>
22+
* @phpstan-type TImageVariation array{
23+
* reference?: string|null,
24+
* filters?: TFilters,
25+
* post_processors?: TPostProcessors
26+
* }
27+
* @phpstan-type TImageVariations array<string, TImageVariation>
1828
*/
1929
class Image extends AbstractParser implements SuggestionCollectorAwareInterface
2030
{
21-
/** @var \Ibexa\Bundle\Core\DependencyInjection\Configuration\Suggestion\Collector\SuggestionCollectorInterface */
22-
private $suggestionCollector;
31+
private SuggestionCollectorInterface $suggestionCollector;
2332

24-
public function setSuggestionCollector(SuggestionCollectorInterface $suggestionCollector)
33+
public function setSuggestionCollector(SuggestionCollectorInterface $suggestionCollector): void
2534
{
2635
$this->suggestionCollector = $suggestionCollector;
2736
}
2837

29-
/**
30-
* Adds semantic configuration definition.
31-
*
32-
* @param \Symfony\Component\Config\Definition\Builder\NodeBuilder $nodeBuilder Node just under ezpublish.system.<siteaccess>
33-
*/
34-
public function addSemanticConfig(NodeBuilder $nodeBuilder)
38+
public function addSemanticConfig(NodeBuilder $nodeBuilder): void
3539
{
3640
$nodeBuilder
3741
->arrayNode('imagemagick')
@@ -122,14 +126,14 @@ static function ($v) {
122126
->end();
123127
}
124128

125-
public function preMap(array $config, ContextualizerInterface $contextualizer)
129+
public function preMap(array $config, ContextualizerInterface $contextualizer): void
126130
{
127131
$contextualizer->mapConfigArray('image_variations', $config);
128132
$contextualizer->mapSetting('image_host', $config);
129133
$contextualizer->mapSetting('variation_handler_identifier', $config);
130134
}
131135

132-
public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerInterface $contextualizer)
136+
public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerInterface $contextualizer): void
133137
{
134138
if (isset($scopeSettings['imagemagick'])) {
135139
$suggestion = new ConfigSuggestion(

src/bundle/Core/Imagine/Filter/FilterConfiguration.php

Lines changed: 46 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,43 @@
66
*/
77
namespace Ibexa\Bundle\Core\Imagine\Filter;
88

9+
use Ibexa\Bundle\Core\DependencyInjection\Configuration\Parser\Image;
910
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
1011
use Liip\ImagineBundle\Imagine\Filter\FilterConfiguration as BaseFilterConfiguration;
1112

13+
/**
14+
* @phpstan-import-type TImageVariations from Image
15+
* @phpstan-import-type TFilters from Image
16+
* @phpstan-import-type TPostProcessors from Image
17+
*/
1218
class FilterConfiguration extends BaseFilterConfiguration
1319
{
14-
/** @var \Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface */
15-
private $configResolver;
20+
private ConfigResolverInterface $configResolver;
1621

17-
/**
18-
* @param \Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface $configResolver
19-
*/
20-
public function setConfigResolver(ConfigResolverInterface $configResolver)
22+
public function setConfigResolver(ConfigResolverInterface $configResolver): void
2123
{
2224
$this->configResolver = $configResolver;
2325
}
2426

25-
public function get($filter)
27+
/**
28+
* @phpstan-return array{
29+
* cache?: string|null,
30+
* data_loader?: string|null,
31+
* reference?: string|null,
32+
* filters?: TFilters,
33+
* post_processors?: TPostProcessors,
34+
* quality?: int|null,
35+
* jpeg_quality?: int|null,
36+
* png_compression_level?: int|null,
37+
* png_compression_filter?: int|null,
38+
* format?: string|null,
39+
* animated?: bool,
40+
* default_image?: string|null
41+
* }
42+
*/
43+
public function get($filter): array
2644
{
45+
/** @phpstan-var TImageVariations $configuredVariations */
2746
$configuredVariations = $this->configResolver->getParameter('image_variations');
2847
if (!array_key_exists($filter, $configuredVariations)) {
2948
return parent::get($filter);
@@ -34,15 +53,21 @@ public function get($filter)
3453
return [
3554
'cache' => 'ibexa',
3655
'data_loader' => 'ibexa',
37-
'reference' => isset($configuredVariations[$filter]['reference']) ? $configuredVariations[$filter]['reference'] : null,
56+
'reference' => $configuredVariations[$filter]['reference'] ?? null,
3857
'filters' => $this->getVariationFilters($filter, $configuredVariations),
3958
'post_processors' => $this->getVariationPostProcessors($filter, $configuredVariations),
4059
] + $filterConfig;
4160
}
4261

43-
public function all()
62+
/**
63+
* @phpstan-return TImageVariations
64+
*/
65+
public function all(): array
4466
{
45-
return $this->configResolver->getParameter('image_variations') + parent::all();
67+
/** @phpstan-var TImageVariations $configuredVariations */
68+
$configuredVariations = $this->configResolver->getParameter('image_variations');
69+
70+
return $configuredVariations + parent::all();
4671
}
4772

4873
/**
@@ -51,26 +76,18 @@ public function all()
5176
* Both variations configured in Ibexa (SiteAccess context) and LiipImagineBundle are used.
5277
* Ibexa variations always have precedence.
5378
*
54-
* @param string $variationName
55-
* @param array $configuredVariations Variations set in eZ.
79+
* @phpstan-param TImageVariations $configuredVariations Variations' set.
5680
*
57-
* @return array
81+
* @phpstan-return TFilters
5882
*/
59-
private function getVariationFilters($variationName, array $configuredVariations)
83+
private function getVariationFilters(string $variationName, array $configuredVariations): array
6084
{
6185
if (!isset($configuredVariations[$variationName]['filters']) && !isset($this->filters[$variationName]['filters'])) {
6286
return [];
6387
}
6488

65-
// Check variations configured in Ibexa config first.
66-
if (isset($configuredVariations[$variationName]['filters'])) {
67-
$filters = $configuredVariations[$variationName]['filters'];
68-
} else {
69-
// Falback to variations configured in LiipImagineBundle.
70-
$filters = $this->filters[$variationName]['filters'];
71-
}
72-
73-
return $filters;
89+
// Prioritize variations configured in Ibexa config
90+
return $configuredVariations[$variationName]['filters'] ?? $this->filters[$variationName]['filters'];
7491
}
7592

7693
/**
@@ -79,20 +96,15 @@ private function getVariationFilters($variationName, array $configuredVariations
7996
* Both variations configured in Ibexa and LiipImagineBundle are used.
8097
* Ibexa variations always have precedence.
8198
*
82-
* @param string $variationName
83-
* @param array $configuredVariations Variations set in eZ.
99+
* @phpstan-param TImageVariations $configuredVariations Variations set in eZ.
84100
*
85-
* @return array
101+
* @phpstan-return TPostProcessors
86102
*/
87-
private function getVariationPostProcessors($variationName, array $configuredVariations)
103+
private function getVariationPostProcessors(string $variationName, array $configuredVariations): array
88104
{
89-
if (isset($configuredVariations[$variationName]['post_processors'])) {
90-
return $configuredVariations[$variationName]['post_processors'];
91-
} elseif (isset($this->filters[$variationName]['post_processors'])) {
92-
return $this->filters[$variationName]['post_processors'];
93-
}
94-
95-
return [];
105+
return $configuredVariations[$variationName]['post_processors']
106+
?? $this->filters[$variationName]['post_processors']
107+
?? [];
96108
}
97109
}
98110

0 commit comments

Comments
 (0)