Skip to content

Commit 3f647c8

Browse files
committed
Enhancement: Document array shapes
1 parent f13d24c commit 3f647c8

File tree

6 files changed

+120
-12
lines changed

6 files changed

+120
-12
lines changed

.psalm/baseline.xml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<files psalm-version="5.7.1@8e0fd880141f236847ab49a06f94f788d41a4292">
2+
<files psalm-version="5.7.5@5390c212bab06ee230c8720c2e9c54b823db00c8">
33
<file src="src/CodeCoverage.php">
44
<ArgumentTypeCoercion>
55
<code>$tmp[0]</code>
@@ -71,7 +71,31 @@
7171
<code><![CDATA[$this->codeUnitsByLine]]></code>
7272
<code><![CDATA[$this->codeUnitsByLine]]></code>
7373
<code><![CDATA[$this->codeUnitsByLine]]></code>
74+
<code><![CDATA[$this->codeUnitsByLine]]></code>
75+
<code><![CDATA[$this->codeUnitsByLine]]></code>
7476
</InvalidPropertyAssignmentValue>
77+
<LessSpecificReturnStatement>
78+
<code>$methodData</code>
79+
</LessSpecificReturnStatement>
80+
<MoreSpecificReturnType>
81+
<code>array{
82+
* methodName: string,
83+
* visibility: string,
84+
* signature: string,
85+
* startLine: int,
86+
* endLine: int,
87+
* executableLines: int,
88+
* executedLines: int,
89+
* executableBranches: int,
90+
* executedBranches: int,
91+
* executablePaths: int,
92+
* executedPaths: int,
93+
* ccn: int,
94+
* coverage: int,
95+
* crap: int,
96+
* link: string
97+
* }</code>
98+
</MoreSpecificReturnType>
7599
</file>
76100
<file src="src/Node/Iterator.php">
77101
<ArgumentTypeCoercion>

src/Node/File.php

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,35 @@ private function processClasses(array $classes): void
360360
$link = $this->id() . '.html#';
361361

362362
foreach ($classes as $className => $class) {
363-
$this->classes[$className] = [
363+
/** @psalm-var array{
364+
* className: class-string,
365+
* namespace: string,
366+
* methods: array<string, array{
367+
* ccn: int,
368+
* executableLines: int,
369+
* executedLines: int,
370+
* executableBranches: int,
371+
* executedBranches: int,
372+
* executablePaths: int,
373+
* executedPaths: int,
374+
* coverage: float,
375+
* crap: string,
376+
* link: string
377+
* }>,
378+
* startLine: int,
379+
* executableLines: int,
380+
* executedLines: int,
381+
* executableBranches: int,
382+
* executedBranches: int,
383+
* executablePaths: int,
384+
* executedPaths: int,
385+
* ccn: int,
386+
* coverage: int,
387+
* crap: int,
388+
* link: string
389+
* } $arr
390+
*/
391+
$arr = [
364392
'className' => $className,
365393
'namespace' => $class['namespace'],
366394
'methods' => [],
@@ -376,6 +404,7 @@ private function processClasses(array $classes): void
376404
'crap' => 0,
377405
'link' => $link . $class['startLine'],
378406
];
407+
$this->classes[$className] = $arr;
379408

380409
foreach ($class['methods'] as $methodName => $method) {
381410
$methodData = $this->newMethod($className, $methodName, $method, $link);
@@ -513,6 +542,27 @@ static function (array $path)
513542
}
514543
}
515544

545+
/**
546+
* @psalm-param array $method
547+
*
548+
* @psalm-return array{
549+
* methodName: string,
550+
* visibility: string,
551+
* signature: string,
552+
* startLine: int,
553+
* endLine: int,
554+
* executableLines: int,
555+
* executedLines: int,
556+
* executableBranches: int,
557+
* executedBranches: int,
558+
* executablePaths: int,
559+
* executedPaths: int,
560+
* ccn: int,
561+
* coverage: int,
562+
* crap: int,
563+
* link: string
564+
* }
565+
*/
516566
private function newMethod(string $className, string $methodName, array $method, string $link): array
517567
{
518568
$methodData = [

src/StaticAnalysis/CodeUnitFindingVisitor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ public function enterNode(Node $node): void
8484
}
8585

8686
/**
87-
* @psalm-return array<string,array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string,array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
87+
* @psalm-return array<string, array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string, array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
8888
*/
8989
public function classes(): array
9090
{
9191
return $this->classes;
9292
}
9393

9494
/**
95-
* @psalm-return array<string,array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string,array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
95+
* @psalm-return array<string, array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string, array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
9696
*/
9797
public function traits(): array
9898
{

src/StaticAnalysis/ExecutableLinesFindingVisitor.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,9 @@ public function afterTraverse(array $nodes): void
352352
);
353353
}
354354

355+
/**
356+
* @psalm-return array<int, int>
357+
*/
355358
public function executableLinesGroupedByBranch(): array
356359
{
357360
return $this->executableLinesGroupedByBranch;

src/StaticAnalysis/FileAnalyser.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,33 @@
1414
*/
1515
interface FileAnalyser
1616
{
17+
/**
18+
* @psalm-return array<string, array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string,array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
19+
*/
1720
public function classesIn(string $filename): array;
1821

22+
/**
23+
* @psalm-return array<string,array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string,array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
24+
*/
1925
public function traitsIn(string $filename): array;
2026

27+
/**
28+
* @psalm-return array<string,array{name: string, namespacedName: string, namespace: string, signature: string, startLine: int, endLine: int, ccn: int}>
29+
*/
2130
public function functionsIn(string $filename): array;
2231

2332
/**
2433
* @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
2534
*/
2635
public function linesOfCodeFor(string $filename): array;
2736

37+
/**
38+
* @psalm-return array<int, int>
39+
*/
2840
public function executableLinesIn(string $filename): array;
2941

42+
/**
43+
* @psalm-return array<int, int>
44+
*/
3045
public function ignoredLinesFor(string $filename): array;
3146
}

src/StaticAnalysis/ParsingFileAnalyser.php

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,34 @@
3535
*/
3636
final class ParsingFileAnalyser implements FileAnalyser
3737
{
38-
private array $classes = [];
39-
private array $traits = [];
38+
/**
39+
* @psalm-var array<string, array<string, array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string, array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>>
40+
*/
41+
private array $classes = [];
42+
43+
/**
44+
* @psalm-var array<string, array<string, array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string, array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>>
45+
*/
46+
private array $traits = [];
47+
48+
/**
49+
* @psalm-var array<string, array<string, array{name: string, namespacedName: string, namespace: string, signature: string, startLine: int, endLine: int, ccn: int}>>
50+
*/
4051
private array $functions = [];
4152

4253
/**
43-
* @var array<string,array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}>
54+
* @var array<string, array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}>
55+
*/
56+
private array $linesOfCode = [];
57+
58+
/**
59+
* @var array<string, array<int, int>>
60+
*/
61+
private array $ignoredLines = [];
62+
63+
/**
64+
* @var array<string, array<int, int>>
4465
*/
45-
private array $linesOfCode = [];
46-
private array $ignoredLines = [];
4766
private array $executableLines = [];
4867
private readonly bool $useAnnotationsForIgnoringCode;
4968
private readonly bool $ignoreDeprecatedCode;
@@ -75,9 +94,6 @@ public function functionsIn(string $filename): array
7594
return $this->functions[$filename];
7695
}
7796

78-
/**
79-
* @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
80-
*/
8197
public function linesOfCodeFor(string $filename): array
8298
{
8399
$this->analyse($filename);

0 commit comments

Comments
 (0)