1 | <?php |
||
2 | |||
3 | declare(strict_types=1); |
||
4 | |||
5 | /* |
||
6 | * This file is part of the humbug/php-scoper package. |
||
7 | * |
||
8 | * Copyright (c) 2017 Théo FIDRY <[email protected]>, |
||
9 | * Pádraic Brady <[email protected]> |
||
10 | * |
||
11 | * For the full copyright and license information, please view the LICENSE |
||
12 | * file that was distributed with this source code. |
||
13 | */ |
||
14 | |||
15 | namespace Humbug\PhpScoper\Symbol; |
||
16 | |||
17 | use function array_filter; |
||
18 | use function array_map; |
||
19 | use function array_pop; |
||
20 | use function array_unique; |
||
21 | use function count; |
||
22 | use function explode; |
||
23 | use function implode; |
||
24 | use function ltrim; |
||
25 | use function Safe\preg_match; |
||
26 | use function str_contains; |
||
27 | use function strtolower; |
||
28 | use function trim; |
||
29 | use const SORT_STRING; |
||
30 | |||
31 | final class NamespaceRegistry |
||
32 | { |
||
33 | /** |
||
34 | * @var list<string> |
||
0 ignored issues
–
show
|
|||
35 | */ |
||
36 | private array $names; |
||
37 | |||
38 | /** |
||
39 | * @var list<string> |
||
40 | */ |
||
41 | private array $regexes; |
||
42 | |||
43 | private bool $containsGlobalNamespace; |
||
44 | |||
45 | /** |
||
46 | * @param string[] $namespaceNames |
||
47 | * @param string[] $namespaceRegexes |
||
48 | */ |
||
49 | public static function create( |
||
50 | array $namespaceNames = [], |
||
51 | array $namespaceRegexes = [] |
||
52 | ): self { |
||
53 | return new self( |
||
54 | array_unique( |
||
55 | array_map( |
||
56 | static fn (string $namespaceName) => strtolower(trim($namespaceName, '\\')), |
||
57 | $namespaceNames, |
||
58 | ), |
||
59 | SORT_STRING, |
||
60 | ), |
||
61 | array_unique($namespaceRegexes, SORT_STRING), |
||
62 | ); |
||
63 | } |
||
64 | |||
65 | /** |
||
66 | * @param list<string> $namespaceNames |
||
67 | * @param list<string> $namespaceRegexes |
||
68 | */ |
||
69 | private function __construct( |
||
70 | array $namespaceNames, |
||
71 | array $namespaceRegexes |
||
72 | ) { |
||
73 | $this->names = $namespaceNames; |
||
0 ignored issues
–
show
It seems like
$namespaceNames of type array is incompatible with the declared type Humbug\PhpScoper\Symbol\list of property $names .
Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property. Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property.. ![]() |
|||
74 | $this->regexes = $namespaceRegexes; |
||
0 ignored issues
–
show
It seems like
$namespaceRegexes of type array is incompatible with the declared type Humbug\PhpScoper\Symbol\list of property $regexes .
Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property. Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property.. ![]() |
|||
75 | |||
76 | $this->containsGlobalNamespace = count( |
||
77 | array_filter( |
||
78 | $namespaceNames, |
||
79 | static fn (string $name) => '' === $name, |
||
80 | ), |
||
81 | ) !== 0; |
||
82 | } |
||
83 | |||
84 | public function belongsToRegisteredNamespace(string $symbolName): bool |
||
85 | { |
||
86 | return $this->isRegisteredNamespace( |
||
87 | self::extractNameNamespace($symbolName), |
||
88 | ); |
||
89 | } |
||
90 | |||
91 | /** |
||
92 | * Checks if the given namespace matches one of the registered namespace |
||
93 | * names, is a sub-namespace of a registered namespace name or matches any |
||
94 | * regex provided. |
||
95 | */ |
||
96 | public function isRegisteredNamespace(string $namespaceName): bool |
||
97 | { |
||
98 | if ($this->containsGlobalNamespace) { |
||
99 | return true; |
||
100 | } |
||
101 | |||
102 | $originalNamespaceName = ltrim($namespaceName, '\\'); |
||
103 | $normalizedNamespaceName = strtolower($originalNamespaceName); |
||
104 | |||
105 | foreach ($this->names as $excludedNamespaceName) { |
||
106 | if ('' === $excludedNamespaceName |
||
107 | || str_contains($normalizedNamespaceName, $excludedNamespaceName) |
||
108 | ) { |
||
109 | return true; |
||
110 | } |
||
111 | } |
||
112 | |||
113 | foreach ($this->regexes as $excludedNamespace) { |
||
114 | if (preg_match($excludedNamespace, $originalNamespaceName)) { |
||
115 | return true; |
||
116 | } |
||
117 | } |
||
118 | |||
119 | return false; |
||
120 | } |
||
121 | |||
122 | /** |
||
123 | * @internal |
||
124 | * |
||
125 | * @return list<string> |
||
126 | */ |
||
127 | public function getNames(): array |
||
128 | { |
||
129 | return $this->names; |
||
0 ignored issues
–
show
|
|||
130 | } |
||
131 | |||
132 | /** |
||
133 | * @internal |
||
134 | * |
||
135 | * @return list<string> |
||
136 | */ |
||
137 | public function getRegexes(): array |
||
138 | { |
||
139 | return $this->regexes; |
||
0 ignored issues
–
show
|
|||
140 | } |
||
141 | |||
142 | private static function extractNameNamespace(string $name): string |
||
143 | { |
||
144 | $nameParts = explode('\\', $name); |
||
145 | |||
146 | array_pop($nameParts); |
||
147 | |||
148 | return [] === $nameParts ? '' : implode('\\', $nameParts); |
||
149 | } |
||
150 | } |
||
151 |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths