Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 71fa4bd

Browse files
committed
feat: Introduce TraitRenderMode for improved trait handling in relationships and nodes
1 parent c06441b commit 71fa4bd

File tree

5 files changed

+33
-6
lines changed

5 files changed

+33
-6
lines changed

src/ClassDiagramRenderer/ClassDiagram.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\Node\Node;
77
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\Node\Nodes;
8+
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\RenderOptions\RenderOptions;
89
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\Node\Relationship\Relationship;
910
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\Node\Relationship\Relationships;
10-
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\RenderOptions\RenderOptions;
1111

1212
class ClassDiagram
1313
{
@@ -37,7 +37,7 @@ public function addRelationships(Relationship ...$relationships): self
3737
return $this;
3838
}
3939

40-
public function render(RenderOptions $options = null): string
40+
public function render(RenderOptions $options): string
4141
{
4242
$nodes = $this->nodes->filter($options)->sort()->getAll();
4343
$relationships = $this->relationships->filter($options)->sort()->getAll();

src/ClassDiagramRenderer/Node/Nodes.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
namespace Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\Node;
55
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\RenderOptions\RenderOptions;
6+
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\TraitRenderMode;
67

78
class Nodes
89
{
@@ -44,7 +45,7 @@ public function filter(RenderOptions $options): self
4445
{
4546
$filtered = new self();
4647
foreach ($this->nodes as $node) {
47-
if (!$options->includeTraits && $node instanceof Trait_) {
48+
if (!$options->traitRenderMode->isWithTraits() && $node instanceof Trait_) {
4849
continue;
4950
}
5051
$filtered->add($node);

src/ClassDiagramRenderer/Node/Relationship/Relationships.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\Node\Trait_;
77
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\RenderOptions\RenderOptions;
8+
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\TraitRenderMode;
89

910
class Relationships
1011
{
@@ -47,7 +48,7 @@ public function sort(): self
4748
public function filter(RenderOptions $options): self
4849
{
4950
$filtered = array_filter($this->relationships, function (Relationship $relationship) use ($options) {
50-
if (!$options->includeTraits && ($relationship->from instanceof Trait_ || $relationship->to instanceof Trait_)) {
51+
if (!$options->traitRenderMode->isWithTraits() && ($relationship->from instanceof Trait_ || $relationship->to instanceof Trait_)) {
5152
return false;
5253
}
5354
if ($relationship instanceof Dependency && !$options->includeDependencies) {

src/ClassDiagramRenderer/RenderOptions/RenderOptions.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,21 @@
33

44
namespace Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\RenderOptions;
55

6+
use Tasuku43\MermaidClassDiagram\ClassDiagramRenderer\TraitRenderMode;
7+
68
class RenderOptions
79
{
810
public function __construct(
911
public bool $includeDependencies,
1012
public bool $includeCompositions,
1113
public bool $includeInheritances,
1214
public bool $includeRealizations,
13-
public bool $includeTraits = false,
15+
public TraitRenderMode $traitRenderMode = TraitRenderMode::Flatten,
1416
) {
1517
}
1618

1719
public static function default(): self
1820
{
19-
return new self(true, true, true, true, false);
21+
return new self(true, true, true, true, TraitRenderMode::Flatten);
2022
}
2123
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Tasuku43\MermaidClassDiagram\ClassDiagramRenderer;
5+
6+
enum TraitRenderMode
7+
{
8+
// Render trait nodes and trait use relationships
9+
case WithTraits;
10+
11+
// Hide trait nodes and use lines; flatten trait deps to using classes
12+
case Flatten;
13+
14+
public function isWithTraits(): bool
15+
{
16+
return $this === self::WithTraits;
17+
}
18+
19+
public function isFlatten(): bool
20+
{
21+
return $this === self::Flatten;
22+
}
23+
}

0 commit comments

Comments
 (0)