diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b33c604..9da3078d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,9 @@ v5.2 * [#244](https://github.com/cleverage/process-bundle/issues/244) Fix MappingTransformer: a missing target property of a `\stdClass` destination (`initial_value` or `keep_input`) threw `Property '...' is not writable`, it is now added when the target is a simple property name (nested paths still throw). Update documentation, add tests. * [#143](https://github.com/cleverage/process-bundle/issues/143) Type the remaining untyped task options: `split_character` of CsvWriterTask and SplitJoinLineTask must be a `string` (a wrong type used to fail later with a `TypeError`), `write_headers` of CsvWriterTask and `log_empty_lines` of CsvReaderTask are cast to `bool` (any value used to be evaluated as a boolean, so it is still accepted). Update documentation, add tests. +## BC breaks +* [#143](https://github.com/cleverage/process-bundle/issues/143) Narrow native types that were never `null` in practice: `AbstractConfigurableTask::getOptions()` and `ProcessState::getContextualizedOptions()` return `array` (instead of `?array`), `CsvResource::$lineNumber` is an `int` and `ProcessHistory::$startDate` a `\DateTimeInterface` (instead of nullable types). Overrides of `getOptions()` must declare an `array` return type (e.g. cleverage/archive-process-bundle >= v2.3). Improve PHPStan level from 7 to 8. + v5.1 ----- diff --git a/docs/03-custom_tasks.md b/docs/03-custom_tasks.md index 386cd043..17a7675c 100644 --- a/docs/03-custom_tasks.md +++ b/docs/03-custom_tasks.md @@ -150,7 +150,8 @@ available in `CleverAge\ProcessBundle\Model\AbstractConfigurableTask`. Based on [Symfony's OptionsResolver Component](https://symfony.com/doc/current/components/options_resolver.html) this abstract class allows you to implement its `configureOptions` method to add your requirements, default values and normalizers. Options are resolved (once) during the task initialization, and can be read with `getOptions($state)` or -`getOption($state, $code)`. If the resolution fails during initialization, the error is logged and the options are +`getOption($state, $code)`. If you override `getOptions()`, it must return an `array` (it was typed `?array` before +v6.0). If the resolution fails during initialization, the error is logged and the options are resolved again (failing the process) when the task is first executed. Going on with the process after an initialization failure is deprecated since v5: in v6.0, the process will fail before any task is executed (see [initializable tasks](02-task_types.md#initializable-tasks)). diff --git a/phpstan.neon b/phpstan.neon index 1c22ba10..11d24913 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,5 +1,5 @@ parameters: - level: 7 + level: 8 paths: - src - tests diff --git a/src/Filesystem/CsvResource.php b/src/Filesystem/CsvResource.php index b945ee49..9d5ccbd5 100644 --- a/src/Filesystem/CsvResource.php +++ b/src/Filesystem/CsvResource.php @@ -38,7 +38,7 @@ class CsvResource implements WritableStructuredFileInterface, SeekableFileInterf protected int $headerCount; - protected ?int $lineNumber = 1; + protected int $lineNumber = 1; protected bool $closed = false; diff --git a/src/Model/AbstractConfigurableTask.php b/src/Model/AbstractConfigurableTask.php index 630bd3ec..ca4e318f 100644 --- a/src/Model/AbstractConfigurableTask.php +++ b/src/Model/AbstractConfigurableTask.php @@ -41,9 +41,9 @@ public function reset(): void } /** - * @return array|null + * @return array */ - protected function getOptions(ProcessState $state): ?array + protected function getOptions(ProcessState $state): array { if (null === $this->options) { $resolver = new OptionsResolver(); diff --git a/src/Model/ProcessHistory.php b/src/Model/ProcessHistory.php index 5cf7d050..5757df2b 100644 --- a/src/Model/ProcessHistory.php +++ b/src/Model/ProcessHistory.php @@ -32,7 +32,7 @@ class ProcessHistory implements \Stringable protected string $processCode; - protected ?\DateTimeInterface $startDate; + protected \DateTimeInterface $startDate; protected ?\DateTimeInterface $endDate = null; diff --git a/src/Model/ProcessState.php b/src/Model/ProcessState.php index 26554175..3ead9222 100644 --- a/src/Model/ProcessState.php +++ b/src/Model/ProcessState.php @@ -322,10 +322,9 @@ public function setContext(array $context): void } /** - * @return array|null + * @return array */ - // @phpstan-ignore return.unusedType (narrowing the return type of a non-final class breaks the child classes, see #279) - public function getContextualizedOptions(): ?array + public function getContextualizedOptions(): array { if (!$this->contextualizedOptions) { $options = $this->getTaskConfiguration()