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

TypeSystemDefinitionASTBuilder::build()   C

Complexity

Conditions 12
Paths 22

Size

Total Lines 29
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 29
rs 5.1612
c 0
b 0
f 0
cc 12
eloc 22
nc 22
nop 2

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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