Passed
Pull Request — master (#145)
by Christoffer
02:48 queued 25s
created

TypeSystemDefinitionASTBuilder   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 13
dl 0
loc 43
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
C build() 0 29 12
A supportsBuilder() 0 3 1
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 TypeSystemDefinitionASTBuilder 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_DEFINITION;
18
    }
19
20
    /**
21
     * @inheritdoc
22
     */
23
    public function build(LexerInterface $lexer, array $params): ?array
24
    {
25
        // Many definitions begin with a description and require a lookahead.
26
        $keywordToken = $this->peekDescription($lexer) ? $lexer->lookahead() : $lexer->getToken();
27
28
        if ($keywordToken->getKind() === TokenKindEnum::NAME) {
29
            switch ($keywordToken->getValue()) {
30
                case KeywordEnum::SCHEMA:
31
                    return $this->buildAST(ASTKindEnum::SCHEMA_DEFINITION, $lexer);
32
                case KeywordEnum::SCALAR:
33
                    return $this->buildAST(ASTKindEnum::SCALAR_TYPE_DEFINITION, $lexer);
34
                case KeywordEnum::TYPE:
35
                    return $this->buildAST(ASTKindEnum::OBJECT_TYPE_DEFINITION, $lexer);
36
                case KeywordEnum::INTERFACE:
37
                    return $this->buildAST(ASTKindEnum::INTERFACE_TYPE_DEFINITION, $lexer);
38
                case KeywordEnum::UNION:
39
                    return $this->buildAST(ASTKindEnum::UNION_TYPE_DEFINITION, $lexer);
40
                case KeywordEnum::ENUM:
41
                    return $this->buildAST(ASTKindEnum::ENUM_TYPE_DEFINITION, $lexer);
42
                case KeywordEnum::INPUT:
43
                    return $this->buildAST(ASTKindEnum::INPUT_OBJECT_TYPE_DEFINITION, $lexer);
44
                case KeywordEnum::EXTEND:
45
                    return $this->buildAST(ASTKindEnum::TYPE_SYSTEM_EXTENSION, $lexer);
46
                case KeywordEnum::DIRECTIVE:
47
                    return $this->buildAST(ASTKindEnum::DIRECTIVE_DEFINITION, $lexer);
48
            }
49
        }
50
51
        throw $this->unexpected($lexer, $keywordToken);
52
    }
53
}
54