DirectiveNode   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 11
dl 0
loc 39
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A create() 0 13 3
1
<?php
2
3
/**
4
 * This file is part of Railt package.
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
10
declare(strict_types=1);
11
12
namespace Railt\SDL\Frontend\Ast\Executable;
13
14
use Railt\SDL\Frontend\Ast\DefinitionNode;
15
use Railt\SDL\Frontend\Ast\Node;
16
use Railt\SDL\Frontend\Ast\Type\NamedDirectiveNode;
17
use Railt\SDL\Frontend\Ast\Type\NamedTypeNode;
18
19
/**
20
 * Class DirectiveNode
21
 *
22
 * <code>
23
 *  export interface DirectiveNode {
24
 *      readonly kind: 'Directive';
25
 *      readonly loc?: Location;
26
 *      readonly name: IdentifierNode;
27
 *      readonly arguments?: ReadonlyArray<ArgumentNode>;
28
 *  }
29
 * </code>
30
 */
31
class DirectiveNode extends DefinitionNode
32
{
33
    /**
34
     * @var NamedDirectiveNode
35
     */
36
    public NamedDirectiveNode $name;
37
38
    /**
39
     * @var ArgumentNode[]
40
     */
41
    public array $arguments = [];
42
43
    /**
44
     * DirectiveNode constructor.
45
     *
46
     * @param NamedDirectiveNode $name
47
     */
48
    public function __construct(NamedDirectiveNode $name)
49
    {
50
        $this->name = $name;
51
    }
52
53
    /**
54
     * @param array|Node[] $children
55
     * @return static
56
     */
57
    public static function create(array $children): self
58
    {
59
        $directive = new static($children[0]);
60
61
        foreach ($children as $child) {
62
            switch (true) {
63
                case $child instanceof ArgumentNode:
64
                    $directive->arguments[] = $child;
65
                    break;
66
            }
67
        }
68
69
        return $directive;
70
    }
71
}
72