| Conditions | 19 | 
| Paths | 1 | 
| Total Lines | 72 | 
| Code Lines | 44 | 
| Lines | 0 | 
| Ratio | 0 % | 
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php  | 
            ||
| 84 | private function getDefaultValidator(): callable  | 
            ||
| 85 |     { | 
            ||
| 86 | $choices = $this->choices;  | 
            ||
| 87 | $errorMessage = 'Value "%s" is invalid';  | 
            ||
| 88 | $multiselect = $this->multiselect;  | 
            ||
| 89 | $isAssoc = (bool)count(array_filter(array_keys($this->choices), '\is_string'));  | 
            ||
| 90 | |||
| 91 |         return function ($selected) use ($choices, $errorMessage, $multiselect, $isAssoc) { | 
            ||
| 92 | |||
| 93 | // Collapse all spaces.  | 
            ||
| 94 |             $selectedChoices = str_replace(' ', '', $selected); | 
            ||
| 95 | |||
| 96 |             if ($this->helpText !== null && $selectedChoices === '?') { | 
            ||
| 97 | $this->output->writeln($this->helpText ?: '');  | 
            ||
| 98 | return '?';  | 
            ||
| 99 | }  | 
            ||
| 100 | |||
| 101 |             if ($multiselect) { | 
            ||
| 102 | // Check for a separated comma values  | 
            ||
| 103 |                 if (!preg_match('/^[^,]+(?:,[^,]+)*$/', $selectedChoices, $matches)) { | 
            ||
| 104 | throw new InvalidArgumentException(sprintf($errorMessage, $selected));  | 
            ||
| 105 | }  | 
            ||
| 106 |                 $selectedChoices = explode(',', $selectedChoices); | 
            ||
| 107 |             } else { | 
            ||
| 108 | $selectedChoices = array($selected);  | 
            ||
| 109 | }  | 
            ||
| 110 | |||
| 111 | $multiselectChoices = array();  | 
            ||
| 112 |             foreach ($selectedChoices as $value) { | 
            ||
| 113 | $results = array();  | 
            ||
| 114 |                 foreach ($choices as $key => $choice) { | 
            ||
| 115 |                     if ($choice === $value) { | 
            ||
| 116 | $results[] = $key;  | 
            ||
| 117 | }  | 
            ||
| 118 | }  | 
            ||
| 119 | |||
| 120 |                 if (count($results) > 1) { | 
            ||
| 121 |                     throw new InvalidArgumentException(sprintf('The provided answer is ambiguous. Value should be one of %s.', implode(' or ', $results))); | 
            ||
| 122 | }  | 
            ||
| 123 | |||
| 124 | $result = array_search($value, $choices, true);  | 
            ||
| 125 | |||
| 126 |                 if (!$isAssoc) { | 
            ||
| 127 |                     if (false !== $result) { | 
            ||
| 128 | $result = $choices[$result];  | 
            ||
| 129 |                     } elseif (isset($choices[$value])) { | 
            ||
| 130 | $result = $choices[$value];  | 
            ||
| 131 | }  | 
            ||
| 132 |                 } elseif (false === $result && isset($choices[$value])) { | 
            ||
| 133 | $result = $value;  | 
            ||
| 134 | }  | 
            ||
| 135 | |||
| 136 |                 if (false === $result) { | 
            ||
| 137 | throw new InvalidArgumentException(sprintf($errorMessage, $value));  | 
            ||
| 138 | }  | 
            ||
| 139 | $multiselectChoices[] = (string)$result;  | 
            ||
| 140 | }  | 
            ||
| 141 |             if ($multiselect) { | 
            ||
| 142 |                 if ($this->printAnswer) { | 
            ||
| 143 |                     $this->output->writeln('<info>You selected: ' . \implode(", ", $multiselectChoices) . '</info>'); | 
            ||
| 144 | $this->spacer();  | 
            ||
| 145 | }  | 
            ||
| 146 | return $multiselectChoices;  | 
            ||
| 147 | }  | 
            ||
| 148 | |||
| 149 | $answer = current($multiselectChoices);  | 
            ||
| 150 |             if ($this->printAnswer) { | 
            ||
| 151 |                 $this->output->writeln("<info>You selected: $answer</info>"); | 
            ||
| 152 | $this->spacer();  | 
            ||
| 153 | }  | 
            ||
| 154 | |||
| 155 | return $answer;  | 
            ||
| 156 | };  | 
            ||
| 159 |