Completed
Push — master ( 11034c...5289fb )
by Shcherbak
02:29
created

FunctionCallPattern::withName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 1
eloc 3
nc 1
nop 1
crap 1
1
<?php
2
3
  namespace Funivan\PhpTokenizer\Pattern\Patterns;
4
5
  use Funivan\PhpTokenizer\Query\Query;
6
  use Funivan\PhpTokenizer\QuerySequence\QuerySequence;
7
8
  /**
9
   *
10
   */
11
  class FunctionCallPattern implements PatternInterface {
12
13
    /**
14
     * @var Query|null
15
     */
16
    private $nameQuery;
17
18
19
    /**
20
     * @param Query $query
21
     * @return $this
22
     */
23 3
    public function withName(Query $query) {
24 3
      $this->nameQuery = $query;
25 3
      return $this;
26
    }
27
28
29
    /**
30
     * @inheritdoc
31
     */
32 6
    public function __invoke(QuerySequence $querySequence) {
33
34 6
      $name = $querySequence->strict(T_STRING);
35 6
      if ($this->nameQuery !== null and $this->nameQuery->isValid($name) === false) {
36 3
        return null;
37
      }
38
39 6
      $querySequence->possible(T_WHITESPACE);
40 6
      $arguments = $querySequence->section('(', ')');
41
42 6
      if (!$querySequence->isValid()) {
43 6
        return null;
44
      }
45
46 6
      $querySequence->moveToToken($name);
47 6
      $before = $querySequence->move(-1);
48 6
      if ($before->getType() === T_WHITESPACE) {
49 6
        $before = $querySequence->move(-1);
50 4
      }
51
52 6
      if (in_array($before->getValue(), ['::', 'function'])) {
53 3
        return null;
54
      }
55
56 6
      return $querySequence->getCollection()->extractByTokens($name, $arguments->getLast());
57
    }
58
59
  }