Completed
Push — master ( 14c836...906b18 )
by Björn
06:09 queued 03:52
created

DocPosProviderTrait   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 2
dl 0
loc 91
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BestIt\Sniffs;
6
7
use BestIt\CodeSniffer\Helper\DocHelper;
8
use PHP_CodeSniffer\Files\File;
9
10
/**
11
 * Trait DocPosProviderTrait.
12
 *
13
 * @author blange <[email protected]>
14
 * @package  BestIt\Sniffs
15
 */
16
trait DocPosProviderTrait
17
{
18
    /**
19
     * The position of the doc comment or null.
20
     *
21
     * @var int|bool
22
     */
23
    private $docCommentPos = false;
24
25
    /**
26
     * The used doc Helper.
27
     *
28
     * @var DocHelper|null
29
     */
30
    private ?DocHelper $docHelper = null;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected '?', expecting T_FUNCTION or T_CONST
Loading history...
31
32
    /**
33
     * Returns the position of the doc block if there is one.
34
     *
35
     * @return int|bool
36
     */
37
    protected function getDocCommentPos()
38
    {
39
        if ($this->docCommentPos === false) {
40
            $this->docCommentPos = $this->loadDocCommentPos();
41
        }
42
43
        return $this->docCommentPos;
44
    }
45
46
    /**
47
     * Returns the helper for the doc block.
48
     *
49
     * @return DocHelper
50
     */
51
    protected function getDocHelper(): DocHelper
52
    {
53
        if ($this->docHelper === null) {
54
            $this->docHelper = new DocHelper($this->getFile(), $this->getStackPos());
55
        }
56
57
        return $this->docHelper;
58
    }
59
60
    /**
61
     * Type-safe getter for the file.
62
     *
63
     * @return File
64
     */
65
    abstract protected function getFile(): File;
66
67
    /**
68
     * Type-safe getter for the stack position.
69
     *
70
     * @return int
71
     */
72
    abstract protected function getStackPos(): int;
73
74
    /**
75
     * Loads the position of the doc comment.
76
     *
77
     * @return int|null
78
     */
79
    protected function loadDocCommentPos(): ?int
80
    {
81
        $docHelper = $this->getDocHelper();
82
83
        return $docHelper->hasDocBlock() ? $docHelper->getBlockStartPosition() : null;
84
    }
85
86
    /**
87
     * Removes the cached data for the doc comment position.
88
     *
89
     * @return void
90
     */
91
    protected function resetDocCommentPos(): void
92
    {
93
        $this->docCommentPos = false;
94
        $this->docHelper = null;
95
    }
96
97
    /**
98
     * Removes the cached data.
99
     *
100
     * @return void
101
     */
102
    protected function tearDown(): void
103
    {
104
        $this->resetDocCommentPos();
105
    }
106
}
107