Commit 68aed51
Marilena Ruffelaere
fix: reconcile the config mapping callback type between BuilderStack and BuilderConfigurator
BuilderStack declared the callback as `array<array-key, string>|null` while
BuilderConfigurator declared it as `(\Closure(mixed): mixed)|null`. Both describe
the same array, dumped into the container by SensiolabsGotenbergExtension, so one
of them had to be wrong — the Closure one was: BuilderStack stores array callables
(`[$enumClass, 'from']`, `[Unit::class, 'parse']`), and the container cannot dump a
closure at all (PhpDumper throws on any object argument). PHPStan never noticed
because the two types only met at compile time, outside analysed code.
Both sides now share a single `BuilderConfigurationMapping` phpstan-type declared on
BuilderConfigurator, honest about what is stored: a static method target on a backed
enum. The invocation destructures it so PHPStan can follow the static call instead of
having to prove an array literal is callable — behaviour is identical, PHP resolved
`[$class, $method]($value)` the same way.
BuilderConfiguratorTest builds the mapping with BuilderStack and feeds it straight
into BuilderConfigurator, so the two shapes now meet in analysed code and cannot
silently drift apart again.
Assisted-by: Claude Code:Opus-51 parent 8ceaa92 commit 68aed51
3 files changed
Lines changed: 85 additions & 5 deletions
File tree
- src
- Configurator
- DependencyInjection
- tests/Configurator
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
7 | 17 | | |
8 | 18 | | |
9 | 19 | | |
10 | | - | |
11 | | - | |
| 20 | + | |
| 21 | + | |
12 | 22 | | |
13 | 23 | | |
14 | 24 | | |
| |||
28 | 38 | | |
29 | 39 | | |
30 | 40 | | |
31 | | - | |
| 41 | + | |
| 42 | + | |
32 | 43 | | |
33 | 44 | | |
34 | 45 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| 16 | + | |
| 17 | + | |
15 | 18 | | |
16 | 19 | | |
17 | 20 | | |
| |||
27 | 30 | | |
28 | 31 | | |
29 | 32 | | |
30 | | - | |
| 33 | + | |
31 | 34 | | |
32 | 35 | | |
33 | 36 | | |
| |||
112 | 115 | | |
113 | 116 | | |
114 | 117 | | |
115 | | - | |
| 118 | + | |
116 | 119 | | |
117 | 120 | | |
118 | 121 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
0 commit comments