• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

majermi4 / FriendlyConfig / 10884159243

16 Sep 2024 12:49PM UTC coverage: 94.231% (+0.8%) from 93.392%
10884159243

push

github

Michal Majer
Apply code style rules.

1 of 2 new or added lines in 2 files covered. (50.0%)

245 of 260 relevant lines covered (94.23%)

25.83 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.0
/src/Majermi4/FriendlyConfig/PhpDocParser/ArrayItemTypeParser.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Majermi4\FriendlyConfig\PhpDocParser;
6

7
use Majermi4\FriendlyConfig\Exception\InvalidConfigClassException;
8
use Majermi4\FriendlyConfig\ParameterTypes;
9
use Nette\Utils\Reflection;
10
use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
11
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
12
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
13
use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode;
14

15
class ArrayItemTypeParser
16
{
17
    public static function getParameterArrayItemType(\ReflectionParameter $parameter): ArrayItemType
18
    {
19
        $parameterType = PhpDocParser::getParameterPhpDocType($parameter);
38✔
20
        /** @var array<IdentifierTypeNode> $genericTypes */
21
        $genericTypes = self::getArrayTypeNode($parameterType, $parameter->name)->genericTypes;
37✔
22

23
        if (\count($genericTypes) === 1) {
36✔
24
            $arrayKeyType = ParameterTypes::INT;
29✔
25
            $arrayItemType = $genericTypes[0]->name;
29✔
26
        } elseif (\count($genericTypes) === 2) {
7✔
27
            $arrayKeyType = $genericTypes[0]->name === 'string' ? 'string' : 'int';
7✔
28
            $arrayItemType = $genericTypes[1]->name ?? ParameterTypes::MIXED;
7✔
29
        } else {
30
            throw InvalidConfigClassException::invalidConstructorDocCommentFormat($parameter->name);
×
31
        }
32

33
        if (!ParameterTypes::isSupportedType($arrayItemType)) {
36✔
34
            /** @var \ReflectionClass<object> $classReflection */
35
            $classReflection = $parameter->getDeclaringClass();
4✔
36
            $arrayItemType = Reflection::expandClassName($arrayItemType, $classReflection);
4✔
37
        }
38

39
        return new ArrayItemType($arrayKeyType, $arrayItemType);
36✔
40
    }
41

42
    private static function getArrayTypeNode(TypeNode $parameterType, string $parameterName): GenericTypeNode
43
    {
44
        if ($parameterType instanceof GenericTypeNode) {
37✔
45
            return $parameterType;
21✔
46
        }
47

48
        if ($parameterType instanceof UnionTypeNode) {
16✔
49
            foreach ($parameterType->types as $type) {
15✔
50
                if ($type instanceof GenericTypeNode) {
15✔
51
                    return $type;
15✔
52
                }
53
            }
54
        }
55

56
        throw InvalidConfigClassException::invalidConstructorDocCommentFormat($parameterName);
1✔
57
    }
58
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc