PluginProbe ʕ •ᴥ•ʔ
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 3.10.1
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v3.10.1
4.7.2 4.7.1 trunk 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 3.0.0 3.0.1 3.1.0 3.10.0 3.10.1 3.11.1 3.11.2 3.11.3 3.2.0 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.5 3.6.6 3.7.0 3.7.1 3.8.0 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.2.0 4.2.1 4.2.10 4.2.11 4.2.12 4.2.13 4.2.14 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.3.10 4.3.11 4.3.12 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.7.1 4.3.8 4.3.9 4.3.9.1 4.4.0 4.4.1 4.4.2 4.5.0 4.5.1 4.5.10 4.5.11 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.5.8 4.5.9 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.7.0
cookiebot / addons / inc / Dependencies / PhpDocReader / PhpParser / UseStatementParser.php
cookiebot / addons / inc / Dependencies / PhpDocReader / PhpParser Last commit date
TokenParser.php 5 years ago UseStatementParser.php 5 years ago
UseStatementParser.php
65 lines
1 <?php declare(strict_types=1);
2
3 namespace Cybot\Dependencies\PhpDocReader\PhpParser;
4
5 use SplFileObject;
6
7 /**
8 * Parses a file for "use" declarations.
9 *
10 * Class taken and adapted from doctrine/annotations to avoid pulling the whole package.
11 *
12 * Authors: Fabien Potencier <fabien@symfony.com> and Christian Kaps <christian.kaps@mohiva.com>
13 */
14 class UseStatementParser
15 {
16 /**
17 * @return array A list with use statements in the form (Alias => FQN).
18 */
19 public function parseUseStatements(\ReflectionClass $class): array
20 {
21 $filename = $class->getFilename();
22 if ($filename === false) {
23 return [];
24 }
25
26 $content = $this->getFileContent($filename, $class->getStartLine());
27
28 if ($content === null) {
29 return [];
30 }
31
32 $namespace = preg_quote($class->getNamespaceName(), '/');
33 $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content);
34 $tokenizer = new TokenParser('<?php ' . $content);
35
36 return $tokenizer->parseUseStatements($class->getNamespaceName());
37 }
38
39 /**
40 * Gets the content of the file right up to the given line number.
41 *
42 * @param string $filename The name of the file to load.
43 * @param int $lineNumber The number of lines to read from file.
44 */
45 private function getFileContent(string $filename, int $lineNumber): string
46 {
47 if (! is_file($filename)) {
48 throw new \RuntimeException("Unable to read file $filename");
49 }
50
51 $content = '';
52 $lineCnt = 0;
53 $file = new SplFileObject($filename);
54 while (! $file->eof()) {
55 if ($lineCnt++ === $lineNumber) {
56 break;
57 }
58
59 $content .= $file->fgets();
60 }
61
62 return $content;
63 }
64 }
65