Skip to content

Commit 752cfed

Browse files
Handle sub-namespaces
1 parent 2c52441 commit 752cfed

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

src/Target/MapBuilder.php

+25-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111

1212
use function array_keys;
1313
use function array_merge;
14+
use function array_slice;
1415
use function array_unique;
16+
use function count;
17+
use function explode;
18+
use function implode;
1519
use function range;
1620
use SebastianBergmann\CodeCoverage\Filter;
1721
use SebastianBergmann\CodeCoverage\StaticAnalysis\Class_;
@@ -48,7 +52,7 @@ public function build(Filter $filter, FileAnalyser $analyser): array
4852
foreach ($filter->files() as $file) {
4953
foreach ($analyser->traitsIn($file) as $trait) {
5054
if ($trait->isNamespaced()) {
51-
$this->process($namespaces, $trait->namespace(), $file, $trait->startLine(), $trait->endLine());
55+
$this->processNamespace($namespaces, $trait->namespace(), $file, $trait->startLine(), $trait->endLine());
5256
}
5357

5458
$this->process($traits, $trait->namespacedName(), $file, $trait->startLine(), $trait->endLine());
@@ -88,7 +92,7 @@ public function build(Filter $filter, FileAnalyser $analyser): array
8892

8993
foreach ($analyser->classesIn($file) as $class) {
9094
if ($class->isNamespaced()) {
91-
$this->process($namespaces, $class->namespace(), $file, $class->startLine(), $class->endLine());
95+
$this->processNamespace($namespaces, $class->namespace(), $file, $class->startLine(), $class->endLine());
9296
}
9397

9498
$this->process($classes, $class->namespacedName(), $file, $class->startLine(), $class->endLine());
@@ -122,7 +126,7 @@ public function build(Filter $filter, FileAnalyser $analyser): array
122126

123127
foreach ($analyser->functionsIn($file) as $function) {
124128
if ($function->isNamespaced()) {
125-
$this->process($namespaces, $function->namespace(), $file, $function->startLine(), $function->endLine());
129+
$this->processNamespace($namespaces, $function->namespace(), $file, $function->startLine(), $function->endLine());
126130
}
127131

128132
$this->process($functions, $function->namespacedName(), $file, $function->startLine(), $function->endLine());
@@ -199,6 +203,24 @@ private function processMethods(Class_|Trait_ $classOrTrait, string $file, array
199203
}
200204
}
201205

206+
/**
207+
* @param TargetMapPart $data
208+
* @param non-empty-string $namespace
209+
* @param non-empty-string $file
210+
* @param positive-int $startLine
211+
* @param positive-int $endLine
212+
*
213+
* @param-out TargetMapPart $data
214+
*/
215+
private function processNamespace(array &$data, string $namespace, string $file, int $startLine, int $endLine): void
216+
{
217+
$parts = explode('\\', $namespace);
218+
219+
foreach (range(1, count($parts)) as $i) {
220+
$this->process($data, implode('\\', array_slice($parts, 0, $i)), $file, $startLine, $endLine);
221+
}
222+
}
223+
202224
/**
203225
* @param TargetMapPart $data
204226
* @param non-empty-string $unit

tests/tests/Target/MapBuilderTest.php

+16
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,22 @@ public function testBuildsMap(): void
3232
$this->assertSame(
3333
[
3434
'namespaces' => [
35+
'SebastianBergmann' => [
36+
$file => array_merge(
37+
range(19, 24),
38+
range(26, 31),
39+
range(33, 52),
40+
range(54, 56),
41+
),
42+
],
43+
'SebastianBergmann\\CodeCoverage' => [
44+
$file => array_merge(
45+
range(19, 24),
46+
range(26, 31),
47+
range(33, 52),
48+
range(54, 56),
49+
),
50+
],
3551
'SebastianBergmann\\CodeCoverage\\StaticAnalysis' => [
3652
$file => array_merge(
3753
range(19, 24),

0 commit comments

Comments
 (0)