Passed
Pull Request — master (#145)
by Christoffer
02:24
created

TypeSystemExtensionASTBuilder::build()   C

Complexity

Conditions 8
Paths 8

Size

Total Lines 22
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 6.6037
c 0
b 0
f 0
cc 8
eloc 16
nc 8
nop 2
1
<?php
2
3
namespace Digia\GraphQL\Language\ASTBuilder;
4
5
use Digia\GraphQL\Language\KeywordEnum;
6
use Digia\GraphQL\Language\LexerInterface;
7
use Digia\GraphQL\Language\TokenKindEnum;
8
9
class TypeSystemExtensionASTBuilder extends AbstractASTBuilder
10
{
11
    /**
12
     * @param LexerInterface $lexer
13
     * @return bool
14
     */
15
    public function supportsBuilder(string $kind): bool
16
    {
17
        return $kind === ASTKindEnum::TYPE_SYSTEM_EXTENSION;
18
    }
19
20
    /**
21
     * @inheritdoc
22
     */
23
    public function build(LexerInterface $lexer, array $params): ?array
24
    {
25
        $keywordToken = $lexer->lookahead();
26
27
        if ($keywordToken->getKind() === TokenKindEnum::NAME) {
28
            switch ($keywordToken->getValue()) {
29
                case KeywordEnum::SCALAR:
30
                    return $this->buildAST(ASTKindEnum::SCALAR_TYPE_EXTENSION, $lexer);
31
                case KeywordEnum::TYPE:
32
                    return $this->buildAST(ASTKindEnum::OBJECT_TYPE_EXTENSION, $lexer);
33
                case KeywordEnum::INTERFACE:
34
                    return $this->buildAST(ASTKindEnum::INTERFACE_TYPE_EXTENSION, $lexer);
35
                case KeywordEnum::UNION:
36
                    return $this->buildAST(ASTKindEnum::UNION_TYPE_EXTENSION, $lexer);
37
                case KeywordEnum::ENUM:
38
                    return $this->buildAST(ASTKindEnum::ENUM_TYPE_EXTENSION, $lexer);
39
                case KeywordEnum::INPUT:
40
                    return $this->buildAST(ASTKindEnum::INPUT_OBJECT_TYPE_EXTENSION, $lexer);
41
            }
42
        }
43
44
        throw $this->unexpected($lexer, $keywordToken);
45
    }
46
}
47