2021-05-10 00:23:30 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2021-07-06 08:19:07 +00:00
namespace RectorPrefix20210706\Symfony\Component\Console\Input ;
2021-05-10 00:23:30 +00:00
2021-07-06 08:19:07 +00:00
use RectorPrefix20210706\Symfony\Component\Console\Exception\InvalidArgumentException ;
use RectorPrefix20210706\Symfony\Component\Console\Exception\LogicException ;
2021-05-10 00:23:30 +00:00
/**
* Represents a command line option .
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class InputOption
{
/**
* Do not accept input for the option ( e . g . -- yell ) . This is the default behavior of options .
*/
public const VALUE_NONE = 1 ;
/**
* A value must be passed when the option is used ( e . g . -- iterations = 5 or - i5 ) .
*/
public const VALUE_REQUIRED = 2 ;
/**
* The option may or may not have a value ( e . g . -- yell or -- yell = loud ) .
*/
public const VALUE_OPTIONAL = 4 ;
/**
* The option accepts multiple values ( e . g . -- dir =/ foo -- dir =/ bar ) .
*/
public const VALUE_IS_ARRAY = 8 ;
2021-06-01 12:39:02 +00:00
/**
* The option may have either positive or negative value ( e . g . -- ansi or -- no - ansi ) .
*/
public const VALUE_NEGATABLE = 16 ;
2021-05-10 00:23:30 +00:00
private $name ;
private $shortcut ;
private $mode ;
private $default ;
private $description ;
/**
2021-07-05 15:06:41 +00:00
* @ param string | array | null $shortcut The shortcuts , can be null , a string of shortcuts delimited by | or an array of shortcuts
* @ param int | null $mode The option mode : One of the VALUE_ * constants
* @ param string | bool | int | float | array | null $default The default value ( must be null for self :: VALUE_NONE )
2021-05-10 00:23:30 +00:00
*
* @ throws InvalidArgumentException If option mode is invalid or incompatible
*/
public function __construct ( string $name , $shortcut = null , int $mode = null , string $description = '' , $default = null )
{
if ( 0 === \strpos ( $name , '--' )) {
$name = \substr ( $name , 2 );
}
if ( empty ( $name )) {
2021-07-06 08:19:07 +00:00
throw new \RectorPrefix20210706\Symfony\Component\Console\Exception\InvalidArgumentException ( 'An option name cannot be empty.' );
2021-05-10 00:23:30 +00:00
}
if ( empty ( $shortcut )) {
$shortcut = null ;
}
if ( null !== $shortcut ) {
if ( \is_array ( $shortcut )) {
$shortcut = \implode ( '|' , $shortcut );
}
$shortcuts = \preg_split ( '{(\\|)-?}' , \ltrim ( $shortcut , '-' ));
$shortcuts = \array_filter ( $shortcuts );
$shortcut = \implode ( '|' , $shortcuts );
if ( empty ( $shortcut )) {
2021-07-06 08:19:07 +00:00
throw new \RectorPrefix20210706\Symfony\Component\Console\Exception\InvalidArgumentException ( 'An option shortcut cannot be empty.' );
2021-05-10 00:23:30 +00:00
}
}
if ( null === $mode ) {
$mode = self :: VALUE_NONE ;
2021-06-01 12:39:02 +00:00
} elseif ( $mode >= self :: VALUE_NEGATABLE << 1 || $mode < 1 ) {
2021-07-06 08:19:07 +00:00
throw new \RectorPrefix20210706\Symfony\Component\Console\Exception\InvalidArgumentException ( \sprintf ( 'Option mode "%s" is not valid.' , $mode ));
2021-05-10 00:23:30 +00:00
}
$this -> name = $name ;
$this -> shortcut = $shortcut ;
$this -> mode = $mode ;
$this -> description = $description ;
if ( $this -> isArray () && ! $this -> acceptValue ()) {
2021-07-06 08:19:07 +00:00
throw new \RectorPrefix20210706\Symfony\Component\Console\Exception\InvalidArgumentException ( 'Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.' );
2021-06-01 12:39:02 +00:00
}
if ( $this -> isNegatable () && $this -> acceptValue ()) {
2021-07-06 08:19:07 +00:00
throw new \RectorPrefix20210706\Symfony\Component\Console\Exception\InvalidArgumentException ( 'Impossible to have an option mode VALUE_NEGATABLE if the option also accepts a value.' );
2021-05-10 00:23:30 +00:00
}
$this -> setDefault ( $default );
}
/**
* Returns the option shortcut .
*
* @ return string | null The shortcut
*/
public function getShortcut ()
{
return $this -> shortcut ;
}
/**
* Returns the option name .
*
* @ return string The name
*/
public function getName ()
{
return $this -> name ;
}
/**
* Returns true if the option accepts a value .
*
* @ return bool true if value mode is not self :: VALUE_NONE , false otherwise
*/
public function acceptValue ()
{
return $this -> isValueRequired () || $this -> isValueOptional ();
}
/**
* Returns true if the option requires a value .
*
* @ return bool true if value mode is self :: VALUE_REQUIRED , false otherwise
*/
public function isValueRequired ()
{
return self :: VALUE_REQUIRED === ( self :: VALUE_REQUIRED & $this -> mode );
}
/**
* Returns true if the option takes an optional value .
*
* @ return bool true if value mode is self :: VALUE_OPTIONAL , false otherwise
*/
public function isValueOptional ()
{
return self :: VALUE_OPTIONAL === ( self :: VALUE_OPTIONAL & $this -> mode );
}
/**
* Returns true if the option can take multiple values .
*
* @ return bool true if mode is self :: VALUE_IS_ARRAY , false otherwise
*/
public function isArray ()
{
return self :: VALUE_IS_ARRAY === ( self :: VALUE_IS_ARRAY & $this -> mode );
}
2021-06-01 12:39:02 +00:00
public function isNegatable () : bool
{
return self :: VALUE_NEGATABLE === ( self :: VALUE_NEGATABLE & $this -> mode );
}
2021-05-10 00:23:30 +00:00
/**
2021-07-05 15:06:41 +00:00
* @ param string | bool | int | float | array | null $default
2021-05-10 00:23:30 +00:00
*/
public function setDefault ( $default = null )
{
if ( self :: VALUE_NONE === ( self :: VALUE_NONE & $this -> mode ) && null !== $default ) {
2021-07-06 08:19:07 +00:00
throw new \RectorPrefix20210706\Symfony\Component\Console\Exception\LogicException ( 'Cannot set a default value when using InputOption::VALUE_NONE mode.' );
2021-05-10 00:23:30 +00:00
}
if ( $this -> isArray ()) {
if ( null === $default ) {
$default = [];
} elseif ( ! \is_array ( $default )) {
2021-07-06 08:19:07 +00:00
throw new \RectorPrefix20210706\Symfony\Component\Console\Exception\LogicException ( 'A default value for an array option must be an array.' );
2021-05-10 00:23:30 +00:00
}
}
2021-06-01 12:39:02 +00:00
$this -> default = $this -> acceptValue () || $this -> isNegatable () ? $default : \false ;
2021-05-10 00:23:30 +00:00
}
/**
* Returns the default value .
*
2021-07-05 15:06:41 +00:00
* @ return string | bool | int | float | array | null
2021-05-10 00:23:30 +00:00
*/
public function getDefault ()
{
return $this -> default ;
}
/**
* Returns the description text .
*
* @ return string The description text
*/
public function getDescription ()
{
return $this -> description ;
}
/**
* Checks whether the given option equals this one .
*
* @ return bool
* @ param $this $option
*/
public function equals ( $option )
{
2021-06-01 12:39:02 +00:00
return $option -> getName () === $this -> getName () && $option -> getShortcut () === $this -> getShortcut () && $option -> getDefault () === $this -> getDefault () && $option -> isNegatable () === $this -> isNegatable () && $option -> isArray () === $this -> isArray () && $option -> isValueRequired () === $this -> isValueRequired () && $option -> isValueOptional () === $this -> isValueOptional ();
2021-05-10 00:23:30 +00:00
}
}