Skip to content

Commit

Permalink
Merge pull request #54 from gsteel/get-messages
Browse files Browse the repository at this point in the history
Static analysis Improvements and general clean up
  • Loading branch information
Ocramius committed Jun 10, 2022
2 parents 14dca87 + 853a0ac commit 61381ca
Show file tree
Hide file tree
Showing 36 changed files with 764 additions and 1,345 deletions.
299 changes: 139 additions & 160 deletions composer.lock

Large diffs are not rendered by default.

768 changes: 66 additions & 702 deletions psalm-baseline.xml

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions src/ArrayInput.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@

class ArrayInput extends Input
{
/** @var array */
/** @var array<array-key, mixed> */
protected $value = [];

/**
* @param array $value
* @inheritDoc
* @param array<array-key, mixed> $value
* @throws Exception\InvalidArgumentException
* @return Input
*/
public function setValue($value)
{
Expand All @@ -24,7 +24,9 @@ public function setValue($value)
gettype($value)
));
}
return parent::setValue($value);
parent::setValue($value);

return $this;
}

/**
Expand Down
71 changes: 40 additions & 31 deletions src/BaseInputFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@
use function array_key_exists;
use function array_keys;
use function array_merge;
use function assert;
use function count;
use function func_get_args;
use function get_class;
use function gettype;
use function is_array;
use function is_int;
use function is_object;
use function is_string;
use function sprintf;

class BaseInputFilter implements
Expand All @@ -29,22 +31,22 @@ class BaseInputFilter implements
ReplaceableInputInterface,
UnfilteredDataInterface
{
/** @var null|array */
/** @var array<array-key, mixed>|null */
protected $data;

/** @var array|object */
/** @var array<array-key, mixed> */
protected $unfilteredData = [];

/** @var InputInterface[]|InputFilterInterface[] */
/** @var array<string, InputInterface|InputFilterInterface> */
protected $inputs = [];

/** @var InputInterface[]|InputFilterInterface[]|null */
/** @var array<string, InputInterface|InputFilterInterface>|null */
protected $invalidInputs;

/** @var null|string[]|null Input names */
/** @var null|array<array-key, string> Input names */
protected $validationGroup;

/** @var InputInterface[]|InputFilterInterface[]|null */
/** @var array<string, InputInterface|InputFilterInterface>|null */
protected $validInputs;

/**
Expand Down Expand Up @@ -76,7 +78,8 @@ public function count()
* @param InputInterface|InputFilterInterface $input
* @param null|string $name Name used to retrieve this input
* @throws Exception\InvalidArgumentException
* @return InputFilterInterface
* @return $this
* @psalm-suppress MoreSpecificImplementedParamType
*/
public function add($input, $name = null)
{
Expand Down Expand Up @@ -177,7 +180,7 @@ public function remove($name)
/**
* Set data to use when validating and filtering
*
* @param null|array|Traversable $data null is cast to an empty array.
* @param iterable|null $data null is cast to an empty array.
* @throws Exception\InvalidArgumentException
* @return InputFilterInterface
*/
Expand All @@ -192,6 +195,7 @@ public function setData($data)
$data = ArrayUtils::iteratorToArray($data);
}

