Closed
Description
Symfony had a few recent PRs to the Symfony console that impacted my PHPStan analysis due to PHPDoc changes:
symfony/symfony#28448
symfony/symfony#28374
symfony/symfony#28647
Bottom line:
InputInterface::getArgument
now returnsstring|string[]|null
InputInterface::getOption
returnsstring|string[]|bool|null
.
In reality, they can return string[]
only if the relative argument/option is set as InputArgument::IS_ARRAY
/InputOption::VALUE_IS_ARRAY
.
Is it possible to add an aid in this package for this case? The minimum repro case is this one:
class PhpstanCommand extends \Symfony\Component\Console\Command\Command
{
protected function configure()
{
$this->addArgument('argument', InputArgument::REQUIRED);
$this->addOption('option', null, InputOption::VALUE_REQUIRED);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// Cannot cast array<string>|string|null to string.
$argument = (string) $input->getArgument('argument');
// Cannot cast array<string>|bool|string|null to string.
$option = (string) $input->getOption('option');
}
}
Activity
lookyman commentedon Nov 27, 2018
I am not sure this is possible, since the options are set in a different method on different objects. This would probably require a much deeper analysis of the source code then I can imagine right now. But it is a really annoying thing to ignore these errors every time, so I can give it a go. Or you can always send a PR if you have an idea how to solve it..
vasilvestre commentedon Mar 28, 2021
I really wonder how to configure it but PHP packages. The container isn't found and wrong types are still detected. Is there any change to do ?
ondrejmirtes commentedon Mar 28, 2021
@vasilvestre You don't need a DI container to achieve this, you just need to return a configured Application instance from the
console_application_loader
file. Feel free to open a new issue if you have a specific problem with this.