Skip to content

Help getArgument/getOption in Symfony Console InputInterface #20

Closed
@Jean85

Description

@Jean85

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 returns string|string[]|null
  • InputInterface::getOption returns string|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

lookyman commented on Nov 27, 2018

@lookyman
Collaborator

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..

added
help wantedExtra attention is needed
and removed on Nov 30, 2018
vasilvestre

vasilvestre commented on Mar 28, 2021

@vasilvestre

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

ondrejmirtes commented on Mar 28, 2021

@ondrejmirtes
Member

@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.

locked as resolved and limited conversation to collaborators on Mar 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @ondrejmirtes@lookyman@Jean85@vasilvestre

      Issue actions

        Help getArgument/getOption in Symfony Console InputInterface · Issue #20 · phpstan/phpstan-symfony