GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Pull Request — master (#8)
by Brent
02:11
created

DirectoryParser::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Spatie\CodeOutline\Parser;
4
5
use Closure;
6
use Spatie\CodeOutline\Elements\EmptyLine;
7
use Spatie\CodeOutline\Elements\Line;
8
use Spatie\CodeOutline\Elements\Page;
9
use Symfony\Component\Finder\Finder;
10
11
class DirectoryParser implements Parser
12
{
13
    /** @var string */
14
    protected $path;
15
16
    /** @var array */
17
    protected $extensions = ['php'];
18
19
    /** @var Closure */
20
    protected $initListener;
21
22
    /** @var Closure */
23
    protected $progressListener;
24
25
    public function __construct(string $path)
26
    {
27
        $this->path = $path;
28
    }
29
30
    public function setExtensions(array $extensions): self
31
    {
32
        $this->extensions = $extensions;
33
34
        return $this;
35
    }
36
37
    public function setExtensionsFromString(string $extensionsString): self
38
    {
39
        $extensions = explode(',', $extensionsString);
40
41
        return $this->setExtensions(
42
            array_map(function (string $extension) {
43
                return str_replace(['*', '.'], '', $extension);
44
            }, $extensions)
45
        );
46
    }
47
48
    public function onStartParsing(Closure $initListener): self
49
    {
50
        $this->initListener = $initListener;
51
52
        return $this;
53
    }
54
55
    public function onFileParsed(Closure $progressListener): self
56
    {
57
        $this->progressListener = $progressListener;
58
59
        return $this;
60
    }
61
62
    public function getParsed(): Page
63
    {
64
        $parsedFiles = [];
65
66
        $files = Finder::create()->files()->in($this->path)->name($this->getExtensionsRegex());
67
68
        if ($this->initListener) {
69
            call_user_func_array($this->initListener, [$files->count()]);
70
        }
71
72
        /** @var \Symfony\Component\Finder\SplFileInfo $file */
73
        foreach ($files as $file) {
74
            $fileParser = new FileParser($file->getRealPath());
75
76
            $parsedFiles[] = $fileParser->getParsed();
77
78
            if (!$this->progressListener) {
79
                continue;
80
            }
81
82
            call_user_func($this->progressListener);
83
        }
84
85
        return $this->summarize($parsedFiles);
86
    }
87
88
    /**
89
     * @param \Spatie\CodeOutline\Elements\Page[] $pages
90
     *
91
     * @return \Spatie\CodeOutline\Elements\Page
92
     */
93
    protected function summarize(array $pages): Page
94
    {
95
        $summarizedPage = new Page();
96
97
        foreach ($pages as $page) {
98
            foreach ($page as $lineNumber => $line) {
99
                $summarizedLine = $summarizedPage[$lineNumber] ?? new EmptyLine();
100
101
                $summarizedPage[$lineNumber] = $summarizedLine->merge($line);
102
            }
103
        }
104
105
        return $summarizedPage;
106
    }
107
108
    protected function getExtensionsRegex(): string
109
    {
110
        $query = implode('|', array_map(function ($extension) {
111
            return "\.{$extension}\$";
112
        }, $this->extensions));
113
114
        return "/{$query}/";
115
    }
116
}
117