/** @psalm-suppress RedundantConditionGivenDocblockType, DocblockTypeContradiction */
if (! is_array($data)) {
throw new Exception\InvalidArgumentException(sprintf(
'%s expects an array or Traversable argument; received %s',
Expand Down Expand Up @@ -231,8 +235,8 @@ public function isValid($context = null)
/**
* Validate a set of inputs against the current data
*
* @param string[] $inputs Array of input names.
* @param array $data
* @param array<array-key, string> $inputs Array of input names.
* @param array<array-key, mixed> $data
* @param mixed|null $context
* @return bool
*/
Expand Down Expand Up @@ -299,7 +303,7 @@ protected function validateInputs(array $inputs, array $data = [], $context = nu
* Implementations should allow passing a single array value, or multiple arguments,
* each specifying a single input.
*
* @param mixed $name
* @param string|array<array-key, string> $name
* @throws Exception\InvalidArgumentException
* @return InputFilterInterface
*/
Expand All @@ -318,16 +322,17 @@ public function setValidationGroup($name)
if (is_array($name)) {
$inputs = [];
foreach ($name as $key => $value) {
if (! $this->has($key)) {
if (! $this->has((string) $key)) {
$inputs[] = $value;
continue;
}

$inputs[] = $key;

if ($this->inputs[$key] instanceof InputFilterInterface) {
$input = $this->inputs[(string) $key];
if ($input instanceof InputFilterInterface) {
// Recursively populate validation groups for sub input filters
$this->inputs[$key]->setValidationGroup($value);
$input->setValidationGroup($value);
}
}
} else {
Expand All @@ -348,7 +353,7 @@ public function setValidationGroup($name)
* Implementations should return an associative array of name/input pairs
* that failed validation.
*
* @return InputInterface[]
* @return array<string, InputInterface|InputFilterInterface>
*/
public function getInvalidInput()
{
Expand All @@ -361,7 +366,7 @@ public function getInvalidInput()
* Implementations should return an associative array of name/input pairs
* that passed validation.
*
* @return InputInterface[]
* @return array<string, InputInterface|InputFilterInterface>
*/
public function getValidInput()
{
Expand Down Expand Up @@ -399,7 +404,7 @@ public function getValue($name)
* List should be an associative array, with the values filtered. If
* validation failed, this should raise an exception.
*
* @return array
* @return array<string, mixed>
*/
public function getValues()
{
Expand All @@ -408,11 +413,12 @@ public function getValues()
foreach ($inputs as $name) {
$input = $this->inputs[$name];

if ($input instanceof InputFilterInterface) {
$values[$name] = $input->getValues();
continue;
}
$values[$name] = $input->getValue();
$value = $input instanceof InputFilterInterface
? $input->getValues()
: $input->getValue();

/** @psalm-suppress MixedAssignment */
$values[$name] = $value;
}
return $values;
}
Expand Down Expand Up @@ -446,7 +452,7 @@ public function getRawValue($name)
* List should be an associative array of named input/value pairs,
* with the values unfiltered.
*
* @return array
* @return array<array-key, mixed>
*/
public function getRawValues()
{
Expand All @@ -457,6 +463,7 @@ public function getRawValues()
continue;
}

/** @psalm-suppress MixedAssignment */
$values[$name] = $input->getRawValue();
}
return $values;
Expand All @@ -468,7 +475,7 @@ public function getRawValues()
* Should return an associative array of named input/message list pairs.
* Pairs should only be returned for inputs that failed validation.
*
* @return array
* @return array<string, array<array-key, string>>
*/
public function getMessages()
{
Expand All @@ -483,17 +490,17 @@ public function getMessages()
/**
* Ensure all names of a validation group exist as input in the filter
*
* @param string[] $inputs Input names
* @param array<array-key, string> $inputs Input names
* @return void
* @throws Exception\InvalidArgumentException
*/
protected function validateValidationGroup(array $inputs)
{
foreach ($inputs as $name) {
if (! array_key_exists($name, $this->inputs)) {
if (! is_string($name) || ! array_key_exists($name, $this->inputs)) {
throw new Exception\InvalidArgumentException(sprintf(
'setValidationGroup() expects a list of valid input names; "%s" was not found',
$name
(string) $name
));
}
}
Expand All @@ -506,6 +513,7 @@ protected function validateValidationGroup(array $inputs)
*/
protected function populate()
{
assert($this->data !== null);
foreach (array_keys($this->inputs) as $name) {
$input = $this->inputs[$name];

Expand All @@ -530,6 +538,7 @@ protected function populate()
continue;
}

/** @psalm-suppress MixedAssignment */
$value = $this->data[$name];

if ($input instanceof InputFilterInterface) {
Expand Down Expand Up @@ -590,7 +599,7 @@ public function getUnknown()
/**
* Get an array of all inputs
*
* @return InputInterface[]|InputFilterInterface[]
* @return array<string, InputInterface|InputFilterInterface>
*/
public function getInputs()
{
Expand All @@ -600,7 +609,7 @@ public function getInputs()
/**
* Merges the inputs from an InputFilter into the current one
*
* @return self
* @return $this
*/
public function merge(BaseInputFilter $inputFilter)
{
Expand All @@ -612,15 +621,15 @@ public function merge(BaseInputFilter $inputFilter)
}

/**
* @return array|object
* @return array<array-key, mixed>
*/
public function getUnfilteredData()
{
return $this->unfilteredData;
}

/**
* @param array|object $data
* @param array<array-key, mixed> $data
* @return $this
*/
public function setUnfilteredData($data)
Expand Down
Loading

0 comments on commit 61381ca

Please sign in to comment.