psap / sap analysis report
SAP Analysis Report
One self-contained page: summary, the interactive I/A graph, in-browser Mermaid diagrams, cycle details, and diagram sources. No network access is required or made.
- components
- 7
- plotted
- 7
- meanDistance
- 0.58
- cycleGroups
- 0
- outOfScopeDependencies
- 55
Analysis coverage 100.00%
- discoveredFiles
- 49
- selectedFiles
- 49
- analyzedFiles
- 49
- excludedFiles
- 0
- skippedFiles
- 0
Highest distance from the main sequence
| Component | I | A | D | Zone |
|---|---|---|---|---|
| Psap\Baseline | 0.00 | 0.00 | 1.00 | painZone |
| Psap\Diagnostic | 0.00 | 0.12 | 0.88 | painZone |
| Psap\Analyzer | 0.15 | 0.00 | 0.85 | painZone |
| Psap\Metrics | 0.17 | 0.00 | 0.83 | painZone |
| Psap\Component | 0.46 | 0.00 | 0.54 | painZone |
| Psap\Console | 1.00 | 0.00 | 0.00 | mainSequence |
| Psap\Report | 0.90 | 0.10 | 0.00 | mainSequence |
Dependencies outside analysis scope
These references are not counted in Ca, Ce, I, A or D. PHP built-in types are excluded from this list.
Classes 55 · Namespaces 15. See the Interactive I/A tab for every namespace, component and source location.
| Namespace | Classes | Referencing classes |
|---|---|---|
| PhpParser\Node\Stmt | 9 | 3 |
| PhpParser\Node | 8 | 2 |
| PhpParser\Node\Expr | 8 | 1 |
| PHPStan\PhpDocParser\Ast\Type | 7 | 1 |
| PhpParser | 7 | 4 |
| PHPStan\PhpDocParser\Parser | 4 | 1 |
| Symfony\Component\Console\Input | 3 | 1 |
| Symfony\Component\Console\Output | 2 | 1 |
| PHPStan\PhpDocParser | 1 | 1 |
| PHPStan\PhpDocParser\Ast\PhpDoc | 1 | 1 |
+5 more namespaces
Breakdown by component
Psap\Analyzer · Classes 48
PhpParser\Node\Stmt
Classes 9 · Referencing classes 3
Psap\Analyzer\Internal\DependencyNameCollector → PhpParser\Node\Stmt\Catch_·instanceof· Analyzer/Internal/DependencyNameCollector.php:155Psap\Analyzer\DependencyAnalyzer → PhpParser\Node\Stmt\ClassLike·parameter_type· Analyzer/DependencyAnalyzer.php:279Psap\Analyzer\DependencyAnalyzer → PhpParser\Node\Stmt\ClassLike·parameter_type· Analyzer/DependencyAnalyzer.php:293
+18 more source locations omitted
PhpParser\Node
Classes 8 · Referencing classes 2
Psap\Analyzer\Internal\DependencyNameCollector → PhpParser\Node\Attribute·instanceof· Analyzer/Internal/DependencyNameCollector.php:61Psap\Analyzer\Internal\DependencyNameCollector → PhpParser\Node\ComplexType·parameter_type· Analyzer/Internal/DependencyNameCollector.php:195Psap\Analyzer\Internal\DependencyNameCollector → PhpParser\Node\ComplexType·parameter_type· Analyzer/Internal/DependencyNameCollector.php:206
+19 more source locations omitted
PhpParser\Node\Expr
Classes 8 · Referencing classes 1
Psap\Analyzer\Internal\DependencyNameCollector → PhpParser\Node\Expr\ArrowFunction·instanceof· Analyzer/Internal/DependencyNameCollector.php:118Psap\Analyzer\Internal\DependencyNameCollector → PhpParser\Node\Expr\ClassConstFetch·instanceof· Analyzer/Internal/DependencyNameCollector.php:143Psap\Analyzer\Internal\DependencyNameCollector → PhpParser\Node\Expr\Closure·instanceof· Analyzer/Internal/DependencyNameCollector.php:118
+5 more source locations omitted
PHPStan\PhpDocParser\Ast\Type
Classes 7 · Referencing classes 1
Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode·instanceof· Analyzer/Internal/DocblockTypeExtractor.php:170Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Ast\Type\GenericTypeNode·instanceof· Analyzer/Internal/DocblockTypeExtractor.php:175Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode·instanceof· Analyzer/Internal/DocblockTypeExtractor.php:166
+4 more source locations omitted
PhpParser
Classes 7 · Referencing classes 4
Psap\Analyzer\DependencyAnalyzer → PhpParser\Error·catch· Analyzer/DependencyAnalyzer.php:105Psap\Analyzer\DependencyAnalyzer → PhpParser\Error·catch· Analyzer/DependencyAnalyzer.php:137Psap\Analyzer\DependencyAnalyzer → PhpParser\Error·parameter_type· Analyzer/DependencyAnalyzer.php:175
+21 more source locations omitted
PHPStan\PhpDocParser\Parser
Classes 4 · Referencing classes 1
Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Parser\ConstExprParser·new· Analyzer/Internal/DocblockTypeExtractor.php:66Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Parser\PhpDocParser·property_type· Analyzer/Internal/DocblockTypeExtractor.php:60Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Parser\PhpDocParser·new· Analyzer/Internal/DocblockTypeExtractor.php:68
+2 more source locations omitted
PHPStan\PhpDocParser
Classes 1 · Referencing classes 1
Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\ParserConfig·new· Analyzer/Internal/DocblockTypeExtractor.php:64
PHPStan\PhpDocParser\Ast\PhpDoc
Classes 1 · Referencing classes 1
Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode·return_type· Analyzer/Internal/DocblockTypeExtractor.php:147
PHPStan\PhpDocParser\Lexer
Classes 1 · Referencing classes 1
Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Lexer\Lexer·property_type· Analyzer/Internal/DocblockTypeExtractor.php:59Psap\Analyzer\Internal\DocblockTypeExtractor → PHPStan\PhpDocParser\Lexer\Lexer·new· Analyzer/Internal/DocblockTypeExtractor.php:65
PhpParser\NodeVisitor
Classes 1 · Referencing classes 2
Psap\Analyzer\DependencyAnalyzer → PhpParser\NodeVisitor\NameResolver·new· Analyzer/DependencyAnalyzer.php:126Psap\Analyzer\Internal\RootClassLikeCollector → PhpParser\NodeVisitor\NameResolver·parameter_type· Analyzer/Internal/RootClassLikeCollector.php:32
PhpParser\Node\Name
Classes 1 · Referencing classes 1
Psap\Analyzer\Internal\DocblockTypeExtractor → PhpParser\Node\Name\FullyQualified·new· Analyzer/Internal/DocblockTypeExtractor.php:225
Psap\Console · Classes 7
Symfony\Component\Console\Input
Classes 3 · Referencing classes 1
Psap\Console\AnalyzeCommand → Symfony\Component\Console\Input\InputArgument·class_constant· Console/AnalyzeCommand.php:62Psap\Console\AnalyzeCommand → Symfony\Component\Console\Input\InputInterface·parameter_type· Console/AnalyzeCommand.php:123Psap\Console\AnalyzeCommand → Symfony\Component\Console\Input\InputOption·class_constant· Console/AnalyzeCommand.php:68
+8 more source locations omitted
Symfony\Component\Console\Output
Classes 2 · Referencing classes 1
Psap\Console\AnalyzeCommand → Symfony\Component\Console\Output\ConsoleOutputInterface·instanceof· Console/AnalyzeCommand.php:125Psap\Console\AnalyzeCommand → Symfony\Component\Console\Output\ConsoleOutputInterface·instanceof· Console/AnalyzeCommand.php:278Psap\Console\AnalyzeCommand → Symfony\Component\Console\Output\OutputInterface·parameter_type· Console/AnalyzeCommand.php:123
+2 more source locations omitted
Symfony\Component\Console\Attribute
Classes 1 · Referencing classes 1
Psap\Console\AnalyzeCommand → Symfony\Component\Console\Attribute\AsCommand·attribute· Console/AnalyzeCommand.php:54
Symfony\Component\Console\Command
Classes 1 · Referencing classes 1
Psap\Console\AnalyzeCommand → Symfony\Component\Console\Command\Command·extends· Console/AnalyzeCommand.php:55Psap\Console\AnalyzeCommand → Symfony\Component\Console\Command\Command·class_constant· Console/AnalyzeCommand.php:133Psap\Console\AnalyzeCommand → Symfony\Component\Console\Command\Command·class_constant· Console/AnalyzeCommand.php:146
+13 more source locations omitted
The interactive Instability / Abstractness report is embedded below. It follows the language selector above.
I/A quadrant chart
Rendered in your browser by the bundled Mermaid. Zones are shown as quadrant labels (an approximation of the radius-based zones).
Dependency flowchart
Components and their dependencies. Red edges are shortest cycle paths (ADP violations).
Circular dependencies
Each group shows one representative shortest path and the class-level evidence that creates its component dependencies.
No circular dependencies (ADP violations) were detected.
Copy or download the raw diagram sources for use in external viewers or with AI assistants.