Completed
Push — master ( 759e75...59dba5 )
by Shane
02:24
created

KeyParser   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 48
wmc 6
lcom 1
cbo 3
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A canParse() 0 4 2
A parse() 0 14 2
A canParseKey() 0 4 2
1
<?php
2
3
namespace PhpHocon\Token\Parser;
4
5
use PhpHocon\Token\Key;
6
use PhpHocon\Token\Tokens;
7
8
class KeyParser implements Parser
9
{
10
    /**
11
     * @var array
12
     */
13
    private $breakCharacters = [
14
        Tokens::EQUALS,
15
        Tokens::COLON,
16
        Tokens::SPACE
17
    ];
18
19
    /**
20
     * @param ParserState $state
21
     * @return boolean
22
     */
23
    public function canParse(ParserState $state)
24
    {
25
        return $state->isParsingKey() && !in_array($state->getHeadCharacter(), $this->breakCharacters);
26
    }
27
28
    /**
29
     * @param ParserState $state
30
     * @return ParseResult
31
     */
32
    public function parse(ParserState $state)
33
    {
34
        $characters = $state->getCharacters();
35
        $keyName = '';
36
37
        while($this->canParseKey($characters)) {
38
            $keyName .= array_shift($characters);
39
        }
40
41
        return new ParseResult(
42
            new ParserState($characters, $state->getBraceCount(), false, true),
43
            new Key($keyName)
44
        );
45
    }
46
47
    /**
48
     * @param string[] $characters
49
     * @return bool
50
     */
51
    private function canParseKey(array $characters)
52
    {
53
        return !empty($characters) && !in_array($characters[0], $this->breakCharacters);
54
    }
55
}
56